diff --git a/src/main/java/refinedstorage/container/ContainerDummy.java b/src/main/java/refinedstorage/container/ContainerDummy.java new file mode 100755 index 000000000..c9022f70b --- /dev/null +++ b/src/main/java/refinedstorage/container/ContainerDummy.java @@ -0,0 +1,11 @@ +package refinedstorage.container; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; + +public class ContainerDummy extends Container { + @Override + public boolean canInteractWith(EntityPlayer player) { + return false; + } +} diff --git a/src/main/java/refinedstorage/gui/GuiCraftingSettings.java b/src/main/java/refinedstorage/gui/GuiCraftingSettings.java index 87bdcd37d..52aef83af 100755 --- a/src/main/java/refinedstorage/gui/GuiCraftingSettings.java +++ b/src/main/java/refinedstorage/gui/GuiCraftingSettings.java @@ -1,16 +1,10 @@ package refinedstorage.gui; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.Container; +import refinedstorage.container.ContainerDummy; public class GuiCraftingSettings extends GuiBase { public GuiCraftingSettings() { - super(new Container() { - @Override - public boolean canInteractWith(EntityPlayer player) { - return false; - } - }, 143, 61); + super(new ContainerDummy(), 143, 61); } @Override diff --git a/src/main/java/refinedstorage/item/ItemPattern.java b/src/main/java/refinedstorage/item/ItemPattern.java index c92bce782..a68d19e9b 100755 --- a/src/main/java/refinedstorage/item/ItemPattern.java +++ b/src/main/java/refinedstorage/item/ItemPattern.java @@ -7,7 +7,6 @@ import net.minecraft.nbt.NBTTagCompound; import java.util.List; public class ItemPattern extends ItemBase { - public static final String NBT_SLOT = "Slot_%d"; public static final String NBT_RESULT = "Result"; public ItemPattern() { @@ -21,17 +20,6 @@ public class ItemPattern extends ItemBase { } } - public static void setSlot(ItemStack pattern, int i, ItemStack stack) { - if (pattern.getTagCompound() == null) { - pattern.setTagCompound(new NBTTagCompound()); - } - - NBTTagCompound stackTag = new NBTTagCompound(); - stack.writeToNBT(stackTag); - - pattern.getTagCompound().setTag(String.format(NBT_SLOT, i), stackTag); - } - public static void setResult(ItemStack pattern, ItemStack stack) { if (pattern.getTagCompound() == null) { pattern.setTagCompound(new NBTTagCompound()); diff --git a/src/main/java/refinedstorage/tile/TileController.java b/src/main/java/refinedstorage/tile/TileController.java index 69e585733..07f64fb10 100755 --- a/src/main/java/refinedstorage/tile/TileController.java +++ b/src/main/java/refinedstorage/tile/TileController.java @@ -28,6 +28,7 @@ import refinedstorage.network.MessageWirelessGridItems; import refinedstorage.storage.IStorage; import refinedstorage.storage.IStorageProvider; import refinedstorage.storage.ItemGroup; +import refinedstorage.tile.autocrafting.CraftingTask; import refinedstorage.tile.config.IRedstoneModeConfig; import refinedstorage.tile.config.RedstoneMode; import refinedstorage.tile.grid.WirelessGridConsumer; @@ -57,6 +58,8 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor private List machines = new ArrayList(); private List clientSideMachines = new ArrayList(); + private List craftingTasks = new ArrayList(); + private List visited = new ArrayList(); private EnergyStorage energy = new EnergyStorage(ENERGY_CAPACITY); @@ -200,6 +203,10 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor return itemGroups; } + public List getCraftingTasks() { + return craftingTasks; + } + private void syncItems() { itemGroups.clear(); diff --git a/src/main/java/refinedstorage/tile/autocrafting/CraftingTask.java b/src/main/java/refinedstorage/tile/autocrafting/CraftingTask.java new file mode 100755 index 000000000..db68b9367 --- /dev/null +++ b/src/main/java/refinedstorage/tile/autocrafting/CraftingTask.java @@ -0,0 +1,45 @@ +package refinedstorage.tile.autocrafting; + +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.item.crafting.IRecipe; +import refinedstorage.container.ContainerDummy; +import refinedstorage.util.InventoryUtils; + +import java.util.ArrayList; +import java.util.List; + +public class CraftingTask { + private ItemStack result; + private List ingredients; + + public CraftingTask(ItemStack result, List ingredients) { + this.result = result; + this.ingredients = ingredients; + } + + public static CraftingTask create(ItemStack result) { + List ingredients = new ArrayList(); + + addCraftingIngredients(ingredients, result); + + return new CraftingTask(result, ingredients); + } + + private static void addCraftingIngredients(List ingredients, ItemStack stack) { + for (IRecipe recipe : CraftingManager.getInstance().getRecipeList()) { + ItemStack output = recipe.getRecipeOutput(); + // this may seem unnecessary but keep it, some horrible mods return a null itemstack + if (output != null && output.getItem() != null) { + // first check if the output is the stack we're adding the ingredients for + if (InventoryUtils.compareStack(output, stack)) { + // now get all the ingredients from that recipe + for (ItemStack ingredient : recipe.getRemainingItems(new InventoryCrafting(new ContainerDummy(), 3, 3))) { + ingredients.add(ingredient); + } + } + } + } + } +} diff --git a/src/main/java/refinedstorage/tile/grid/TileGrid.java b/src/main/java/refinedstorage/tile/grid/TileGrid.java index fe0d0e140..f676b3cd0 100755 --- a/src/main/java/refinedstorage/tile/grid/TileGrid.java +++ b/src/main/java/refinedstorage/tile/grid/TileGrid.java @@ -170,14 +170,6 @@ public class TileGrid extends TileMachine implements IGrid { ItemStack pattern = new ItemStack(RefinedStorageItems.PATTERN); ItemPattern.setResult(pattern, crafted); - for (int i = 0; i < 9; ++i) { - ItemStack slot = craftingInventory.getStackInSlot(i); - - if (slot != null) { - ItemPattern.setSlot(pattern, i, slot); - } - } - patternsInventory.setInventorySlotContents(1, pattern); } }