From ef81e6b4375a6af616b5c5d196ac6730faba0737 Mon Sep 17 00:00:00 2001 From: mezz Date: Thu, 25 Jan 2024 22:07:31 -0800 Subject: [PATCH] Fix #3268 TippedArrowRecipeMaker does not check if the recipe exists, it always shows the recipe --- .../mezz/jei/plugins/vanilla/VanillaPlugin.java | 14 ++++++++++++-- .../vanilla/crafting/CraftingRecipeChecker.java | 10 ++++++++-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/main/java/mezz/jei/plugins/vanilla/VanillaPlugin.java b/src/main/java/mezz/jei/plugins/vanilla/VanillaPlugin.java index c1a55b6cd..006984674 100644 --- a/src/main/java/mezz/jei/plugins/vanilla/VanillaPlugin.java +++ b/src/main/java/mezz/jei/plugins/vanilla/VanillaPlugin.java @@ -3,7 +3,10 @@ import javax.annotation.Nullable; import java.util.ArrayList; import java.util.List; +import java.util.Set; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.item.crafting.RecipeTippedArrow; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.oredict.OreDictionary; @@ -78,6 +81,7 @@ import mezz.jei.runtime.JeiHelpers; import mezz.jei.startup.StackHelper; import mezz.jei.transfer.PlayerRecipeTransferHandler; +import org.apache.commons.lang3.tuple.Pair; @JEIPlugin public class VanillaPlugin implements IModPlugin { @@ -162,11 +166,17 @@ public void register(IModRegistry registry) { IJeiHelpers jeiHelpers = registry.getJeiHelpers(); IVanillaRecipeFactory vanillaRecipeFactory = jeiHelpers.getVanillaRecipeFactory(); - registry.addRecipes(CraftingRecipeChecker.getValidRecipes(jeiHelpers), VanillaRecipeCategoryUid.CRAFTING); + Pair, Set>> result = CraftingRecipeChecker.getValidRecipes(jeiHelpers); + List validRecipes = result.getLeft(); + Set> recipeTypes = result.getRight(); + + registry.addRecipes(validRecipes, VanillaRecipeCategoryUid.CRAFTING); registry.addRecipes(SmeltingRecipeMaker.getFurnaceRecipes(jeiHelpers), VanillaRecipeCategoryUid.SMELTING); registry.addRecipes(FuelRecipeMaker.getFuelRecipes(ingredientRegistry, jeiHelpers), VanillaRecipeCategoryUid.FUEL); registry.addRecipes(BrewingRecipeMaker.getBrewingRecipes(ingredientRegistry), VanillaRecipeCategoryUid.BREWING); - registry.addRecipes(TippedArrowRecipeMaker.getTippedArrowRecipes(), VanillaRecipeCategoryUid.CRAFTING); + if (recipeTypes.contains(RecipeTippedArrow.class)) { + registry.addRecipes(TippedArrowRecipeMaker.getTippedArrowRecipes(), VanillaRecipeCategoryUid.CRAFTING); + } registry.addRecipes(AnvilRecipeMaker.getAnvilRecipes(vanillaRecipeFactory, ingredientRegistry), VanillaRecipeCategoryUid.ANVIL); registry.handleRecipes(ShapedOreRecipe.class, recipe -> new ShapedOreRecipeWrapper(jeiHelpers, recipe), VanillaRecipeCategoryUid.CRAFTING); diff --git a/src/main/java/mezz/jei/plugins/vanilla/crafting/CraftingRecipeChecker.java b/src/main/java/mezz/jei/plugins/vanilla/crafting/CraftingRecipeChecker.java index 1efdbdbfe..957d3ce97 100644 --- a/src/main/java/mezz/jei/plugins/vanilla/crafting/CraftingRecipeChecker.java +++ b/src/main/java/mezz/jei/plugins/vanilla/crafting/CraftingRecipeChecker.java @@ -1,8 +1,10 @@ package mezz.jei.plugins.vanilla.crafting; import java.util.ArrayList; +import java.util.HashSet; import java.util.Iterator; import java.util.List; +import java.util.Set; import mezz.jei.Internal; import mezz.jei.startup.StackHelper; @@ -21,22 +23,26 @@ import mezz.jei.api.recipe.IRecipeWrapperFactory; import mezz.jei.util.ErrorUtil; import mezz.jei.util.Log; +import org.apache.commons.lang3.tuple.ImmutablePair; +import org.apache.commons.lang3.tuple.Pair; public final class CraftingRecipeChecker { private CraftingRecipeChecker() { } - public static List getValidRecipes(final IJeiHelpers jeiHelpers) { + public static Pair, Set>> getValidRecipes(final IJeiHelpers jeiHelpers) { CraftingRecipeValidator shapedOreRecipeValidator = new CraftingRecipeValidator<>(recipe -> new ShapedOreRecipeWrapper(jeiHelpers, recipe)); CraftingRecipeValidator shapedRecipesValidator = new CraftingRecipeValidator<>(recipe -> new ShapedRecipesWrapper(jeiHelpers, recipe)); CraftingRecipeValidator shapelessOreRecipeValidator = new CraftingRecipeValidator<>(recipe -> new ShapelessRecipeWrapper<>(jeiHelpers, recipe)); CraftingRecipeValidator shapelessRecipesValidator = new CraftingRecipeValidator<>(recipe -> new ShapelessRecipeWrapper<>(jeiHelpers, recipe)); + Set> recipeTypes = new HashSet<>(); StackHelper stackHelper = Internal.getStackHelper(); Iterator recipeIterator = CraftingManager.REGISTRY.iterator(); List validRecipes = new ArrayList<>(); while (recipeIterator.hasNext()) { IRecipe recipe = recipeIterator.next(); + recipeTypes.add(recipe.getClass()); if (recipe instanceof ShapedOreRecipe) { if (shapedOreRecipeValidator.isRecipeValid((ShapedOreRecipe) recipe, stackHelper)) { validRecipes.add(recipe); @@ -57,7 +63,7 @@ public static List getValidRecipes(final IJeiHelpers jeiHelpers) { validRecipes.add(recipe); } } - return validRecipes; + return ImmutablePair.of(validRecipes, recipeTypes); } private static final class CraftingRecipeValidator {