diff --git a/src/main/java/storagecraft/container/ContainerBase.java b/src/main/java/storagecraft/container/ContainerBase.java index d2303f14e..a5bd69af3 100644 --- a/src/main/java/storagecraft/container/ContainerBase.java +++ b/src/main/java/storagecraft/container/ContainerBase.java @@ -1,5 +1,7 @@ package storagecraft.container; +import java.util.ArrayList; +import java.util.List; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; @@ -10,6 +12,8 @@ public abstract class ContainerBase extends Container { private EntityPlayer player; + private List playerInventorySlots = new ArrayList(); + public ContainerBase(EntityPlayer player) { this.player = player; @@ -26,7 +30,11 @@ public abstract class ContainerBase extends Container for (int i = 0; i < 9; i++) { - addSlotToContainer(new Slot(player.inventory, id, xInventory + i * 18, yInventory + 4 + (3 * 18))); + Slot slot = new Slot(player.inventory, id, xInventory + i * 18, yInventory + 4 + (3 * 18)); + + playerInventorySlots.add(slot); + + addSlotToContainer(slot); id++; } @@ -35,7 +43,11 @@ public abstract class ContainerBase extends Container { for (int x = 0; x < 9; x++) { - addSlotToContainer(new Slot(player.inventory, id, xInventory + x * 18, yInventory + y * 18)); + Slot slot = new Slot(player.inventory, id, xInventory + x * 18, yInventory + y * 18); + + playerInventorySlots.add(slot); + + addSlotToContainer(slot); id++; } @@ -75,4 +87,9 @@ public abstract class ContainerBase extends Container { return true; } + + public List getPlayerInventorySlots() + { + return playerInventorySlots; + } } diff --git a/src/main/java/storagecraft/container/ContainerGrid.java b/src/main/java/storagecraft/container/ContainerGrid.java index 249569cea..46675b3df 100644 --- a/src/main/java/storagecraft/container/ContainerGrid.java +++ b/src/main/java/storagecraft/container/ContainerGrid.java @@ -11,6 +11,8 @@ public class ContainerGrid extends ContainerBase { super(player); + addPlayerInventory(8, grid.isCrafting() ? 174 : 108); + if (grid.isCrafting()) { int x = 44; @@ -29,9 +31,7 @@ public class ContainerGrid extends ContainerBase } } - addSlotToContainer(new SlotGridCraftingResult(player, grid.getCraftingMatrix(), grid.getCraftingResult(), 0, 125, 124)); + addSlotToContainer(new SlotGridCraftingResult(player, grid.getCraftingMatrix(), grid.getCraftingResult(), grid, 0, 125, 124)); } - - addPlayerInventory(8, grid.isCrafting() ? 174 : 108); } } diff --git a/src/main/java/storagecraft/container/slot/SlotGridCraftingResult.java b/src/main/java/storagecraft/container/slot/SlotGridCraftingResult.java index c5a7ec145..14c5fe350 100644 --- a/src/main/java/storagecraft/container/slot/SlotGridCraftingResult.java +++ b/src/main/java/storagecraft/container/slot/SlotGridCraftingResult.java @@ -3,11 +3,37 @@ package storagecraft.container.slot; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.SlotCrafting; +import net.minecraft.item.ItemStack; +import storagecraft.tile.TileGrid; public class SlotGridCraftingResult extends SlotCrafting { - public SlotGridCraftingResult(EntityPlayer player, IInventory craftingMatrix, IInventory craftingResult, int id, int x, int y) + private IInventory craftingMatrix; + private TileGrid grid; + + public SlotGridCraftingResult(EntityPlayer player, IInventory craftingMatrix, IInventory craftingResult, TileGrid grid, int id, int x, int y) { super(player, craftingMatrix, craftingResult, id, x, y); + + this.craftingMatrix = craftingMatrix; + this.grid = grid; + } + + @Override + public void onPickupFromSlot(EntityPlayer player, ItemStack stack) + { + ItemStack[] matrixSlots = new ItemStack[craftingMatrix.getSizeInventory()]; + + for (int i = 0; i < craftingMatrix.getSizeInventory(); ++i) + { + if (craftingMatrix.getStackInSlot(i) != null) + { + matrixSlots[i] = craftingMatrix.getStackInSlot(i).copy(); + } + } + + super.onPickupFromSlot(player, stack); + + grid.onCrafted(matrixSlots); } } diff --git a/src/main/java/storagecraft/gui/GuiGrid.java b/src/main/java/storagecraft/gui/GuiGrid.java index eba763a43..f49fee77f 100644 --- a/src/main/java/storagecraft/gui/GuiGrid.java +++ b/src/main/java/storagecraft/gui/GuiGrid.java @@ -284,10 +284,8 @@ public class GuiGrid extends GuiBase } else { - for (int i = 0; i < container.inventorySlots.size(); ++i) + for (Slot slot : container.getPlayerInventorySlots()) { - Slot slot = (Slot) container.inventorySlots.get(i); - if (inBounds(slot.xDisplayPosition, slot.yDisplayPosition, 16, 16, mouseX - guiLeft, mouseY - guiTop)) { if (Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) diff --git a/src/main/java/storagecraft/network/MessageGridCraftingUpdate.java b/src/main/java/storagecraft/network/MessageGridCraftingUpdate.java new file mode 100644 index 000000000..4a19d0cef --- /dev/null +++ b/src/main/java/storagecraft/network/MessageGridCraftingUpdate.java @@ -0,0 +1,77 @@ +package storagecraft.network; + +import cpw.mods.fml.common.network.ByteBufUtils; +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; +import cpw.mods.fml.common.network.simpleimpl.MessageContext; +import io.netty.buffer.ByteBuf; +import net.minecraft.client.Minecraft; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import storagecraft.tile.TileGrid; + +public class MessageGridCraftingUpdate implements IMessage, IMessageHandler +{ + private int x; + private int y; + private int z; + private ItemStack[] craftingMatrix = new ItemStack[9]; + + public MessageGridCraftingUpdate() + { + } + + public MessageGridCraftingUpdate(TileGrid grid) + { + this.x = grid.xCoord; + this.y = grid.yCoord; + this.z = grid.zCoord; + + for (int i = 0; i < 9; ++i) + { + craftingMatrix[i] = grid.getCraftingMatrix().getStackInSlot(i); + } + } + + @Override + public void fromBytes(ByteBuf buf) + { + x = buf.readInt(); + y = buf.readInt(); + z = buf.readInt(); + + for (int i = 0; i < 9; ++i) + { + craftingMatrix[i] = ByteBufUtils.readItemStack(buf); + } + } + + @Override + public void toBytes(ByteBuf buf) + { + buf.writeInt(x); + buf.writeInt(y); + buf.writeInt(z); + + for (ItemStack stack : craftingMatrix) + { + ByteBufUtils.writeItemStack(buf, stack); + } + } + + @Override + public IMessage onMessage(MessageGridCraftingUpdate message, MessageContext context) + { + TileEntity tile = Minecraft.getMinecraft().theWorld.getTileEntity(message.x, message.y, message.z); + + if (tile instanceof TileGrid) + { + for (int i = 0; i < 9; ++i) + { + ((TileGrid) tile).getCraftingMatrix().setInventorySlotContents(i, message.craftingMatrix[i]); + } + } + + return null; + } +} diff --git a/src/main/java/storagecraft/network/MessageStoragePush.java b/src/main/java/storagecraft/network/MessageStoragePush.java index 63c1a3307..6d3bc1ca2 100644 --- a/src/main/java/storagecraft/network/MessageStoragePush.java +++ b/src/main/java/storagecraft/network/MessageStoragePush.java @@ -74,7 +74,6 @@ public class MessageStoragePush implements IMessage, IMessageHandler