diff --git a/features/craft/src/main/java/net/okocraft/box/feature/craft/loader/Processor.java b/features/craft/src/main/java/net/okocraft/box/feature/craft/loader/Processor.java index f72a667b60..c2ece503c5 100644 --- a/features/craft/src/main/java/net/okocraft/box/feature/craft/loader/Processor.java +++ b/features/craft/src/main/java/net/okocraft/box/feature/craft/loader/Processor.java @@ -123,7 +123,12 @@ private void processShapedRecipe(@NotNull ShapedRecipe recipe, @NotNull BoxItem continue; } - IngredientHolder ingredient = this.convertChoice(row * 3 + column, choices.get(symbol)); + RecipeChoice choice = choices.get(symbol); + if (choice == null || choice == RecipeChoice.empty()) { + continue; + } + + IngredientHolder ingredient = this.convertChoice(row * 3 + column, choice); if (ingredient == null || ingredient.patterns().isEmpty()) { return; } @@ -167,8 +172,8 @@ private void processCustomRecipe(@Nullable BoxItem @NotNull [] ingredients, @Not } private @Nullable IngredientHolder convertChoice(int slot, @Nullable RecipeChoice choice) { - if (choice instanceof RecipeChoice.MaterialChoice materialChoice) { - return IngredientHolder.fromMaterialChoice(slot, materialChoice); + if (choice instanceof RecipeChoice.ItemTypeChoice itemTypeChoice) { + return IngredientHolder.fromItemTypeChoice(slot, itemTypeChoice); } if (choice instanceof RecipeChoice.ExactChoice exactChoice) { return IngredientHolder.fromExactChoice(slot, exactChoice); diff --git a/features/craft/src/main/java/net/okocraft/box/feature/craft/model/IngredientHolder.java b/features/craft/src/main/java/net/okocraft/box/feature/craft/model/IngredientHolder.java index 52adafddae..72b0f9c8b2 100644 --- a/features/craft/src/main/java/net/okocraft/box/feature/craft/model/IngredientHolder.java +++ b/features/craft/src/main/java/net/okocraft/box/feature/craft/model/IngredientHolder.java @@ -1,11 +1,16 @@ package net.okocraft.box.feature.craft.model; +import io.papermc.paper.registry.TypedKey; + +import org.bukkit.Registry; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.ItemType; import org.bukkit.inventory.RecipeChoice; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Unmodifiable; +import java.util.ArrayList; import java.util.List; /** @@ -37,14 +42,18 @@ public static void disableCache() { } /** - * Creates a {@link IngredientHolder} from {@link org.bukkit.inventory.RecipeChoice.MaterialChoice}. + * Creates a {@link IngredientHolder} from {@link RecipeChoice.ItemTypeChoice}. * * @param slot the position in the crafting table (0-8) - * @param choice the {@link org.bukkit.inventory.RecipeChoice.MaterialChoice} instance to create {@link IngredientHolder} + * @param choice the {@link RecipeChoice.ItemTypeChoice} instance to create {@link IngredientHolder} * @return a {@link IngredientHolder} */ - public static @NotNull IngredientHolder fromMaterialChoice(int slot, @NotNull RecipeChoice.MaterialChoice choice) { - return ModelCache.getIngredientHolder(slot, choice.getChoices().stream().map(ItemStack::new).toList()); + public static @NotNull IngredientHolder fromItemTypeChoice(int slot, @NotNull RecipeChoice.ItemTypeChoice choice) { + List itemStacks = new ArrayList<>(); + for (TypedKey type : choice.itemTypes()) { + itemStacks.add(Registry.ITEM.getOrThrow(type).createItemStack()); + } + return ModelCache.getIngredientHolder(slot, itemStacks); } /**