From 3da881829ea856600eca3a275881fc50331d6953 Mon Sep 17 00:00:00 2001 From: Gunther De Wachter Date: Thu, 13 Jul 2017 09:03:18 +0200 Subject: [PATCH] Fixed recipe crash when another mod registers a wooden gear. I'll have to go through every other recipe later. --- src/main/java/appeng/recipes/RecipeHandler.java | 14 ++++++++++++++ .../helpers/PartShapelessCraftingFactory.java | 7 +------ .../appliedenergistics2/recipes/_factories.json | 3 +++ .../recipes/misc/grindstone_woodengear.json | 6 ++++++ 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/main/java/appeng/recipes/RecipeHandler.java b/src/main/java/appeng/recipes/RecipeHandler.java index 8a04f83fb..a1367ea55 100644 --- a/src/main/java/appeng/recipes/RecipeHandler.java +++ b/src/main/java/appeng/recipes/RecipeHandler.java @@ -25,6 +25,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.util.*; import java.util.Map.Entry; +import java.util.function.BooleanSupplier; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; @@ -36,7 +37,9 @@ import com.google.common.collect.HashMultimap; import com.google.gson.JsonObject; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.util.JsonUtils; import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.crafting.IConditionFactory; import net.minecraftforge.common.crafting.IIngredientFactory; import net.minecraftforge.common.crafting.JsonContext; import net.minecraftforge.fml.common.LoaderState; @@ -763,6 +766,17 @@ public class RecipeHandler implements IRecipeHandler return true; } + public static class MaterialExists implements IConditionFactory + { + @Override + public BooleanSupplier parse( JsonContext jsonContext, JsonObject jsonObject ) { + String material = JsonUtils.getString( jsonObject, "material" ); + Object result = (Object) Api.INSTANCE.registries().recipes().resolveItem( AppEng.MOD_ID, material ); + return () -> result != null; + + } + } + public static class PartFactory implements IIngredientFactory { diff --git a/src/main/java/appeng/recipes/helpers/PartShapelessCraftingFactory.java b/src/main/java/appeng/recipes/helpers/PartShapelessCraftingFactory.java index 2df836789..97b30539c 100644 --- a/src/main/java/appeng/recipes/helpers/PartShapelessCraftingFactory.java +++ b/src/main/java/appeng/recipes/helpers/PartShapelessCraftingFactory.java @@ -47,12 +47,7 @@ public class PartShapelessCraftingFactory extends ShapelessOreRecipe String ingredient = resultObject.get( "part" ).getAsString(); Object result = (Object) Api.INSTANCE.registries().recipes().resolveItem( AppEng.MOD_ID, ingredient ); - if( result instanceof ResolverResultSet ) - { - ResolverResultSet resolverResultSet = (ResolverResultSet) result; - return new PartShapelessCraftingFactory(group.isEmpty() ? null : new ResourceLocation(group), ings, resolverResultSet.results.toArray( new ItemStack[resolverResultSet.results.size()] )[0]); - } - else if( result instanceof ResolverResult ) + if( result instanceof ResolverResult ) { ResolverResult resolverResult = (ResolverResult) result; diff --git a/src/main/resources/assets/appliedenergistics2/recipes/_factories.json b/src/main/resources/assets/appliedenergistics2/recipes/_factories.json index dd4aeb3a8..3aa598f83 100644 --- a/src/main/resources/assets/appliedenergistics2/recipes/_factories.json +++ b/src/main/resources/assets/appliedenergistics2/recipes/_factories.json @@ -1,4 +1,7 @@ { + "conditions": { + "material_exists": "appeng.recipes.RecipeHandler$MaterialExists" + }, "ingredients": { "part": "appeng.recipes.RecipeHandler$PartFactory" }, diff --git a/src/main/resources/assets/appliedenergistics2/recipes/misc/grindstone_woodengear.json b/src/main/resources/assets/appliedenergistics2/recipes/misc/grindstone_woodengear.json index 54e0e7cc6..0e295f611 100644 --- a/src/main/resources/assets/appliedenergistics2/recipes/misc/grindstone_woodengear.json +++ b/src/main/resources/assets/appliedenergistics2/recipes/misc/grindstone_woodengear.json @@ -1,4 +1,10 @@ { + "conditions": [ + { + "type": "appliedenergistics2:material_exists", + "material": "material.WoodenGear" + } + ], "result": { "type": "appliedenergistics2:part", "part": "material.WoodenGear"