9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-30 04:19:27 +00:00

添加外部配方原料支持

This commit is contained in:
XiaoMoMi
2025-07-14 21:58:26 +08:00
parent 211bcd3df2
commit 9cbd8cd39e
12 changed files with 68 additions and 8 deletions

View File

@@ -77,6 +77,21 @@ public class BukkitItemManager extends AbstractItemManager<ItemStack> {
this.emptyUniqueItem = new UniqueIdItem<>(UniqueKey.AIR, this.emptyItem);
}
@SuppressWarnings("unchecked")
@Override
public void delayedLoad() {
super.delayedLoad();
List<ExternalItemProvider<ItemStack>> sources = new ArrayList<>();
for (String externalSource : Config.recipeIngredientSources()) {
String sourceId = externalSource.toLowerCase(Locale.ENGLISH);
ExternalItemProvider<ItemStack> provider = getExternalItemProvider(sourceId);
if (provider != null) {
sources.add(provider);
}
}
this.factory.resetRecipeIngredientSources(sources.isEmpty() ? null : sources.toArray(new ExternalItemProvider[0]));
}
@Override
public UniqueIdItem<ItemStack> uniqueEmptyItem() {
return this.emptyUniqueItem;

View File

@@ -6,22 +6,28 @@ import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.CoreReflect
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.MBuiltInRegistries;
import net.momirealms.craftengine.bukkit.util.ItemTags;
import net.momirealms.craftengine.bukkit.util.KeyUtils;
import net.momirealms.craftengine.core.item.ExternalItemProvider;
import net.momirealms.craftengine.core.item.ItemFactory;
import net.momirealms.craftengine.core.item.ItemKeys;
import net.momirealms.craftengine.core.item.ItemWrapper;
import net.momirealms.craftengine.core.item.data.JukeboxPlayable;
import net.momirealms.craftengine.core.item.setting.EquipmentData;
import net.momirealms.craftengine.core.plugin.CraftEngine;
import net.momirealms.craftengine.core.util.CharacterUtils;
import net.momirealms.craftengine.core.util.Key;
import net.momirealms.craftengine.core.util.StringUtils;
import net.momirealms.craftengine.core.util.UniqueKey;
import net.momirealms.sparrow.nbt.Tag;
import org.bukkit.Bukkit;
import org.bukkit.inventory.ItemStack;
import java.util.Locale;
import java.util.Objects;
import java.util.Optional;
public abstract class BukkitItemFactory<W extends ItemWrapper<ItemStack>> extends ItemFactory<W, ItemStack> {
private boolean hasExternalRecipeSource = false;
private ExternalItemProvider<ItemStack>[] recipeIngredientSources = null;
protected BukkitItemFactory(CraftEngine plugin) {
super(plugin);
@@ -52,6 +58,16 @@ public abstract class BukkitItemFactory<W extends ItemWrapper<ItemStack>> extend
}
}
public void resetRecipeIngredientSources(ExternalItemProvider<ItemStack>[] recipeIngredientSources) {
if (recipeIngredientSources == null || recipeIngredientSources.length == 0) {
this.recipeIngredientSources = null;
this.hasExternalRecipeSource = false;
} else {
this.recipeIngredientSources = recipeIngredientSources;
this.hasExternalRecipeSource = true;
}
}
@SuppressWarnings("deprecation")
@Override
protected byte[] toByteArray(W item) {
@@ -82,6 +98,14 @@ public abstract class BukkitItemFactory<W extends ItemWrapper<ItemStack>> extend
@Override
protected UniqueKey recipeIngredientID(W item) {
if (this.hasExternalRecipeSource) {
for (ExternalItemProvider<ItemStack> source : this.recipeIngredientSources) {
String id = source.id(item.getItem());
if (id != null) {
return UniqueKey.create(Key.of(source.plugin(), StringUtils.toLowerCase(id)));
}
}
}
return UniqueKey.create(id(item));
}

View File

@@ -227,7 +227,6 @@ public class BukkitCraftEngine extends CraftEngine {
}
}, 1, 1);
}
super.compatibilityManager().onDelayedEnable();
}
@Override