Posted August 30, 201510 yr I'm trying to make an IRecipe that determines the output item from NBT saved to the input item. I'd really like to know what I'm doing wrong and how to fix it. public class Destack implements IRecipe { private final ItemStack recipeOutput; private final ItemStack recipeInput; public Destack () { ItemStack outStack = new ItemStack(DenseCraft.stackOf); outStack.stackTagCompound = new NBTTagCompound(); ItemStack inStack = new ItemStack(DenseCraft.stackOf); inStack.stackTagCompound = new NBTTagCompound(); this.recipeInput = inStack; if (inStack.stackTagCompound .getInteger("iterations") > 1) { outStack.stackTagCompound.setInteger("iterations", inStack.stackTagCompound.getInteger("iterations")-1); outStack.stackTagCompound.setInteger("itemid", inStack.stackTagCompound.getInteger("itemid")); outStack.stackTagCompound.setString("itemtype", inStack.stackTagCompound.getString("itemtype")); this.recipeOutput = outStack; } else if (inStack.stackTagCompound.getInteger("iterations") == 1) { this.recipeOutput = new ItemStack( Item.getItemById(inStack.stackTagCompound.getInteger("itemid")), new ItemStack(Item.getItemById(inStack.stackTagCompound.getInteger("itemid"))).getMaxStackSize() ); } else { this.recipeOutput = this.recipeInput; } } @Override public boolean matches(InventoryCrafting crafting, World world) { int numberOfItemsInGrid = 0; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { ItemStack item = crafting.getStackInRowAndColumn(i, j); if (item != null) { numberOfItemsInGrid++; } } } if (numberOfItemsInGrid == 1) { for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { ItemStack item = crafting.getStackInRowAndColumn(i, j); if (item != null) { return (item == this.recipeInput); } } } } return false; } @Override public ItemStack getCraftingResult(InventoryCrafting crafting) { return this.recipeOutput.copy(); } @Override public int getRecipeSize() { return 1; } @Override public ItemStack getRecipeOutput() { return this.recipeOutput; } }
August 30, 201510 yr Author I moved everything down to getRecipeOutput, but it's still not working. Any ideas? public class Destack implements IRecipe { public final ItemStack recipeInput; public Destack () { ItemStack inStack = new ItemStack(DenseCraft.stackOf); inStack.stackTagCompound = new NBTTagCompound(); this.recipeInput = inStack; } @Override public boolean matches(InventoryCrafting crafting, World world) { int numberOfItemsInGrid = 0; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { ItemStack item = crafting.getStackInRowAndColumn(i, j); if (item != null) { numberOfItemsInGrid++; } } } if (numberOfItemsInGrid == 1) { for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { ItemStack item = crafting.getStackInRowAndColumn(i, j); if (item != null) { return (item == recipeInput); } } } } return false; } @Override public ItemStack getCraftingResult(InventoryCrafting crafting) { return getRecipeOutput().copy(); } @Override public int getRecipeSize() { return 1; } @Override public ItemStack getRecipeOutput() { ItemStack inStack = this.recipeInput; ItemStack outStack = new ItemStack(DenseCraft.stackOf); outStack.stackTagCompound = new NBTTagCompound(); if (inStack.stackTagCompound.getInteger("iterations") > 1) { outStack.stackTagCompound.setInteger("iterations", inStack.stackTagCompound.getInteger("iterations")-1); outStack.stackTagCompound.setInteger("itemid", inStack.stackTagCompound.getInteger("itemid")); return outStack; } else if (inStack.stackTagCompound.getInteger("iterations") == 1) { return new ItemStack( Item.getItemById(inStack.stackTagCompound.getInteger("itemid")), new ItemStack(Item.getItemById(inStack.stackTagCompound.getInteger("itemid"))).getMaxStackSize() ); } else { return inStack; } } }
August 30, 201510 yr You need to determine the result of the recipe in getCraftingResult, where you actually have access to the stacks being used, not just a dummy one Don't make mods if you don't know Java. Check out my website: http://shadowfacts.net Developer of many mods
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.