diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/BukkitItemManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/BukkitItemManager.java index 219e20ef5..4d58dca43 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/BukkitItemManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/BukkitItemManager.java @@ -401,15 +401,13 @@ public class BukkitItemManager extends AbstractItemManager { for (Object item : (Iterable) MBuiltInRegistries.ITEM) { Object resourceLocation = FastNMS.INSTANCE.method$Registry$getKey(MBuiltInRegistries.ITEM, item); Key itemKey = KeyUtils.resourceLocationToKey(resourceLocation); - if (itemKey.namespace().equals("minecraft")) { - VANILLA_ITEMS.add(itemKey); - UniqueKey uniqueKey = UniqueKey.create(itemKey); - Object mcHolder = FastNMS.INSTANCE.method$Registry$getHolderByResourceKey(MBuiltInRegistries.ITEM, FastNMS.INSTANCE.method$ResourceKey$create(MRegistries.ITEM, resourceLocation)).get(); - Set tags = (Set) CoreReflections.field$Holder$Reference$tags.get(mcHolder); - for (Object tag : tags) { - Key tagId = Key.of(CoreReflections.field$TagKey$location.get(tag).toString()); - VANILLA_ITEM_TAGS.computeIfAbsent(tagId, (key) -> new ArrayList<>()).add(uniqueKey); - } + VANILLA_ITEMS.add(itemKey); + UniqueKey uniqueKey = UniqueKey.create(itemKey); + Object mcHolder = FastNMS.INSTANCE.method$Registry$getHolderByResourceKey(MBuiltInRegistries.ITEM, FastNMS.INSTANCE.method$ResourceKey$create(MRegistries.ITEM, resourceLocation)).get(); + Set tags = (Set) CoreReflections.field$Holder$Reference$tags.get(mcHolder); + for (Object tag : tags) { + Key tagId = Key.of(CoreReflections.field$TagKey$location.get(tag).toString()); + VANILLA_ITEM_TAGS.computeIfAbsent(tagId, (key) -> new ArrayList<>()).add(uniqueKey); } } } catch (ReflectiveOperationException e) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/AbstractRecipeSerializer.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/AbstractRecipeSerializer.java index 7f02a3fff..8e24da2b6 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/AbstractRecipeSerializer.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/AbstractRecipeSerializer.java @@ -109,17 +109,26 @@ public abstract class AbstractRecipeSerializer> implement boolean hasCustomItem = false; for (UniqueKey holder : itemIds) { Optional> optionalCustomItem = itemManager.getCustomItem(holder.key()); + UniqueKey vanillaItem; if (optionalCustomItem.isPresent()) { CustomItem customItem = optionalCustomItem.get(); if (customItem.isVanillaItem()) { - minecraftItemIds.add(holder); + vanillaItem = holder; } else { - minecraftItemIds.add(UniqueKey.create(customItem.material())); + vanillaItem = UniqueKey.create(customItem.material()); hasCustomItem = true; } } else { - minecraftItemIds.add(holder); + if (itemManager.isVanillaItem(holder.key())) { + vanillaItem = holder; + } else { + throw new LocalizedResourceConfigException("warning.config.recipe.invalid_ingredient", holder.key().asString()); + } } + if (vanillaItem == UniqueKey.AIR) { + throw new LocalizedResourceConfigException("warning.config.recipe.invalid_ingredient", holder.key().asString()); + } + minecraftItemIds.add(vanillaItem); } return itemIds.isEmpty() ? null : Ingredient.of(itemIds, minecraftItemIds, hasCustomItem); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/util/UniqueKey.java b/core/src/main/java/net/momirealms/craftengine/core/util/UniqueKey.java index a9e023a57..1a4591535 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/util/UniqueKey.java +++ b/core/src/main/java/net/momirealms/craftengine/core/util/UniqueKey.java @@ -1,5 +1,6 @@ package net.momirealms.craftengine.core.util; +import net.momirealms.craftengine.core.item.ItemKeys; import org.jetbrains.annotations.Nullable; import java.util.HashMap; @@ -7,6 +8,7 @@ import java.util.Map; public final class UniqueKey { private static final Map CACHE = new HashMap<>(4096, 0.5f); + public static final UniqueKey AIR = UniqueKey.create(ItemKeys.AIR); private final Key key;