diff --git a/src/main/java/refinedstorage/item/ItemPattern.java b/src/main/java/refinedstorage/item/ItemPattern.java index 44386b296..1a0a5108e 100755 --- a/src/main/java/refinedstorage/item/ItemPattern.java +++ b/src/main/java/refinedstorage/item/ItemPattern.java @@ -6,11 +6,13 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraftforge.common.util.Constants; +import java.util.Collections; import java.util.List; public class ItemPattern extends ItemBase { public static final String NBT_INPUTS = "Inputs"; public static final String NBT_OUTPUTS = "Outputs"; + public static final String NBT_BYPRODUCTS = "Byproducts"; public static final String NBT_PROCESSING = "Processing"; public ItemPattern() { @@ -44,6 +46,10 @@ public class ItemPattern extends ItemBase { add(pattern, stack, NBT_OUTPUTS); } + public static void addByproduct(ItemStack pattern, ItemStack stack) { + add(pattern, stack, NBT_BYPRODUCTS); + } + private static void add(ItemStack pattern, ItemStack stack, String type) { if (pattern.getTagCompound() == null) { pattern.setTagCompound(new NBTTagCompound()); @@ -64,6 +70,10 @@ public class ItemPattern extends ItemBase { return get(pattern, NBT_OUTPUTS); } + public static ItemStack[] getByproducts(ItemStack pattern) { + return get(pattern, NBT_BYPRODUCTS); + } + private static ItemStack[] get(ItemStack pattern, String type) { if (!pattern.hasTagCompound() || !pattern.getTagCompound().hasKey(type)) { return null; diff --git a/src/main/java/refinedstorage/proxy/CommonProxy.java b/src/main/java/refinedstorage/proxy/CommonProxy.java index 383f1817f..361e98aeb 100755 --- a/src/main/java/refinedstorage/proxy/CommonProxy.java +++ b/src/main/java/refinedstorage/proxy/CommonProxy.java @@ -3,8 +3,11 @@ package refinedstorage.proxy; import net.minecraft.block.Block; import net.minecraft.init.Blocks; import net.minecraft.init.Items; +import net.minecraft.inventory.InventoryCrafting; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.world.World; import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; @@ -31,6 +34,8 @@ import refinedstorage.tile.controller.TileController; import refinedstorage.tile.grid.TileGrid; import refinedstorage.tile.solderer.*; +import javax.annotation.Nullable; + import static refinedstorage.RefinedStorage.ID; public class CommonProxy { diff --git a/src/main/java/refinedstorage/tile/autocrafting/CraftingPattern.java b/src/main/java/refinedstorage/tile/autocrafting/CraftingPattern.java index d5ea08b3e..c338df720 100755 --- a/src/main/java/refinedstorage/tile/autocrafting/CraftingPattern.java +++ b/src/main/java/refinedstorage/tile/autocrafting/CraftingPattern.java @@ -21,14 +21,16 @@ public class CraftingPattern { private boolean processing; private ItemStack[] inputs; private ItemStack[] outputs; + private ItemStack[] byproducts; - public CraftingPattern(int crafterX, int crafterY, int crafterZ, boolean processing, ItemStack[] inputs, ItemStack[] outputs) { + public CraftingPattern(int crafterX, int crafterY, int crafterZ, boolean processing, ItemStack[] inputs, ItemStack[] outputs, ItemStack[] byproducts) { this.crafterX = crafterX; this.crafterY = crafterY; this.crafterZ = crafterZ; this.processing = processing; this.inputs = inputs; this.outputs = outputs; + this.byproducts = byproducts; } public TileCrafter getCrafter(World world) { @@ -51,6 +53,10 @@ public class CraftingPattern { return outputs; } + public ItemStack[] getByproducts() { + return byproducts; + } + public void writeToNBT(NBTTagCompound tag) { tag.setBoolean(ItemPattern.NBT_PROCESSING, processing); @@ -66,6 +72,14 @@ public class CraftingPattern { } tag.setTag(ItemPattern.NBT_OUTPUTS, outputsTag); + if (byproducts != null) { + NBTTagList byproductsTag = new NBTTagList(); + for (ItemStack byproduct : byproducts) { + byproductsTag.appendTag(byproduct.serializeNBT()); + } + tag.setTag(ItemPattern.NBT_BYPRODUCTS, byproductsTag); + } + tag.setInteger(NBT_CRAFTER_X, crafter.getPos().getX()); tag.setInteger(NBT_CRAFTER_Y, crafter.getPos().getY()); tag.setInteger(NBT_CRAFTER_Z, crafter.getPos().getZ()); @@ -100,6 +114,21 @@ public class CraftingPattern { } } - return new CraftingPattern(cx, cy, cz, processing, inputs, outputs); + ItemStack byproducts[] = new ItemStack[0]; + + if (tag.hasKey(ItemPattern.NBT_BYPRODUCTS)) { + NBTTagList byproductsTag = tag.getTagList(ItemPattern.NBT_BYPRODUCTS, Constants.NBT.TAG_COMPOUND); + byproducts = new ItemStack[byproductsTag.tagCount()]; + + for (int i = 0; i < byproductsTag.tagCount(); ++i) { + byproducts[i] = ItemStack.loadItemStackFromNBT(byproductsTag.getCompoundTagAt(i)); + + if (byproducts[i] == null) { + return null; + } + } + } + + return new CraftingPattern(cx, cy, cz, processing, inputs, outputs, byproducts); } } diff --git a/src/main/java/refinedstorage/tile/autocrafting/task/BasicCraftingTask.java b/src/main/java/refinedstorage/tile/autocrafting/task/BasicCraftingTask.java index dabe89365..0898c6314 100755 --- a/src/main/java/refinedstorage/tile/autocrafting/task/BasicCraftingTask.java +++ b/src/main/java/refinedstorage/tile/autocrafting/task/BasicCraftingTask.java @@ -94,6 +94,12 @@ public class BasicCraftingTask implements ICraftingTask { for (ItemStack output : pattern.getOutputs()) { controller.push(output); } + + if (pattern.getByproducts() != null) { + for (ItemStack byproduct : pattern.getByproducts()) { + controller.push(byproduct); + } + } } @Override diff --git a/src/main/java/refinedstorage/tile/controller/TileController.java b/src/main/java/refinedstorage/tile/controller/TileController.java index 5a1f59c66..c4fbc2da9 100755 --- a/src/main/java/refinedstorage/tile/controller/TileController.java +++ b/src/main/java/refinedstorage/tile/controller/TileController.java @@ -279,7 +279,7 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr ItemStack pattern = crafter.getPatterns().getStackInSlot(i); if (pattern != null && ItemPattern.isValid(pattern)) { - patterns.add(new CraftingPattern(crafter.getPos().getX(), crafter.getPos().getY(), crafter.getPos().getZ(), ItemPattern.isProcessing(pattern), ItemPattern.getInputs(pattern), ItemPattern.getOutputs(pattern))); + patterns.add(new CraftingPattern(crafter.getPos().getX(), crafter.getPos().getY(), crafter.getPos().getZ(), ItemPattern.isProcessing(pattern), ItemPattern.getInputs(pattern), ItemPattern.getOutputs(pattern), ItemPattern.getByproducts(pattern))); } } } diff --git a/src/main/java/refinedstorage/tile/grid/TileGrid.java b/src/main/java/refinedstorage/tile/grid/TileGrid.java index 98e23f32b..d7df3d6de 100755 --- a/src/main/java/refinedstorage/tile/grid/TileGrid.java +++ b/src/main/java/refinedstorage/tile/grid/TileGrid.java @@ -200,6 +200,12 @@ public class TileGrid extends TileMachine implements IGrid { ItemStack pattern = new ItemStack(RefinedStorageItems.PATTERN); + for (ItemStack byproduct : CraftingManager.getInstance().getRemainingItems(matrix, worldObj)) { + if (byproduct != null) { + ItemPattern.addByproduct(pattern, byproduct); + } + } + ItemPattern.addOutput(pattern, result.getStackInSlot(0)); ItemPattern.setProcessing(pattern, false);