9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2026-01-06 15:52:03 +00:00

改进构建

This commit is contained in:
jhqwqmc
2025-12-17 17:25:06 +08:00
parent 07e1a3966b
commit c2542604c8
7 changed files with 71 additions and 33 deletions

View File

@@ -1,9 +1,7 @@
package net.momirealms.craftengine.bukkit.item;
import cn.gtemc.itembridge.api.Provider;
import cn.gtemc.itembridge.api.context.BuildContext;
import cn.gtemc.itembridge.core.BukkitItemBridge;
import cn.gtemc.itembridge.hook.context.ItemContextKeys;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
@@ -26,7 +24,10 @@ import net.momirealms.craftengine.core.item.recipe.UniqueIdItem;
import net.momirealms.craftengine.core.pack.AbstractPackManager;
import net.momirealms.craftengine.core.plugin.config.Config;
import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException;
import net.momirealms.craftengine.core.util.*;
import net.momirealms.craftengine.core.util.GsonHelper;
import net.momirealms.craftengine.core.util.Key;
import net.momirealms.craftengine.core.util.UniqueKey;
import net.momirealms.craftengine.core.util.VersionHelper;
import org.bukkit.Bukkit;
import org.bukkit.event.HandlerList;
import org.bukkit.inventory.ItemStack;
@@ -40,6 +41,7 @@ import java.nio.file.Path;
import java.util.*;
import java.util.function.Function;
@SuppressWarnings("unchecked")
public class BukkitItemManager extends AbstractItemManager<ItemStack> {
static {
registerVanillaItemExtraBehavior(FlintAndSteelItemBehavior.INSTANCE, ItemKeys.FLINT_AND_STEEL);
@@ -84,10 +86,10 @@ public class BukkitItemManager extends AbstractItemManager<ItemStack> {
@Override
public void delayedLoad() {
super.delayedLoad();
List<Provider<ItemStack>> sources = new ArrayList<>();
List<Provider<ItemStack, org.bukkit.entity.Player>> sources = new ArrayList<>();
for (String externalSource : Config.recipeIngredientSources()) {
String sourceId = externalSource.toLowerCase(Locale.ENGLISH);
Optional<Provider<ItemStack>> provider = itemBridgeProvider().provider(sourceId);
Optional<Provider<ItemStack, org.bukkit.entity.Player>> provider = itemBridgeProvider().provider(sourceId);
provider.ifPresent(sources::add);
}
this.factory.resetRecipeIngredientSources(sources.isEmpty() ? null : sources.toArray(new Provider[0]));
@@ -452,11 +454,4 @@ public class BukkitItemManager extends AbstractItemManager<ItemStack> {
}
return this.itemBridge;
}
@Override
public Optional<ItemStack> buildPlatformItem(Provider<ItemStack> provider, String id, ItemBuildContext context) {
Player player = context.player();
org.bukkit.entity.Player bukkitPlayer = player == null ? null : (org.bukkit.entity.Player) player.platformPlayer();
return provider.build(id, BuildContext.builder().withOptional(ItemContextKeys.PLAYER, bukkitPlayer).build());
}
}

View File

@@ -19,6 +19,7 @@ import net.momirealms.craftengine.core.util.UniqueKey;
import net.momirealms.craftengine.core.util.VersionHelper;
import net.momirealms.sparrow.nbt.Tag;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import java.util.Objects;
@@ -26,7 +27,7 @@ import java.util.Optional;
public abstract class BukkitItemFactory<W extends ItemWrapper<ItemStack>> extends ItemFactory<W, ItemStack> {
private boolean hasExternalRecipeSource = false;
private Provider<ItemStack>[] recipeIngredientSources = null;
private Provider<ItemStack, Player>[] recipeIngredientSources = null;
protected BukkitItemFactory(CraftEngine plugin) {
super(plugin);
@@ -50,7 +51,7 @@ public abstract class BukkitItemFactory<W extends ItemWrapper<ItemStack>> extend
throw new IllegalStateException("Unsupported server version: " + VersionHelper.MINECRAFT_VERSION.version());
}
public void resetRecipeIngredientSources(Provider<ItemStack>[] recipeIngredientSources) {
public void resetRecipeIngredientSources(Provider<ItemStack, Player>[] recipeIngredientSources) {
if (recipeIngredientSources == null || recipeIngredientSources.length == 0) {
this.recipeIngredientSources = null;
this.hasExternalRecipeSource = false;
@@ -102,7 +103,7 @@ public abstract class BukkitItemFactory<W extends ItemWrapper<ItemStack>> extend
return null;
}
if (this.hasExternalRecipeSource) {
for (Provider<ItemStack> source : this.recipeIngredientSources) {
for (Provider<ItemStack, Player> source : this.recipeIngredientSources) {
Optional<String> id = source.id(item.getItem());
if (id.isPresent()) {
return UniqueKey.create(Key.of(source.plugin(), StringUtils.toLowerCase(id.get())));