diff --git a/src/main/java/tconstruct/tools/gui/CraftingStationGui.java b/src/main/java/tconstruct/tools/gui/CraftingStationGui.java index 2cb4928d..e9c5ebb9 100644 --- a/src/main/java/tconstruct/tools/gui/CraftingStationGui.java +++ b/src/main/java/tconstruct/tools/gui/CraftingStationGui.java @@ -4,6 +4,7 @@ import java.awt.Rectangle; import java.util.Collections; import java.util.List; +import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiTextField; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.entity.player.InventoryPlayer; @@ -21,12 +22,14 @@ import codechicken.nei.VisiblityData; import codechicken.nei.api.INEIGuiHandler; import codechicken.nei.api.TaggedInventoryArea; import cpw.mods.fml.common.Optional; +import tconstruct.TConstruct; import tconstruct.library.TConstructRegistry; import tconstruct.library.crafting.PatternBuilder; import tconstruct.library.modifier.IModifyable; import tconstruct.library.tools.ToolMaterial; import tconstruct.library.util.HarvestLevels; import tconstruct.tools.logic.CraftingStationLogic; +import tconstruct.util.network.CraftingStationDumpPacket; @Optional.Interface(iface = "codechicken.nei.api.INEIGuiHandler", modid = "NotEnoughItems") public class CraftingStationGui extends GuiContainer implements INEIGuiHandler { @@ -121,6 +124,22 @@ public class CraftingStationGui extends GuiContainer implements INEIGuiHandler { this.craftingTextLeft = this.craftingLeft - this.guiLeft; this.descTextLeft = this.descLeft - this.guiLeft; + + // Add dump button if chest is connected + this.buttonList.clear(); + if (logic.chest != null) { + int bothOffset = 0; + if (logic.slotCount > 54) bothOffset += 12; + bothOffset += 122; + this.buttonList.add(new GuiButtonDump(0, this.guiLeft + bothOffset + 159, this.guiTop + 5)); + } + } + + @Override + protected void actionPerformed(GuiButton button) { + if (button.id == 0 && logic.chest != null) { + TConstruct.packetPipeline.sendToServer(new CraftingStationDumpPacket()); + } } @Override diff --git a/src/main/java/tconstruct/tools/gui/GuiButtonDump.java b/src/main/java/tconstruct/tools/gui/GuiButtonDump.java new file mode 100644 index 00000000..d8460655 --- /dev/null +++ b/src/main/java/tconstruct/tools/gui/GuiButtonDump.java @@ -0,0 +1,38 @@ +package tconstruct.tools.gui; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.util.ResourceLocation; + +import org.lwjgl.opengl.GL11; + +public class GuiButtonDump extends GuiButton { + + private static final ResourceLocation TEXTURE = new ResourceLocation("tinker", "textures/gui/dumpbutton.png"); + + public GuiButtonDump(int id, int x, int y) { + super(id, x, y, 10, 10, ""); + } + + @Override + public void drawButton(Minecraft mc, int mouseX, int mouseY) { + if (this.visible) { + this.field_146123_n = mouseX >= this.xPosition && mouseY >= this.yPosition + && mouseX < this.xPosition + this.width + && mouseY < this.yPosition + this.height; + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + mc.getTextureManager().bindTexture(TEXTURE); + func_146110_a(this.xPosition, this.yPosition, 0, 0, this.width, this.height, this.width, this.height); + + if (this.field_146123_n) { + drawRect( + this.xPosition, + this.yPosition, + this.xPosition + this.width, + this.yPosition + this.height, + 0x80FFFFFF); + } + } + } +} diff --git a/src/main/java/tconstruct/tools/inventory/CraftingStationContainer.java b/src/main/java/tconstruct/tools/inventory/CraftingStationContainer.java index 0189cc04..d774dcdc 100644 --- a/src/main/java/tconstruct/tools/inventory/CraftingStationContainer.java +++ b/src/main/java/tconstruct/tools/inventory/CraftingStationContainer.java @@ -434,4 +434,21 @@ public class CraftingStationContainer extends Container { return didSomething; } + + // Dump crafting grid to connected chests + public void dumpCraftingGrid() { + if (logic.slotCount == 0) return; + + // 46 is the first slot index of the attached inventory + for (int i = 0; i < 9; i++) { + ItemStack stack = craftMatrix.getStackInSlot(i); + if (stack != null && stack.stackSize > 0) { + if (mergeItemStack(stack, 46, 46 + logic.slotCount, false)) { + craftMatrix.setInventorySlotContents(i, stack.stackSize > 0 ? stack : null); + } + } + } + + this.onCraftMatrixChanged(this.craftMatrix); + } } diff --git a/src/main/java/tconstruct/util/network/CraftingStationDumpPacket.java b/src/main/java/tconstruct/util/network/CraftingStationDumpPacket.java new file mode 100644 index 00000000..bfd174ed --- /dev/null +++ b/src/main/java/tconstruct/util/network/CraftingStationDumpPacket.java @@ -0,0 +1,30 @@ +package tconstruct.util.network; + +import net.minecraft.entity.player.EntityPlayer; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import mantle.common.network.AbstractPacket; +import tconstruct.tools.inventory.CraftingStationContainer; + +public class CraftingStationDumpPacket extends AbstractPacket { + + public CraftingStationDumpPacket() {} + + @Override + public void encodeInto(ChannelHandlerContext ctx, ByteBuf buffer) {} + + @Override + public void decodeInto(ChannelHandlerContext ctx, ByteBuf buffer) {} + + @Override + public void handleClientSide(EntityPlayer player) {} + + @Override + public void handleServerSide(EntityPlayer player) { + if (player.openContainer instanceof CraftingStationContainer) { + CraftingStationContainer container = (CraftingStationContainer) player.openContainer; + container.dumpCraftingGrid(); + } + } +} diff --git a/src/main/java/tconstruct/util/network/PacketPipeline.java b/src/main/java/tconstruct/util/network/PacketPipeline.java index 1a40fed8..454f19da 100644 --- a/src/main/java/tconstruct/util/network/PacketPipeline.java +++ b/src/main/java/tconstruct/util/network/PacketPipeline.java @@ -135,6 +135,8 @@ public class PacketPipeline extends MessageToMessageCodec