mirror of
https://github.com/Xiao-MoMi/craft-engine.git
synced 2025-12-30 04:19:27 +00:00
添加外部配方原料支持
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
|
||||
@@ -227,7 +227,6 @@ public class BukkitCraftEngine extends CraftEngine {
|
||||
}
|
||||
}, 1, 1);
|
||||
}
|
||||
super.compatibilityManager().onDelayedEnable();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user