Skip to content

Commit

Permalink
Fix #3268 TippedArrowRecipeMaker does not check if the recipe exists,…
Browse files Browse the repository at this point in the history
… it always shows the recipe
  • Loading branch information
mezz committed Jan 26, 2024
1 parent bf23b4e commit ef81e6b
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 4 deletions.
14 changes: 12 additions & 2 deletions src/main/java/mezz/jei/plugins/vanilla/VanillaPlugin.java
Expand Up @@ -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;
Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -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<List<IRecipe>, Set<Class<? extends IRecipe>>> result = CraftingRecipeChecker.getValidRecipes(jeiHelpers);
List<IRecipe> validRecipes = result.getLeft();
Set<Class<? extends IRecipe>> 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);
Expand Down
@@ -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;
Expand All @@ -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<IRecipe> getValidRecipes(final IJeiHelpers jeiHelpers) {
public static Pair<List<IRecipe>, Set<Class<? extends IRecipe>>> getValidRecipes(final IJeiHelpers jeiHelpers) {
CraftingRecipeValidator<ShapedOreRecipe> shapedOreRecipeValidator = new CraftingRecipeValidator<>(recipe -> new ShapedOreRecipeWrapper(jeiHelpers, recipe));
CraftingRecipeValidator<ShapedRecipes> shapedRecipesValidator = new CraftingRecipeValidator<>(recipe -> new ShapedRecipesWrapper(jeiHelpers, recipe));
CraftingRecipeValidator<ShapelessOreRecipe> shapelessOreRecipeValidator = new CraftingRecipeValidator<>(recipe -> new ShapelessRecipeWrapper<>(jeiHelpers, recipe));
CraftingRecipeValidator<ShapelessRecipes> shapelessRecipesValidator = new CraftingRecipeValidator<>(recipe -> new ShapelessRecipeWrapper<>(jeiHelpers, recipe));

Set<Class<? extends IRecipe>> recipeTypes = new HashSet<>();
StackHelper stackHelper = Internal.getStackHelper();
Iterator<IRecipe> recipeIterator = CraftingManager.REGISTRY.iterator();
List<IRecipe> 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);
Expand All @@ -57,7 +63,7 @@ public static List<IRecipe> getValidRecipes(final IJeiHelpers jeiHelpers) {
validRecipes.add(recipe);
}
}
return validRecipes;
return ImmutablePair.of(validRecipes, recipeTypes);
}

private static final class CraftingRecipeValidator<T extends IRecipe> {
Expand Down

0 comments on commit ef81e6b

Please sign in to comment.