diff --git a/src/main/java/tconstruct/tools/gui/CraftingStationGui.java b/src/main/java/tconstruct/tools/gui/CraftingStationGui.java index 2cb4928d16c..e9c5ebb9001 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.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.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 void initGui() { 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 00000000000..aa540275765 --- /dev/null +++ b/src/main/java/tconstruct/tools/gui/GuiButtonDump.java @@ -0,0 +1,52 @@ +package tconstruct.tools.gui; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.GuiButton; + +import org.lwjgl.opengl.GL11; + +public class GuiButtonDump extends GuiButton { + + public GuiButtonDump(int id, int x, int y) { + super(id, x, y, 12, 12, "D"); + } + + @Override + public void drawButton(Minecraft mc, int mouseX, int mouseY) { + if (this.visible) { + FontRenderer fontrenderer = mc.fontRenderer; + 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); + + int color = this.enabled ? (this.field_146123_n ? 0xFFAAAAAA : 0xFF555555) : 0xFF333333; + drawRect(this.xPosition, this.yPosition, this.xPosition + this.width, this.yPosition + this.height, color); + + drawRect(this.xPosition, this.yPosition, this.xPosition + this.width, this.yPosition + 1, 0xFF000000); // Top + drawRect(this.xPosition, this.yPosition, this.xPosition + 1, this.yPosition + this.height, 0xFF000000); // Left + drawRect( + this.xPosition + this.width - 1, + this.yPosition, + this.xPosition + this.width, + this.yPosition + this.height, + 0xFF000000); // Right + drawRect( + this.xPosition, + this.yPosition + this.height - 1, + this.xPosition + this.width, + this.yPosition + this.height, + 0xFF000000); // Bottom + + int textColor = this.enabled ? 0xFFFFFF : 0x666666; + this.drawCenteredString( + fontrenderer, + this.displayString, + this.xPosition + this.width / 2, + this.yPosition + (this.height - 8) / 2, + textColor); + } + } +} diff --git a/src/main/java/tconstruct/tools/inventory/CraftingStationContainer.java b/src/main/java/tconstruct/tools/inventory/CraftingStationContainer.java index 0189cc04ffe..af18366d211 100644 --- a/src/main/java/tconstruct/tools/inventory/CraftingStationContainer.java +++ b/src/main/java/tconstruct/tools/inventory/CraftingStationContainer.java @@ -434,4 +434,20 @@ protected boolean mergeItemStackMove(@Nonnull ItemStack stack, int startIndex, i return didSomething; } + + // Dump crafting grid to connected chests + public void dumpCraftingGrid() { + if (logic.slotCount == 0) return; + + for (int i = 1; i < 10; i++) { + ItemStack stack = craftMatrix.getStackInSlot(i - 1); + if (stack != null && stack.stackSize > 0) { + if (mergeItemStack(stack, 46, 46 + logic.slotCount, false)) { + craftMatrix.setInventorySlotContents(i - 1, 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 00000000000..bfd174ed234 --- /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 1a40fed80ee..454f19da215 100644 --- a/src/main/java/tconstruct/util/network/PacketPipeline.java +++ b/src/main/java/tconstruct/util/network/PacketPipeline.java @@ -135,6 +135,8 @@ public void registerPackets() { registerPacket(MovementUpdatePacket.class); registerPacket(ArmourGuiSyncPacket.class); + + registerPacket(CraftingStationDumpPacket.class); } // Method to call from FMLPostInitializationEvent