diff --git a/src/dark/core/common/CoreRecipeLoader.java b/src/dark/core/common/CoreRecipeLoader.java index 42ef0924..9898b6ee 100644 --- a/src/dark/core/common/CoreRecipeLoader.java +++ b/src/dark/core/common/CoreRecipeLoader.java @@ -5,7 +5,7 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemTool; import net.minecraft.item.crafting.FurnaceRecipes; -import net.minecraftforge.oredict.OreDictionary; +import net.minecraftforge.oredict.ShapedOreRecipe; import cpw.mods.fml.common.registry.GameRegistry; import dark.api.ColorCode; import dark.api.ProcessorRecipes; @@ -16,6 +16,7 @@ import dark.core.common.blocks.BlockOre.OreData; import dark.core.common.items.EnumMaterial; import dark.core.common.items.EnumOrePart; import dark.core.common.items.EnumTool; +import dark.core.common.items.ItemCommonTool; import dark.core.common.items.ItemOreDirv; import dark.core.common.items.ItemParts; import dark.core.common.items.ItemParts.Parts; @@ -43,6 +44,7 @@ public class CoreRecipeLoader extends RecipeLoader public static ItemStack unfinishedTank; public static Item itemGlowingSand; public static Item itemDiggingTool; + public static boolean debugOreItems = true; @Override public void loadRecipes() @@ -64,6 +66,19 @@ public class CoreRecipeLoader extends RecipeLoader { new RecipeGrid(new ItemStack(blockWire, 1, 0), 3, 3).setRowOne(Block.cloth, Block.cloth, Block.cloth).setRowTwo(copper, copper, copper).setRowThree(Block.cloth, Block.cloth, Block.cloth).RegisterRecipe(); } + if (itemDiggingTool instanceof ItemCommonTool) + { + for (EnumMaterial mat : EnumMaterial.values()) + { + if (mat.shouldCreateTool()) + { + new RecipeGrid(mat.getTool(EnumTool.PICKAX)).setRowOne(mat.getStack(EnumOrePart.INGOTS, 1), mat.getStack(EnumOrePart.INGOTS, 1), mat.getStack(EnumOrePart.INGOTS, 1)).setRowTwo(null, Item.stick, null).setRowThree(null, Item.stick, null).RegisterRecipe(); + new RecipeGrid(mat.getTool(EnumTool.AX)).setRowOne(mat.getStack(EnumOrePart.INGOTS, 1), mat.getStack(EnumOrePart.INGOTS, 1), null).setRowTwo(mat.getStack(EnumOrePart.INGOTS, 1), Item.stick, null).setRowThree(null, Item.stick, null).RegisterRecipe(); + new RecipeGrid(mat.getTool(EnumTool.HOE)).setRowOne(mat.getStack(EnumOrePart.INGOTS, 1), mat.getStack(EnumOrePart.INGOTS, 1), null).setRowTwo(null, Item.stick, null).setRowThree(null, Item.stick, null).RegisterRecipe(); + new RecipeGrid(mat.getTool(EnumTool.SPADE)).setRowOne(null, mat.getStack(EnumOrePart.INGOTS, 1), null).setRowTwo(null, Item.stick, null).setRowThree(null, Item.stick, null).RegisterRecipe(); + } + } + } this.loadParts(); } @@ -77,7 +92,7 @@ public class CoreRecipeLoader extends RecipeLoader unfinishedTank = new ItemStack(itemParts, 1, Parts.Tank.ordinal()); // seal - new RecipeGrid(this.setStackSize(leatherSeal, 16), 2, 2).setRowOne(Item.leather, Item.leather).setRowTwo(Item.leather, Item.leather).RegisterRecipe(); + GameRegistry.addRecipe(new ShapedOreRecipe(this.setStackSize(leatherSeal, 16), new Object[] { "LL","LL", 'L', Item.leather })); // slime steal new RecipeGrid(this.setStackSize(slimeSeal, 4)).setRowOne(null, leatherSeal, null).setRowTwo(leatherSeal, Item.slimeBall, leatherSeal).setRowThree(null, leatherSeal, null).RegisterRecipe(); // part valve @@ -117,16 +132,25 @@ public class CoreRecipeLoader extends RecipeLoader GameRegistry.addShapelessRecipe(EnumMaterial.getStack(EnumMaterial.STEEL, EnumOrePart.DUST, 1), new Object[] { EnumMaterial.getStack(EnumMaterial.IRON, EnumOrePart.DUST, 1), new ItemStack(Item.coal, 1, 1), new ItemStack(Item.coal, 1, 0) }); GameRegistry.addShapelessRecipe(EnumMaterial.getStack(EnumMaterial.BRONZE, EnumOrePart.DUST, 4), new Object[] { EnumMaterial.getStack(EnumMaterial.COPPER, EnumOrePart.DUST, 1), EnumMaterial.getStack(EnumMaterial.COPPER, EnumOrePart.DUST, 1), EnumMaterial.getStack(EnumMaterial.COPPER, EnumOrePart.DUST, 1), EnumMaterial.getStack(EnumMaterial.TIN, EnumOrePart.DUST, 1) }); + if (debugOreItems) + { + System.out.println("\n\nTesting material part returns"); + for (EnumMaterial mat : EnumMaterial.values()) + { + System.out.println("\n-Material-> " + mat.simpleName); + for (EnumOrePart part : EnumOrePart.values()) + { + if (mat.shouldCreateItem(part)) + { + System.out.println("--Part-> " + part.simpleName); + System.out.println("----ItemStack-> " + mat.getStack(part, 1).toString()); + } + } + } + } //Ore material recipe loop for (EnumMaterial mat : EnumMaterial.values()) { - if (mat.shouldCreateTool()) - { - new RecipeGrid(mat.getTool(EnumTool.PICKAX)).setRowOne(mat.getStack(EnumOrePart.INGOTS, 1), mat.getStack(EnumOrePart.INGOTS, 1), mat.getStack(EnumOrePart.INGOTS, 1)).setRowTwo(null, Item.stick, null).setRowThree(null, Item.stick, null).RegisterRecipe(); - new RecipeGrid(mat.getTool(EnumTool.AX)).setRowOne(mat.getStack(EnumOrePart.INGOTS, 1), mat.getStack(EnumOrePart.INGOTS, 1), null).setRowTwo(mat.getStack(EnumOrePart.INGOTS, 1), Item.stick, null).setRowThree(null, Item.stick, null).RegisterRecipe(); - new RecipeGrid(mat.getTool(EnumTool.HOE)).setRowOne(mat.getStack(EnumOrePart.INGOTS, 1), mat.getStack(EnumOrePart.INGOTS, 1), null).setRowTwo(null, Item.stick, null).setRowThree(null, Item.stick, null).RegisterRecipe(); - new RecipeGrid(mat.getTool(EnumTool.SPADE)).setRowOne(null, mat.getStack(EnumOrePart.INGOTS, 1), null).setRowTwo(null, Item.stick, null).setRowThree(null, Item.stick, null).RegisterRecipe(); - } //Dust recipes if (mat.shouldCreateItem(EnumOrePart.DUST)) { @@ -155,17 +179,20 @@ public class CoreRecipeLoader extends RecipeLoader } if (mat.shouldCreateItem(EnumOrePart.TUBE)) { - new RecipeGrid(mat.getStack(EnumOrePart.TUBE, 1), 3, 1).setRowOne(mat.getStack(EnumOrePart.INGOTS, 1), mat.getStack(EnumOrePart.INGOTS, 1), mat.getStack(EnumOrePart.INGOTS, 1)).RegisterRecipe(); - new RecipeGrid(mat.getStack(EnumOrePart.TUBE, 1), 1, 1).setRowOne(mat.getStack(EnumOrePart.ROD, 1)).RegisterRecipe(); - + GameRegistry.addRecipe(new ShapedOreRecipe(mat.getStack(EnumOrePart.TUBE, 6), new Object[] { "III", 'I', mat.simpleName + "ingot" })); + GameRegistry.addRecipe(new ShapedOreRecipe(mat.getStack(EnumOrePart.TUBE, 6), new Object[] { "III", 'I', "ingot" + mat.simpleName })); + GameRegistry.addRecipe(new ShapedOreRecipe(mat.getStack(EnumOrePart.TUBE, 1), new Object[] { "I", 'I', "rod" + mat.simpleName })); + GameRegistry.addRecipe(new ShapedOreRecipe(mat.getStack(EnumOrePart.TUBE, 1), new Object[] { "I", 'I', mat.simpleName + "rod" })); } if (mat.shouldCreateItem(EnumOrePart.ROD)) { - new RecipeGrid(mat.getStack(EnumOrePart.ROD, 1), 2, 1).setRowOne(mat.getStack(EnumOrePart.INGOTS, 1), mat.getStack(EnumOrePart.INGOTS, 1)).RegisterRecipe(); + GameRegistry.addRecipe(new ShapedOreRecipe(mat.getStack(EnumOrePart.ROD, 4), new Object[] { "II", 'I', mat.simpleName + "rod" })); + GameRegistry.addRecipe(new ShapedOreRecipe(mat.getStack(EnumOrePart.ROD, 4), new Object[] { "II", 'I', "rod" + mat.simpleName })); } if (mat.shouldCreateItem(EnumOrePart.PLATES)) { - new RecipeGrid(mat.getStack(EnumOrePart.PLATES, 1), 2, 2).setRowOne(mat.getStack(EnumOrePart.INGOTS, 1), mat.getStack(EnumOrePart.INGOTS, 1)).setRowTwo(mat.getStack(EnumOrePart.INGOTS, 1), mat.getStack(EnumOrePart.INGOTS, 1)).RegisterRecipe(); + GameRegistry.addRecipe(new ShapedOreRecipe(mat.getStack(EnumOrePart.PLATES, 1), new Object[] { "II", "II", 'I', mat.simpleName + "ingot" })); + GameRegistry.addRecipe(new ShapedOreRecipe(mat.getStack(EnumOrePart.PLATES, 1), new Object[] { "II", "II", 'I', "ingot" + mat.simpleName })); } if (mat.shouldCreateItem(EnumOrePart.GEARS)) { diff --git a/src/dark/core/common/DarkMain.java b/src/dark/core/common/DarkMain.java index 120e02ea..40b6246e 100644 --- a/src/dark/core/common/DarkMain.java +++ b/src/dark/core/common/DarkMain.java @@ -142,66 +142,50 @@ public class DarkMain extends ModPrefab } } } - if (CoreRecipeLoader.blockWire instanceof BlockWire) - { - OreDictionary.registerOre("copperwire", new ItemStack(CoreRecipeLoader.blockWire, 1, 0)); - OreDictionary.registerOre("wirecopper", new ItemStack(CoreRecipeLoader.blockWire, 1, 0)); - } if (CoreRecipeLoader.itemMetals instanceof ItemOreDirv) { //Ore material recipe loop for (EnumMaterial mat : EnumMaterial.values()) { - ItemStack dust = EnumMaterial.getStack(mat, EnumOrePart.DUST, 1); - ItemStack ingot = EnumMaterial.getStack(mat, EnumOrePart.INGOTS, 1); - ItemStack scraps = EnumMaterial.getStack(mat, EnumOrePart.SCRAPS, 1); - ItemStack plates = EnumMaterial.getStack(mat, EnumOrePart.PLATES, 1); - ItemStack rubble = EnumMaterial.getStack(mat, EnumOrePart.RUBBLE, 1); - ItemStack rod = EnumMaterial.getStack(mat, EnumOrePart.ROD, 1); - ItemStack tube = EnumMaterial.getStack(mat, EnumOrePart.TUBE, 1); if (mat.shouldCreateItem(EnumOrePart.INGOTS)) { - OreDictionary.registerOre(mat.simpleName + "ingot", ingot); - OreDictionary.registerOre("ingot" + mat.simpleName, ingot); + OreDictionary.registerOre(mat.simpleName + "ingot", mat.getStack(EnumOrePart.INGOTS, 1)); + OreDictionary.registerOre("ingot" + mat.simpleName, mat.getStack(EnumOrePart.INGOTS, 1)); } if (mat.shouldCreateItem(EnumOrePart.RUBBLE)) { - OreDictionary.registerOre(mat.simpleName + "rubble", rubble); - OreDictionary.registerOre("rubble" + mat.simpleName, rubble); + OreDictionary.registerOre(mat.simpleName + "rubble", mat.getStack(EnumOrePart.RUBBLE, 1)); + OreDictionary.registerOre("rubble" + mat.simpleName, mat.getStack(EnumOrePart.RUBBLE, 1)); } //Dust recipes if (mat.shouldCreateItem(EnumOrePart.DUST)) { - OreDictionary.registerOre(mat.simpleName + "dust", dust); - OreDictionary.registerOre("dust" + mat.simpleName, dust); + OreDictionary.registerOre(mat.simpleName + "dust", mat.getStack(EnumOrePart.DUST, 1)); + OreDictionary.registerOre("dust" + mat.simpleName, mat.getStack(EnumOrePart.DUST, 1)); } - // Salvaging recipe - if (mat.shouldCreateItem(EnumOrePart.SCRAPS)) { - OreDictionary.registerOre(mat.simpleName + "scraps", scraps); - OreDictionary.registerOre("scraps" + mat.simpleName, scraps); + OreDictionary.registerOre(mat.simpleName + "scraps", mat.getStack(EnumOrePart.SCRAPS, 1)); + OreDictionary.registerOre("scraps" + mat.simpleName, mat.getStack(EnumOrePart.SCRAPS, 1)); } - - ingot.stackSize = 1; if (mat.shouldCreateItem(EnumOrePart.TUBE)) { - OreDictionary.registerOre(mat.simpleName + "tube", tube); - OreDictionary.registerOre("tube" + mat.simpleName, tube); + OreDictionary.registerOre(mat.simpleName + "tube", mat.getStack(EnumOrePart.TUBE, 1)); + OreDictionary.registerOre("tube" + mat.simpleName, mat.getStack(EnumOrePart.TUBE, 1)); } if (mat.shouldCreateItem(EnumOrePart.ROD)) { - OreDictionary.registerOre(mat.simpleName + "rod", rod); - OreDictionary.registerOre("rod" + mat.simpleName, rod); + OreDictionary.registerOre(mat.simpleName + "rod", mat.getStack(EnumOrePart.ROD, 1)); + OreDictionary.registerOre("rod" + mat.simpleName, mat.getStack(EnumOrePart.ROD, 1)); } if (mat.shouldCreateItem(EnumOrePart.PLATES)) { - OreDictionary.registerOre(mat.simpleName + "plate", plates); - OreDictionary.registerOre("plate" + mat.simpleName, plates); + OreDictionary.registerOre(mat.simpleName + "plate", mat.getStack(EnumOrePart.PLATES, 1)); + OreDictionary.registerOre("plate" + mat.simpleName, mat.getStack(EnumOrePart.PLATES, 1)); } if (mat.shouldCreateItem(EnumOrePart.GEARS)) { diff --git a/src/dark/core/common/RecipeLoader.java b/src/dark/core/common/RecipeLoader.java index 93e28035..9ef364c1 100644 --- a/src/dark/core/common/RecipeLoader.java +++ b/src/dark/core/common/RecipeLoader.java @@ -10,9 +10,10 @@ import com.builtbroken.common.Pair; import com.builtbroken.common.Triple; import cpw.mods.fml.common.registry.GameRegistry; +import dark.core.prefab.helpers.AutoCraftingManager; /** Recipe system to make it easier to load recipes for a mod - * + * * @author DarkGuardsman */ public abstract class RecipeLoader { @@ -97,19 +98,20 @@ public abstract class RecipeLoader } /** An easier to read recipe system for the basic minecraft recipes - * + * * @author DarkGaurdsman */ + @Deprecated public static class RecipeGrid { - Object[] rl = new Object[9]; - Object out; + Object[] items = new Object[9]; + Object output; int width = 3; int hight = 3; /** @param stack - output item */ public RecipeGrid(Object stack) { - out = stack; + output = stack; } /** @param stack - output item @@ -123,7 +125,7 @@ public abstract class RecipeLoader /** 3x3 Crafting grid. Each Triple is a row. Input for the triples should be any of { Item, * Block, ItemStack, String} - * + * * @param one - top row * @param two - middle row * @param three - bottom row */ @@ -137,7 +139,7 @@ public abstract class RecipeLoader /** 2x2 Crafting grid. Each Pair is a row. Input for the pairs should be any of { Item, * Block, ItemStack, String} - * + * * @param one - top row * @param two - middle row */ public RecipeGrid(Object stack, Pair one, Pair two) @@ -160,7 +162,7 @@ public abstract class RecipeLoader /** Sets the grid recipe output */ public RecipeGrid setOutput(Object stack) { - out = stack; + output = stack; return this; } @@ -168,14 +170,14 @@ public abstract class RecipeLoader { if (objects != null) { - this.rl[0] = objects[0]; + this.items[0] = objects[0]; if (objects.length > 1) { - this.rl[1] = objects[1]; + this.items[1] = objects[1]; } if (objects.length > 2) { - this.rl[2] = objects[2]; + this.items[2] = objects[2]; } } return this; @@ -185,14 +187,14 @@ public abstract class RecipeLoader { if (objects != null) { - this.rl[3] = objects[0]; + this.items[3] = objects[0]; if (objects.length > 1) { - this.rl[4] = objects[1]; + this.items[4] = objects[1]; } if (objects.length > 2) { - this.rl[5] = objects[2]; + this.items[5] = objects[2]; } } return this; @@ -202,14 +204,14 @@ public abstract class RecipeLoader { if (objects != null) { - this.rl[6] = objects[0]; + this.items[6] = objects[0]; if (objects.length > 1) { - this.rl[7] = objects[1]; + this.items[7] = objects[1]; } if (objects.length > 2) { - this.rl[8] = objects[2]; + this.items[8] = objects[2]; } } return this; @@ -226,90 +228,105 @@ public abstract class RecipeLoader public void RegisterRecipe() { - ShapedOreRecipe receipe = this.getShapedRecipe(); - if (receipe != null) - { - GameRegistry.addRecipe(receipe); - } - } - - public ShapedOreRecipe getShapedRecipe() - { - //TODO convert items to their ore names - ShapedOreRecipe re = null; + ShapedOreRecipe shapedOreRecipe = null; Object[] recipe = null; - String[] r = { "A", "B", "C", "D", "E", "F", "G", "H", "I" }; + String[] slots = { "A", "B", "C", "D", "E", "F", "G", "H", "I" }; - for (int i = 0; i < r.length; i++) + for (int i = 0; i < slots.length; i++) { - if (this.rl[i] == null || this.rl[i] instanceof String && ((String) this.rl[i]).isEmpty()) + if (this.items[i] == null || this.items[i] instanceof String && ((String) this.items[i]).isEmpty()) { - r[i] = " "; - this.rl[i] = ""; - } - else if (this.rl[i] instanceof ItemStack) + slots[i] = " "; + this.items[i] = ""; + }//TODO include normal items and blocks + else if (this.items[i] instanceof ItemStack) { //Automatically converts an itemstack to its orename so that recipes are more mod compatible - String s = OreDictionary.getOreName(OreDictionary.getOreID((ItemStack) this.rl[i])); - if (s != null) + String s = OreDictionary.getOreName(OreDictionary.getOreID((ItemStack) this.items[i])); + if (s != null && !s.equals("Unknown")) { - this.rl[i] = s; + this.items[i] = s; } } } if (width == 3 && hight == 3) { - recipe = new Object[] { r[0] + r[1] + r[2], r[3] + r[4] + r[5], r[6] + r[7] + r[8], 'A', rl[0], 'B', rl[1], 'C', rl[2], 'D', rl[3], 'E', rl[4], 'F', rl[5], 'G', rl[6], 'H', rl[7], 'I', rl[8] }; + recipe = new Object[] { slots[0] + slots[1] + slots[2], slots[3] + slots[4] + slots[5], slots[6] + slots[7] + slots[8], 'A', items[0], 'B', items[1], 'C', items[2], 'D', items[3], 'E', items[4], 'F', items[5], 'G', items[6], 'H', items[7], 'I', items[8] }; } else if (width == 2 && hight == 3) { - recipe = new Object[] { r[0] + r[1], r[3] + r[4], r[6] + r[7], 'A', rl[0], 'B', rl[1], 'D', rl[3], 'E', rl[4], 'G', rl[6], 'H', rl[7] }; + recipe = new Object[] { slots[0] + slots[1], slots[3] + slots[4], slots[6] + slots[7], 'A', items[0], 'B', items[1], 'D', items[3], 'E', items[4], 'G', items[6], 'H', items[7] }; } else if (width == 3 && hight == 2) { - recipe = new Object[] { r[0] + r[1] + r[2], r[3] + r[4] + r[5], 'A', rl[0], 'B', rl[1], 'C', rl[2], 'D', rl[3], 'E', rl[4], 'F', rl[5] }; + recipe = new Object[] { slots[0] + slots[1] + slots[2], slots[3] + slots[4] + slots[5], 'A', items[0], 'B', items[1], 'C', items[2], 'D', items[3], 'E', items[4], 'F', items[5] }; } else if (width == 1 && hight == 3) { - recipe = new Object[] { r[0], r[3], r[6], 'A', rl[0], 'D', rl[3], 'G', rl[6] }; + recipe = new Object[] { slots[0], slots[3], slots[6], 'A', items[0], 'D', items[3], 'G', items[6] }; } else if (width == 3 && hight == 1) { - recipe = new Object[] { r[0] + r[1] + r[2], 'A', rl[0], 'B', rl[1], 'C', rl[2] }; + recipe = new Object[] { slots[0] + slots[1] + slots[2], 'A', items[0], 'B', items[1], 'C', items[2] }; } else if (width == 2 && hight == 2) { - recipe = new Object[] { r[0] + r[1], r[3] + r[4], 'A', rl[0], 'B', rl[1], 'D', rl[2], 'E', rl[4] }; + recipe = new Object[] { slots[0] + slots[1], slots[3] + slots[4], 'A', items[0], 'B', items[1], 'D', items[2], 'E', items[4] }; } else if (width == 1 && hight == 2) { - recipe = new Object[] { r[0], r[3], 'A', rl[0], 'D', rl[3], }; + recipe = new Object[] { slots[0], slots[3], 'A', items[0], 'D', items[3], }; } else if (width == 2 && hight == 1) { - recipe = new Object[] { r[0] + r[1], 'A', rl[0], 'B', rl[1], }; + recipe = new Object[] { slots[0] + slots[1], 'A', items[0], 'B', items[1], }; } else if (width == 1 && hight == 1) { - recipe = new Object[] { r[0], 'A', rl[0] }; + recipe = new Object[] { slots[0], 'A', items[0] }; + } + else + { + System.out.println("Recipe was created with an out of bounds size"); + System.out.println(this.toString()); } if (recipe != null) { - if (out instanceof Block) + if (output instanceof Block) { - re = new ShapedOreRecipe(((Block) out), recipe); + shapedOreRecipe = new ShapedOreRecipe(((Block) output), recipe); } - else if (out instanceof Item) + else if (output instanceof Item) { - re = new ShapedOreRecipe(((Item) out), recipe); + shapedOreRecipe = new ShapedOreRecipe(((Item) output), recipe); } - else if (out instanceof ItemStack) + else if (output instanceof ItemStack) { - re = new ShapedOreRecipe(((ItemStack) out), recipe); + shapedOreRecipe = new ShapedOreRecipe(((ItemStack) output), recipe); + } + else + { + System.out.println("Recipe was created with a null output"); + System.out.println(this.toString()); } } - return re; + if (CoreRecipeLoader.debugOreItems) + { + System.out.println("\nRecipe created"); + System.out.println(this.toString()); + AutoCraftingManager.printRecipes(shapedOreRecipe.getRecipeOutput()); + } + if (shapedOreRecipe != null) + { + GameRegistry.addRecipe(shapedOreRecipe); + } + } + + @Override + public String toString() + { + return "RecipeGrid[Out: " + (output != null ? output.toString() : "null") + "\n In: " + " " + items[0] + "| " + items[1] + "| " + items[2] + "\n " + items[3] + "| " + items[4] + "| " + items[5] + "\n " + items[6] + "| " + items[7] + "| " + items[8]; } } } diff --git a/src/dark/core/prefab/helpers/AutoCraftingManager.java b/src/dark/core/prefab/helpers/AutoCraftingManager.java index 1badf80b..92bd6b9c 100644 --- a/src/dark/core/prefab/helpers/AutoCraftingManager.java +++ b/src/dark/core/prefab/helpers/AutoCraftingManager.java @@ -23,7 +23,7 @@ import com.builtbroken.common.Pair; import cpw.mods.fml.relauncher.ReflectionHelper; /** Rewrite of the imprinter crafting system into its own manageable class - * + * * @author DarkGuardsman */ public class AutoCraftingManager { @@ -59,8 +59,75 @@ public class AutoCraftingManager } } + public static void printRecipe(Object[] objects) + { + //TODO format and make it look nice + for (Object obj : objects) + { + System.out.println(obj); + } + } + + @SuppressWarnings("unchecked") + public static void printRecipes(ItemStack stack) + { + List recipes = getRecipes(stack); + for (IRecipe recipe : recipes) + { + if (recipe.getRecipeOutput() != null) + { + if (AutoCraftingManager.areStacksEqual(recipe.getRecipeOutput(), stack)) + { + if (recipe instanceof ShapedRecipes) + { + printRecipe(((ShapedRecipes) recipe).recipeItems); + } + else if (recipe instanceof ShapelessRecipes) + { + printRecipe(((ShapelessRecipes) recipe).recipeItems.toArray(new Object[1])); + } + else if (recipe instanceof ShapedOreRecipe) + { + ShapedOreRecipe oreRecipe = (ShapedOreRecipe) recipe; + printRecipe((Object[]) ReflectionHelper.getPrivateValue(ShapedOreRecipe.class, oreRecipe, "input")); + + } + else if (recipe instanceof ShapelessOreRecipe) + { + ShapelessOreRecipe oreRecipe = (ShapelessOreRecipe) recipe; + ArrayList oreRecipeInput = (ArrayList) ReflectionHelper.getPrivateValue(ShapelessOreRecipe.class, oreRecipe, "input"); + for(Object obj : oreRecipeInput) + { + System.out.println(obj); + } + } + } + } + } + } + + /** Grabs a list of recipes that can be used to create the given item */ + public static List getRecipes(ItemStack stack) + { + List recipes = new ArrayList(); + for (Object object : CraftingManager.getInstance().getRecipeList()) + { + if (object instanceof IRecipe) + { + if (((IRecipe) object).getRecipeOutput() != null) + { + if (AutoCraftingManager.areStacksEqual(stack, ((IRecipe) object).getRecipeOutput())) + { + recipes.add((IRecipe) object); + } + } + } + } + return recipes; + } + /** Does this player's inventory contain the required resources to craft this item? - * + * * @return Required items to make the desired item. */ public Pair getIdealRecipe(ItemStack outputItem) { @@ -194,7 +261,7 @@ public class AutoCraftingManager } /** Gets the itemStacks in the inv based on slots - * + * * @param inv - @IInventory instance * @param slots - slot # to be used * @return array of itemStack the same size as the slots input array */ @@ -214,7 +281,7 @@ public class AutoCraftingManager } /** Returns if the following inventory has the following resource required. - * + * * @param recipeItems - The items to be checked for the recipes. */ public ArrayList hasResource(Object[] recipeItems) { @@ -302,7 +369,7 @@ public class AutoCraftingManager } /** Decreases the stack by a set amount - * + * * @param stack - starting stack * @param amount - amount of items * @return the edited stack */ @@ -333,7 +400,7 @@ public class AutoCraftingManager } /** Checks if an item exist within the inv array - * + * * @param recipeItem - itemstack being searched for * @param containingItems - inv array containing the search bounds * @return the point in the array the item was found -1 = the item was null or not valid -2 = @@ -365,14 +432,14 @@ public class AutoCraftingManager /** Checks if itemstack are equal based on crafting result rather than normal itemstack this is * done so that if the itemstack returns with - * + * * @param recipeItem - itemstack being compared * @param checkStack - itemstack being comparted * @return true if the items are a match for each other - * + * * If the item can't be stack and is able to take damage the item will be check on damaged * status - * + * * If the item's meta data is not normal or in other words equals 32767 the meta data will be * ignored */ public static boolean areStacksEqual(ItemStack recipeItem, ItemStack checkStack) @@ -393,7 +460,7 @@ public class AutoCraftingManager } /** Consumes an item checking for extra conditions like container items - * + * * @param stack - starting itemStack * @param ammount - amount to consume * @return what is left of the itemStack if any */ @@ -438,7 +505,7 @@ public class AutoCraftingManager } /** Used to automatically remove selected items from crafting inv - * + * * @param requiredItems - items that are to be removed */ public void consumeItems(ItemStack... requiredItems) {