diff --git a/src/main/java/storagecraft/gui/GuiGrid.java b/src/main/java/storagecraft/gui/GuiGrid.java index fa2938d12..b270e19ef 100644 --- a/src/main/java/storagecraft/gui/GuiGrid.java +++ b/src/main/java/storagecraft/gui/GuiGrid.java @@ -10,6 +10,7 @@ import net.minecraft.client.gui.GuiTextField; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import org.lwjgl.input.Keyboard; import org.lwjgl.input.Mouse; @@ -19,6 +20,7 @@ import storagecraft.container.ContainerGrid; import storagecraft.gui.sidebutton.SideButtonGridSortingDirection; import storagecraft.gui.sidebutton.SideButtonGridSortingType; import storagecraft.gui.sidebutton.SideButtonRedstoneMode; +import storagecraft.item.ItemPattern; import storagecraft.network.MessageGridCraftingClear; import storagecraft.network.MessageStoragePull; import storagecraft.network.MessageStoragePush; @@ -174,7 +176,15 @@ public class GuiGrid extends GuiBase { if (slot < items.size()) { - drawItem(x, y, items.get(slot).toItemStack(), true); + if (items.get(slot).isCraftable()) + { + drawItem(x, y, items.get(slot).toItemStack(), false); + drawString(x, y, "Craft", 0xFFFFFFFF); + } + else + { + drawItem(x, y, items.get(slot).toItemStack(), true); + } } if (inBounds(x, y, 16, 16, mouseX, mouseY) || !grid.isConnected()) @@ -234,6 +244,11 @@ public class GuiGrid extends GuiBase items.addAll(grid.getController().getItems()); + for (ItemStack pattern : grid.getController().getPatterns()) + { + items.add(new StorageItem(ItemPattern.getPatternResult(grid.getWorld(), pattern), true)); + } + if (!searchField.getText().trim().isEmpty()) { Iterator t = items.iterator(); diff --git a/src/main/java/storagecraft/storage/StorageItem.java b/src/main/java/storagecraft/storage/StorageItem.java index bf253dc96..89672a48d 100644 --- a/src/main/java/storagecraft/storage/StorageItem.java +++ b/src/main/java/storagecraft/storage/StorageItem.java @@ -17,6 +17,8 @@ public class StorageItem private NBTTagCompound tag; @SideOnly(Side.CLIENT) private int id; + @SideOnly(Side.CLIENT) + private boolean craftable; public StorageItem(ByteBuf buf) { @@ -47,6 +49,13 @@ public class StorageItem this(stack.getItem(), stack.stackSize, stack.getItemDamage(), stack.getTagCompound()); } + public StorageItem(ItemStack stack, boolean craftable) + { + this(stack); + + this.craftable = craftable; + } + public void toBytes(ByteBuf buf, int id) { buf.writeInt(id); @@ -102,6 +111,12 @@ public class StorageItem return id; } + @SideOnly(Side.CLIENT) + public boolean isCraftable() + { + return craftable; + } + public StorageItem copy() { return copy(quantity); diff --git a/src/main/java/storagecraft/tile/TileController.java b/src/main/java/storagecraft/tile/TileController.java index 40fb86e38..dc883f96e 100644 --- a/src/main/java/storagecraft/tile/TileController.java +++ b/src/main/java/storagecraft/tile/TileController.java @@ -11,12 +11,14 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; +import net.minecraftforge.fml.common.network.ByteBufUtils; import storagecraft.StorageCraftBlocks; import storagecraft.block.BlockController; import storagecraft.block.EnumControllerType; import storagecraft.storage.IStorage; import storagecraft.storage.IStorageProvider; import storagecraft.storage.StorageItem; +import storagecraft.tile.crafting.TileCrafter; import storagecraft.tile.settings.IRedstoneModeSetting; import storagecraft.tile.settings.RedstoneMode; import storagecraft.util.InventoryUtils; @@ -30,6 +32,8 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor private List machines = new ArrayList(); + private List patterns = new ArrayList(); + private List visitedCables = new ArrayList(); private EnergyStorage energy = new EnergyStorage(32000); @@ -124,6 +128,26 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor { energyUsage += machine.getEnergyUsage(); } + + patterns.clear(); + + for (TileMachine machine : machines) + { + if (machine instanceof TileCrafter) + { + TileCrafter crafter = (TileCrafter) machine; + + for (int i = 0; i < crafter.getSizeInventory(); ++i) + { + ItemStack slot = crafter.getStackInSlot(i); + + if (slot != null) + { + patterns.add(slot); + } + } + } + } } switch (getType()) @@ -175,6 +199,11 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor return machines; } + public List getPatterns() + { + return patterns; + } + public List getItems() { return items; @@ -418,6 +447,15 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor { items.add(new StorageItem(buf)); } + + int patternSize = buf.readInt(); + + patterns.clear(); + + for (int i = 0; i < patternSize; ++i) + { + patterns.add(ByteBufUtils.readItemStack(buf)); + } } @Override @@ -434,5 +472,12 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor { item.toBytes(buf, items.indexOf(item)); } + + buf.writeInt(patterns.size()); + + for (ItemStack pattern : patterns) + { + ByteBufUtils.writeItemStack(buf, pattern); + } } } diff --git a/src/main/java/storagecraft/tile/crafting/CraftingTask.java b/src/main/java/storagecraft/tile/crafting/CraftingTask.java deleted file mode 100644 index fa6fe6fb8..000000000 --- a/src/main/java/storagecraft/tile/crafting/CraftingTask.java +++ /dev/null @@ -1,48 +0,0 @@ -package storagecraft.tile.crafting; - -import java.util.List; -import net.minecraft.item.ItemStack; -import storagecraft.storage.StorageItem; -import storagecraft.tile.TileController; - -public class CraftingTask -{ - private ItemStack result; - private ItemStack[] requirements; - private List subTasks; - - private TileController controller; - - public CraftingTask(TileController controller) - { - this.controller = controller; - } - - public boolean craft() - { - for (ItemStack requirement : requirements) - { - boolean found = false; - - for (StorageItem item : controller.getItems()) - { - if (item.compareNoQuantity(requirement)) - { - found = true; - - controller.take(requirement); - - break; - } - } - - if (!found) - { - // now look for a crafter for requirement and craft it. - // if not found, return false. - } - } - - return true; - } -}