diff --git a/src/main/java/appeng/integration/modules/jei/CondenserCategory.java b/src/main/java/appeng/integration/modules/jei/CondenserCategory.java index 7bd8cceb..8c2c3098 100644 --- a/src/main/java/appeng/integration/modules/jei/CondenserCategory.java +++ b/src/main/java/appeng/integration/modules/jei/CondenserCategory.java @@ -22,6 +22,7 @@ package appeng.integration.modules.jei; import java.util.ArrayList; import java.util.List; +import mezz.jei.api.recipe.IRecipeCategory; import net.minecraft.client.Minecraft; import net.minecraft.client.resources.I18n; import net.minecraft.item.ItemStack; @@ -34,7 +35,6 @@ import mezz.jei.api.gui.IDrawableStatic; import mezz.jei.api.gui.IGuiItemStackGroup; import mezz.jei.api.gui.IRecipeLayout; import mezz.jei.api.ingredients.IIngredients; -import mezz.jei.api.recipe.BlankRecipeCategory; import appeng.api.AEApi; import appeng.api.config.CondenserOutput; @@ -44,7 +44,7 @@ import appeng.core.AppEng; import appeng.tile.misc.TileCondenser; -class CondenserCategory extends BlankRecipeCategory +class CondenserCategory implements IRecipeCategory { public static final String UID = "appliedenergistics2.condenser"; diff --git a/src/main/java/appeng/integration/modules/jei/CondenserOutputHandler.java b/src/main/java/appeng/integration/modules/jei/CondenserOutputHandler.java index cdaa2f42..b2ec7cfa 100644 --- a/src/main/java/appeng/integration/modules/jei/CondenserOutputHandler.java +++ b/src/main/java/appeng/integration/modules/jei/CondenserOutputHandler.java @@ -19,19 +19,19 @@ package appeng.integration.modules.jei; +import mezz.jei.api.recipe.IRecipeWrapperFactory; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import mezz.jei.api.IGuiHelper; import mezz.jei.api.gui.IDrawable; -import mezz.jei.api.recipe.IRecipeHandler; import mezz.jei.api.recipe.IRecipeWrapper; import appeng.api.config.CondenserOutput; import appeng.core.AppEng; -class CondenserOutputHandler implements IRecipeHandler +class CondenserOutputHandler implements IRecipeWrapperFactory { private final ItemStack matterBall; @@ -49,18 +49,6 @@ class CondenserOutputHandler implements IRecipeHandler this.iconButtonSingularity = guiHelper.createDrawable( statesLocation, 32, 112, 14, 14, 28, 0, 78, 0 ); } - @Override - public Class getRecipeClass() - { - return CondenserOutput.class; - } - - @Override - public String getRecipeCategoryUid( CondenserOutput recipe ) - { - return CondenserCategory.UID; - } - @Override public IRecipeWrapper getRecipeWrapper( CondenserOutput recipe ) { @@ -74,18 +62,4 @@ class CondenserOutputHandler implements IRecipeHandler return null; } } - - @Override - public boolean isRecipeValid( CondenserOutput recipe ) - { - switch( recipe ) - { - case MATTER_BALLS: - return this.matterBall != null; - case SINGULARITY: - return this.singularity != null; - default: - return false; - } - } } diff --git a/src/main/java/appeng/integration/modules/jei/CondenserOutputWrapper.java b/src/main/java/appeng/integration/modules/jei/CondenserOutputWrapper.java index cfc92e63..54b210fa 100644 --- a/src/main/java/appeng/integration/modules/jei/CondenserOutputWrapper.java +++ b/src/main/java/appeng/integration/modules/jei/CondenserOutputWrapper.java @@ -26,6 +26,7 @@ import javax.annotation.Nullable; import com.google.common.base.Splitter; +import mezz.jei.api.recipe.IRecipeWrapper; import net.minecraft.client.Minecraft; import net.minecraft.client.resources.I18n; import net.minecraft.item.ItemStack; @@ -33,12 +34,11 @@ import net.minecraftforge.fml.client.config.HoverChecker; import mezz.jei.api.gui.IDrawable; import mezz.jei.api.ingredients.IIngredients; -import mezz.jei.api.recipe.BlankRecipeWrapper; import appeng.api.config.CondenserOutput; -class CondenserOutputWrapper extends BlankRecipeWrapper +class CondenserOutputWrapper implements IRecipeWrapper { private final ItemStack outputItem; diff --git a/src/main/java/appeng/integration/modules/jei/FacadeRecipeWrapper.java b/src/main/java/appeng/integration/modules/jei/FacadeRecipeWrapper.java index b5658fb8..badd96b7 100644 --- a/src/main/java/appeng/integration/modules/jei/FacadeRecipeWrapper.java +++ b/src/main/java/appeng/integration/modules/jei/FacadeRecipeWrapper.java @@ -25,14 +25,13 @@ import java.util.List; import net.minecraft.item.ItemStack; import mezz.jei.api.ingredients.IIngredients; -import mezz.jei.api.recipe.BlankRecipeWrapper; import mezz.jei.api.recipe.wrapper.IShapedCraftingRecipeWrapper; /** * Acts as a fake facade recipe wrapper, created by {@link FacadeRegistryPlugin}. */ -class FacadeRecipeWrapper extends BlankRecipeWrapper implements IShapedCraftingRecipeWrapper +class FacadeRecipeWrapper implements IShapedCraftingRecipeWrapper { private final ItemStack textureItem; diff --git a/src/main/java/appeng/integration/modules/jei/GrinderRecipeCategory.java b/src/main/java/appeng/integration/modules/jei/GrinderRecipeCategory.java index 3f5b0f74..44db4d3e 100644 --- a/src/main/java/appeng/integration/modules/jei/GrinderRecipeCategory.java +++ b/src/main/java/appeng/integration/modules/jei/GrinderRecipeCategory.java @@ -19,6 +19,9 @@ package appeng.integration.modules.jei; +import mezz.jei.api.IJeiHelpers; +import mezz.jei.api.recipe.IRecipeCategory; +import mezz.jei.api.recipe.IRecipeCategoryRegistration; import net.minecraft.client.resources.I18n; import net.minecraft.util.ResourceLocation; @@ -27,12 +30,11 @@ import mezz.jei.api.gui.IDrawable; import mezz.jei.api.gui.IGuiItemStackGroup; import mezz.jei.api.gui.IRecipeLayout; import mezz.jei.api.ingredients.IIngredients; -import mezz.jei.api.recipe.BlankRecipeCategory; import appeng.core.AppEng; -class GrinderRecipeCategory extends BlankRecipeCategory +class GrinderRecipeCategory implements IRecipeCategory, IRecipeCategoryRegistration { public static final String UID = "appliedenergistics2.grinder"; @@ -85,4 +87,14 @@ class GrinderRecipeCategory extends BlankRecipeCategory itemStacks.set( ingredients ); } + + @Override public void addRecipeCategories( IRecipeCategory... recipeCategories ) + { + + } + + @Override public IJeiHelpers getJeiHelpers() + { + return null; + } } diff --git a/src/main/java/appeng/integration/modules/jei/GrinderRecipeHandler.java b/src/main/java/appeng/integration/modules/jei/GrinderRecipeHandler.java index 96c78301..b8733ea6 100644 --- a/src/main/java/appeng/integration/modules/jei/GrinderRecipeHandler.java +++ b/src/main/java/appeng/integration/modules/jei/GrinderRecipeHandler.java @@ -19,36 +19,16 @@ package appeng.integration.modules.jei; -import mezz.jei.api.recipe.IRecipeHandler; import mezz.jei.api.recipe.IRecipeWrapper; import appeng.api.features.IGrinderRecipe; +import mezz.jei.api.recipe.IRecipeWrapperFactory; -class GrinderRecipeHandler implements IRecipeHandler +class GrinderRecipeHandler implements IRecipeWrapperFactory { - - @Override - public Class getRecipeClass() - { - return IGrinderRecipe.class; - } - - @Override - public String getRecipeCategoryUid( IGrinderRecipe recipe ) - { - return GrinderRecipeCategory.UID; - } - - @Override public IRecipeWrapper getRecipeWrapper( IGrinderRecipe recipe ) { return new GrinderRecipeWrapper( recipe ); } - - @Override - public boolean isRecipeValid( IGrinderRecipe recipe ) - { - return true; - } } diff --git a/src/main/java/appeng/integration/modules/jei/GrinderRecipeWrapper.java b/src/main/java/appeng/integration/modules/jei/GrinderRecipeWrapper.java index dcef260b..9f827de7 100644 --- a/src/main/java/appeng/integration/modules/jei/GrinderRecipeWrapper.java +++ b/src/main/java/appeng/integration/modules/jei/GrinderRecipeWrapper.java @@ -23,18 +23,18 @@ import java.awt.Color; import java.util.ArrayList; import java.util.List; +import mezz.jei.api.recipe.IRecipeWrapper; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.item.ItemStack; import mezz.jei.api.ingredients.IIngredients; -import mezz.jei.api.recipe.BlankRecipeWrapper; import appeng.api.features.IGrinderRecipe; -class GrinderRecipeWrapper extends BlankRecipeWrapper +class GrinderRecipeWrapper implements IRecipeWrapper { private final IGrinderRecipe recipe; diff --git a/src/main/java/appeng/integration/modules/jei/InscriberRecipeCategory.java b/src/main/java/appeng/integration/modules/jei/InscriberRecipeCategory.java index 7b4607c8..274cc2bc 100644 --- a/src/main/java/appeng/integration/modules/jei/InscriberRecipeCategory.java +++ b/src/main/java/appeng/integration/modules/jei/InscriberRecipeCategory.java @@ -19,6 +19,8 @@ package appeng.integration.modules.jei; +import mezz.jei.api.recipe.IRecipeCategory; +import mezz.jei.api.recipe.IRecipeCategoryRegistration; import net.minecraft.client.Minecraft; import net.minecraft.client.resources.I18n; import net.minecraft.util.ResourceLocation; @@ -30,12 +32,11 @@ import mezz.jei.api.gui.IDrawableStatic; import mezz.jei.api.gui.IGuiItemStackGroup; import mezz.jei.api.gui.IRecipeLayout; import mezz.jei.api.ingredients.IIngredients; -import mezz.jei.api.recipe.BlankRecipeCategory; import appeng.core.AppEng; -class InscriberRecipeCategory extends BlankRecipeCategory +class InscriberRecipeCategory implements IRecipeCategory { private static final int SLOT_INPUT_TOP = 0; diff --git a/src/main/java/appeng/integration/modules/jei/InscriberRecipeHandler.java b/src/main/java/appeng/integration/modules/jei/InscriberRecipeHandler.java index 8d17de11..2c6e1566 100644 --- a/src/main/java/appeng/integration/modules/jei/InscriberRecipeHandler.java +++ b/src/main/java/appeng/integration/modules/jei/InscriberRecipeHandler.java @@ -19,37 +19,18 @@ package appeng.integration.modules.jei; -import mezz.jei.api.recipe.IRecipeHandler; import mezz.jei.api.recipe.IRecipeWrapper; import appeng.api.features.IInscriberRecipe; +import mezz.jei.api.recipe.IRecipeWrapperFactory; -class InscriberRecipeHandler implements IRecipeHandler +class InscriberRecipeHandler implements IRecipeWrapperFactory { - - @Override - public Class getRecipeClass() - { - return IInscriberRecipe.class; - } - - @Override - public String getRecipeCategoryUid( IInscriberRecipe recipe ) - { - return InscriberRecipeCategory.UID; - } - @Override public IRecipeWrapper getRecipeWrapper( IInscriberRecipe recipe ) { return new InscriberRecipeWrapper( recipe ); } - @Override - public boolean isRecipeValid( IInscriberRecipe recipe ) - { - return true; - } - } diff --git a/src/main/java/appeng/integration/modules/jei/InscriberRecipeWrapper.java b/src/main/java/appeng/integration/modules/jei/InscriberRecipeWrapper.java index 9d01c948..d380f5d4 100644 --- a/src/main/java/appeng/integration/modules/jei/InscriberRecipeWrapper.java +++ b/src/main/java/appeng/integration/modules/jei/InscriberRecipeWrapper.java @@ -23,15 +23,15 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import mezz.jei.api.recipe.IRecipeWrapper; import net.minecraft.item.ItemStack; import mezz.jei.api.ingredients.IIngredients; -import mezz.jei.api.recipe.BlankRecipeWrapper; import appeng.api.features.IInscriberRecipe; -class InscriberRecipeWrapper extends BlankRecipeWrapper +class InscriberRecipeWrapper implements IRecipeWrapper { private final IInscriberRecipe recipe; diff --git a/src/main/java/appeng/integration/modules/jei/JEIPlugin.java b/src/main/java/appeng/integration/modules/jei/JEIPlugin.java index db15d86e..ba461706 100644 --- a/src/main/java/appeng/integration/modules/jei/JEIPlugin.java +++ b/src/main/java/appeng/integration/modules/jei/JEIPlugin.java @@ -23,15 +23,19 @@ import java.util.ArrayList; import java.util.List; import java.util.Optional; +import appeng.api.features.IGrinderRecipe; +import appeng.recipes.game.ShapedRecipe; +import appeng.recipes.game.ShapelessRecipe; import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import mezz.jei.api.BlankModPlugin; import mezz.jei.api.IJeiRuntime; +import mezz.jei.api.IModPlugin; import mezz.jei.api.IModRegistry; +import mezz.jei.api.recipe.IRecipeCategoryRegistration; import mezz.jei.api.recipe.VanillaRecipeCategoryUid; import appeng.api.AEApi; @@ -50,13 +54,22 @@ import appeng.items.parts.ItemFacade; @mezz.jei.api.JEIPlugin -public class JEIPlugin extends BlankModPlugin +public class JEIPlugin implements IModPlugin { + @Override + public void registerCategories( IRecipeCategoryRegistration registry ) + { + registry.addRecipeCategories( new GrinderRecipeCategory( registry.getJeiHelpers().getGuiHelper() ) ); + registry.addRecipeCategories( new CondenserCategory( registry.getJeiHelpers().getGuiHelper() ) ); + registry.addRecipeCategories( new InscriberRecipeCategory( registry.getJeiHelpers().getGuiHelper() ) ); + } + @Override public void register( IModRegistry registry ) { - registry.addRecipeHandlers( new ShapedRecipeHandler(), new ShapelessRecipeHandler() ); + registry.handleRecipes( ShapedRecipe.class, new ShapedRecipeHandler(), VanillaRecipeCategoryUid.CRAFTING ); + registry.handleRecipes( ShapelessRecipe.class, new ShapelessRecipeHandler(), VanillaRecipeCategoryUid.CRAFTING ); IDefinitions definitions = AEApi.instance().definitions(); @@ -120,7 +133,7 @@ public class JEIPlugin extends BlankModPlugin private void addDescription( IModRegistry registry, IItemDefinition itemDefinition, String message ) { - itemDefinition.maybeStack( 1 ).ifPresent( itemStack -> registry.addDescription( itemStack, message ) ); + itemDefinition.maybeStack( 1 ).ifPresent( itemStack -> registry.addIngredientInfo( itemStack, ItemStack.class, message ) ); } private void registerGrinderRecipes( IDefinitions definitions, IModRegistry registry ) @@ -133,10 +146,9 @@ public class JEIPlugin extends BlankModPlugin return; } - registry.addRecipes( Lists.newArrayList( AEApi.instance().registries().grinder().getRecipes() ) ); - registry.addRecipeHandlers( new GrinderRecipeHandler() ); - registry.addRecipeCategories( new GrinderRecipeCategory( registry.getJeiHelpers().getGuiHelper() ) ); - registry.addRecipeCategoryCraftingItem( grindstone, GrinderRecipeCategory.UID ); + registry.handleRecipes( IGrinderRecipe.class, new GrinderRecipeHandler(), GrinderRecipeCategory.UID ); + registry.addRecipes( Lists.newArrayList( AEApi.instance().registries().grinder().getRecipes() ), GrinderRecipeCategory.UID ); + registry.addRecipeCatalyst( grindstone, GrinderRecipeCategory.UID ); } private void registerCondenserRecipes( IDefinitions definitions, IModRegistry registry ) @@ -151,38 +163,34 @@ public class JEIPlugin extends BlankModPlugin ItemStack matterBall = definitions.materials().matterBall().maybeStack( 1 ).orElse( ItemStack.EMPTY ); if( !matterBall.isEmpty() ) { - registry.addRecipes( ImmutableList.of( CondenserOutput.MATTER_BALLS ) ); + registry.addRecipes( ImmutableList.of( CondenserOutput.MATTER_BALLS ), CondenserCategory.UID ); } ItemStack singularity = definitions.materials().singularity().maybeStack( 1 ).orElse( ItemStack.EMPTY ); if( !singularity.isEmpty() ) { - registry.addRecipes( ImmutableList.of( CondenserOutput.SINGULARITY ) ); + registry.addRecipes( ImmutableList.of( CondenserOutput.SINGULARITY ), CondenserCategory.UID ); } if( !matterBall.isEmpty() || !singularity.isEmpty() ) { - registry.addRecipeCategories( new CondenserCategory( registry.getJeiHelpers().getGuiHelper() ) ); - registry.addRecipeCategoryCraftingItem( condenser, CondenserCategory.UID ); - registry.addRecipeHandlers( new CondenserOutputHandler( registry.getJeiHelpers().getGuiHelper(), matterBall, singularity ) ); + registry.addRecipeCatalyst( condenser, CondenserCategory.UID ); + registry.handleRecipes( CondenserOutput.class, new CondenserOutputHandler( registry.getJeiHelpers().getGuiHelper(), matterBall, singularity) , CondenserCategory.UID ); } } private void registerInscriberRecipes( IDefinitions definitions, IModRegistry registry ) { - - registry.addRecipeHandlers( new InscriberRecipeHandler() ); - - registry.addRecipeCategories( new InscriberRecipeCategory( registry.getJeiHelpers().getGuiHelper() ) ); + registry.handleRecipes( IInscriberRecipe.class, new InscriberRecipeHandler(), InscriberRecipeCategory.UID ); // Register the inscriber as the crafting item for the inscription category definitions.blocks().inscriber().maybeStack( 1 ).ifPresent( inscriber -> { - registry.addRecipeCategoryCraftingItem( inscriber, InscriberRecipeCategory.UID ); + registry.addRecipeCatalyst( inscriber, InscriberRecipeCategory.UID ); } ); List inscriberRecipes = new ArrayList<>( AEApi.instance().registries().inscriber().getRecipes() ); - registry.addRecipes( inscriberRecipes ); + registry.addRecipes( inscriberRecipes, InscriberRecipeCategory.UID ); } // Handle the generic crafting recipe for patterns in JEI diff --git a/src/main/java/appeng/integration/modules/jei/JeiRuntimeAdapter.java b/src/main/java/appeng/integration/modules/jei/JeiRuntimeAdapter.java index 5e67a42b..bf603697 100644 --- a/src/main/java/appeng/integration/modules/jei/JeiRuntimeAdapter.java +++ b/src/main/java/appeng/integration/modules/jei/JeiRuntimeAdapter.java @@ -45,12 +45,12 @@ class JeiRuntimeAdapter implements IJEI @Override public String getSearchText() { - return Strings.nullToEmpty( this.runtime.getItemListOverlay().getFilterText() ); + return Strings.nullToEmpty( this.runtime.getIngredientFilter().getFilterText() ); } @Override public void setSearchText( String searchText ) { - this.runtime.getItemListOverlay().setFilterText( Strings.nullToEmpty( searchText ) ); + this.runtime.getIngredientFilter().setFilterText( Strings.nullToEmpty( searchText ) ); } } diff --git a/src/main/java/appeng/integration/modules/jei/ShapedRecipeHandler.java b/src/main/java/appeng/integration/modules/jei/ShapedRecipeHandler.java index 4cd9ecf9..5b97b8cf 100644 --- a/src/main/java/appeng/integration/modules/jei/ShapedRecipeHandler.java +++ b/src/main/java/appeng/integration/modules/jei/ShapedRecipeHandler.java @@ -19,37 +19,17 @@ package appeng.integration.modules.jei; -import mezz.jei.api.recipe.IRecipeHandler; import mezz.jei.api.recipe.IRecipeWrapper; -import mezz.jei.api.recipe.VanillaRecipeCategoryUid; +import mezz.jei.api.recipe.IRecipeWrapperFactory; import appeng.recipes.game.ShapedRecipe; -class ShapedRecipeHandler implements IRecipeHandler +class ShapedRecipeHandler implements IRecipeWrapperFactory { - - @Override - public Class getRecipeClass() - { - return ShapedRecipe.class; - } - - @Override - public String getRecipeCategoryUid( ShapedRecipe recipe ) - { - return VanillaRecipeCategoryUid.CRAFTING; - } - @Override public IRecipeWrapper getRecipeWrapper( ShapedRecipe recipe ) { return new ShapedRecipeWrapper( recipe ); } - - @Override - public boolean isRecipeValid( ShapedRecipe recipe ) - { - return recipe.isEnabled(); - } } diff --git a/src/main/java/appeng/integration/modules/jei/ShapedRecipeWrapper.java b/src/main/java/appeng/integration/modules/jei/ShapedRecipeWrapper.java index 603f1766..543113a4 100644 --- a/src/main/java/appeng/integration/modules/jei/ShapedRecipeWrapper.java +++ b/src/main/java/appeng/integration/modules/jei/ShapedRecipeWrapper.java @@ -26,7 +26,6 @@ import java.util.List; import net.minecraft.item.ItemStack; import mezz.jei.api.ingredients.IIngredients; -import mezz.jei.api.recipe.BlankRecipeWrapper; import mezz.jei.api.recipe.wrapper.IShapedCraftingRecipeWrapper; import scala.actors.threadpool.Arrays; @@ -38,7 +37,7 @@ import appeng.recipes.game.ShapedRecipe; import appeng.util.Platform; -class ShapedRecipeWrapper extends BlankRecipeWrapper implements IShapedCraftingRecipeWrapper +class ShapedRecipeWrapper implements IShapedCraftingRecipeWrapper { private final ShapedRecipe recipe; diff --git a/src/main/java/appeng/integration/modules/jei/ShapelessRecipeHandler.java b/src/main/java/appeng/integration/modules/jei/ShapelessRecipeHandler.java index 99e383a3..e6f03efc 100644 --- a/src/main/java/appeng/integration/modules/jei/ShapelessRecipeHandler.java +++ b/src/main/java/appeng/integration/modules/jei/ShapelessRecipeHandler.java @@ -19,37 +19,17 @@ package appeng.integration.modules.jei; -import mezz.jei.api.recipe.IRecipeHandler; import mezz.jei.api.recipe.IRecipeWrapper; -import mezz.jei.api.recipe.VanillaRecipeCategoryUid; +import mezz.jei.api.recipe.IRecipeWrapperFactory; import appeng.recipes.game.ShapelessRecipe; -class ShapelessRecipeHandler implements IRecipeHandler +class ShapelessRecipeHandler implements IRecipeWrapperFactory { - - @Override - public Class getRecipeClass() - { - return ShapelessRecipe.class; - } - - @Override - public String getRecipeCategoryUid( ShapelessRecipe recipe ) - { - return VanillaRecipeCategoryUid.CRAFTING; - } - @Override public IRecipeWrapper getRecipeWrapper( ShapelessRecipe recipe ) { return new ShapelessRecipeWrapper( recipe ); } - - @Override - public boolean isRecipeValid( ShapelessRecipe recipe ) - { - return recipe.isEnabled(); - } } diff --git a/src/main/java/appeng/integration/modules/jei/ShapelessRecipeWrapper.java b/src/main/java/appeng/integration/modules/jei/ShapelessRecipeWrapper.java index b3417469..88e16520 100644 --- a/src/main/java/appeng/integration/modules/jei/ShapelessRecipeWrapper.java +++ b/src/main/java/appeng/integration/modules/jei/ShapelessRecipeWrapper.java @@ -24,11 +24,10 @@ import java.util.List; import com.google.common.collect.Lists; +import mezz.jei.api.recipe.IRecipeWrapper; import net.minecraft.item.ItemStack; import mezz.jei.api.ingredients.IIngredients; -import mezz.jei.api.recipe.BlankRecipeWrapper; -import mezz.jei.api.recipe.wrapper.ICraftingRecipeWrapper; import appeng.api.exceptions.MissingIngredientError; import appeng.api.exceptions.RegistrationError; @@ -36,7 +35,7 @@ import appeng.api.recipes.IIngredient; import appeng.recipes.game.ShapelessRecipe; -class ShapelessRecipeWrapper extends BlankRecipeWrapper implements ICraftingRecipeWrapper +class ShapelessRecipeWrapper implements IRecipeWrapper { private final ShapelessRecipe recipe;