package mcjty.rftools.crafting; import net.minecraft.inventory.InventoryCrafting; import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.ShapedRecipes; import net.minecraft.nbt.NBTTagCompound; public class ContainerAndItemRecipe extends ShapedRecipes { private Object objectToInheritFrom; private Object objectToGetEnergyFrom; public ContainerAndItemRecipe(ItemStack container, ItemStack item, ItemStack output) { super(2, 1, new ItemStack[] { container, item }, output); objectToInheritFrom = getObjectFromStack(item.getItem()); objectToGetEnergyFrom = getObjectFromStack(container.getItem()); } private Object getObjectFromStack(Item item) { if (item instanceof ItemBlock) { return ((ItemBlock) item).field_150939_a; } else { return item; } } private NBTTagCompound getNBTFromObject(InventoryCrafting inventoryCrafting, Object obj) { for (int i = 0 ; i < inventoryCrafting.getSizeInventory() ; i++) { ItemStack stack = inventoryCrafting.getStackInSlot(i); if (stack != null && stack.getItem() != null) { Object o = getObjectFromStack(stack.getItem()); if (obj.equals(o)) { return stack.getTagCompound(); } } } return null; } private Integer getDamageFromObject(InventoryCrafting inventoryCrafting) { for (int i = 0 ; i < inventoryCrafting.getSizeInventory() ; i++) { ItemStack stack = inventoryCrafting.getStackInSlot(i); if (stack != null && stack.getItem() != null) { Object o = getObjectFromStack(stack.getItem()); if (objectToInheritFrom.equals(o)) { return stack.getItemDamage(); } } } return null; } private static NBTTagCompound getCompound(ItemStack stack) { if (stack.getTagCompound() == null) { stack.setTagCompound(new NBTTagCompound()); } return stack.getTagCompound(); } @Override public ItemStack getCraftingResult(InventoryCrafting inventoryCrafting) { ItemStack stack = super.getCraftingResult(inventoryCrafting); if (stack != null) { NBTTagCompound tagCompound = getNBTFromObject(inventoryCrafting, objectToInheritFrom); if (tagCompound != null) { stack.setTagCompound(tagCompound); } NBTTagCompound tagCompoundEnergy = getNBTFromObject(inventoryCrafting, objectToGetEnergyFrom); if (tagCompoundEnergy != null) { getCompound(stack).setInteger("Energy", tagCompoundEnergy.getInteger("Energy")); } Integer damage = getDamageFromObject(inventoryCrafting); if (damage != null) { getCompound(stack).setInteger("childDamage", damage); } } return stack; } }