From a8831e3b6bf6e4cc1863919da7ec1fb4e16bdf57 Mon Sep 17 00:00:00 2001 From: Pierre Zhang Date: Sun, 23 Nov 2025 08:48:24 +0800 Subject: [PATCH 1/4] dump button --- .../tools/gui/CraftingStationGui.java | 19 +++++++ .../tconstruct/tools/gui/GuiButtonDump.java | 52 +++++++++++++++++++ .../inventory/CraftingStationContainer.java | 16 ++++++ .../network/CraftingStationDumpPacket.java | 30 +++++++++++ .../util/network/PacketPipeline.java | 2 + 5 files changed, 119 insertions(+) create mode 100644 src/main/java/tconstruct/tools/gui/GuiButtonDump.java create mode 100644 src/main/java/tconstruct/util/network/CraftingStationDumpPacket.java diff --git a/src/main/java/tconstruct/tools/gui/CraftingStationGui.java b/src/main/java/tconstruct/tools/gui/CraftingStationGui.java index 8a750ec1..50be8487 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..aa540275 --- /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 0189cc04..af18366d 100644 --- a/src/main/java/tconstruct/tools/inventory/CraftingStationContainer.java +++ b/src/main/java/tconstruct/tools/inventory/CraftingStationContainer.java @@ -434,4 +434,20 @@ public class CraftingStationContainer extends Container { 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 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 Date: Sun, 8 Mar 2026 15:51:06 +0800 Subject: [PATCH 2/4] improve things --- .../tconstruct/tools/gui/GuiButtonDump.java | 37 ++++-------------- .../inventory/CraftingStationContainer.java | 7 ++-- .../assets/tinker/textures/gui/dumpbutton.png | Bin 0 -> 132 bytes 3 files changed, 12 insertions(+), 32 deletions(-) create mode 100644 src/main/resources/assets/tinker/textures/gui/dumpbutton.png diff --git a/src/main/java/tconstruct/tools/gui/GuiButtonDump.java b/src/main/java/tconstruct/tools/gui/GuiButtonDump.java index aa540275..b2a578cf 100644 --- a/src/main/java/tconstruct/tools/gui/GuiButtonDump.java +++ b/src/main/java/tconstruct/tools/gui/GuiButtonDump.java @@ -1,52 +1,31 @@ package tconstruct.tools.gui; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.FontRenderer; 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/dump_button.png"); + public GuiButtonDump(int id, int x, int y) { - super(id, x, y, 12, 12, "D"); + super(id, x, y, 10, 10, ""); } @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); + float brightness = this.enabled ? (this.field_146123_n ? 1.0F : 0.8F) : 0.5F; + GL11.glColor4f(brightness, brightness, brightness, 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); + mc.getTextureManager().bindTexture(TEXTURE); + func_146110_a(this.xPosition, this.yPosition, 0, 0, this.width, this.height, this.width, this.height); } } } diff --git a/src/main/java/tconstruct/tools/inventory/CraftingStationContainer.java b/src/main/java/tconstruct/tools/inventory/CraftingStationContainer.java index af18366d..d774dcdc 100644 --- a/src/main/java/tconstruct/tools/inventory/CraftingStationContainer.java +++ b/src/main/java/tconstruct/tools/inventory/CraftingStationContainer.java @@ -439,11 +439,12 @@ public class CraftingStationContainer extends Container { public void dumpCraftingGrid() { if (logic.slotCount == 0) return; - for (int i = 1; i < 10; i++) { - ItemStack stack = craftMatrix.getStackInSlot(i - 1); + // 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 - 1, stack.stackSize > 0 ? stack : null); + craftMatrix.setInventorySlotContents(i, stack.stackSize > 0 ? stack : null); } } } diff --git a/src/main/resources/assets/tinker/textures/gui/dumpbutton.png b/src/main/resources/assets/tinker/textures/gui/dumpbutton.png new file mode 100644 index 0000000000000000000000000000000000000000..d207d49441016ce3acd8df3bdaeb5fbe279d66e0 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2VGmzZ%#=aj&F%}28J29*~C-V}>;R)~wasB`Q ze|LAcxw-j+2M<=b}nIvls;qN crY6C_Ao+x$Gx5p>HlPj$Pgg&ebxsLQ0B@8iK>z>% literal 0 HcmV?d00001 From ff35af1f98b404b6b729e8680ef4ef8f9c9e7617 Mon Sep 17 00:00:00 2001 From: ChromaPIE Date: Tue, 17 Mar 2026 11:21:57 +0800 Subject: [PATCH 3/4] resolve --- .../java/tconstruct/tools/gui/GuiButtonDump.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/main/java/tconstruct/tools/gui/GuiButtonDump.java b/src/main/java/tconstruct/tools/gui/GuiButtonDump.java index b2a578cf..d8460655 100644 --- a/src/main/java/tconstruct/tools/gui/GuiButtonDump.java +++ b/src/main/java/tconstruct/tools/gui/GuiButtonDump.java @@ -8,7 +8,7 @@ import org.lwjgl.opengl.GL11; public class GuiButtonDump extends GuiButton { - private static final ResourceLocation TEXTURE = new ResourceLocation("tinker", "textures/gui/dump_button.png"); + 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, ""); @@ -21,11 +21,18 @@ public class GuiButtonDump extends GuiButton { && mouseX < this.xPosition + this.width && mouseY < this.yPosition + this.height; - float brightness = this.enabled ? (this.field_146123_n ? 1.0F : 0.8F) : 0.5F; - GL11.glColor4f(brightness, brightness, brightness, 1.0F); - + 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); + } } } } From dc88d52445410f59b7741544b61f2a0d39e93816 Mon Sep 17 00:00:00 2001 From: UltraProdigy <187078471+UltraProdigy@users.noreply.github.com> Date: Sun, 29 Mar 2026 15:31:22 -0400 Subject: [PATCH 4/4] optimize image --- .../assets/tinker/textures/gui/dumpbutton.png | Bin 132 -> 130 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/tinker/textures/gui/dumpbutton.png b/src/main/resources/assets/tinker/textures/gui/dumpbutton.png index d207d49441016ce3acd8df3bdaeb5fbe279d66e0..fc465b05247d222492274be2d1fa07608b55bf6b 100644 GIT binary patch delta 77 zcmZo+Y+{@s!O6tTz`*b!MqO{BqK2i4r;B3O$~uPAYZ gt+VmTrZ8OwhGSCPjeJR|%0PV#p00i_>zopr06}mT!2kdN delta 79 zcmZo-Y+;-r!O6kQz`(HUjeY+_MGb2;PZ!4!j+w~`4UBFIO-yPAlO@lkv>DGl$S}8a j2}7jx83Q*p2?hqqCk&m5S2nN#buxIm`njxgN@xNAm?sy_