From 98662c9634d1f33b6eb8b5cccb407336fcaca75a Mon Sep 17 00:00:00 2001 From: NegaNote Date: Tue, 27 Jan 2026 16:46:05 -0500 Subject: [PATCH 01/13] add pattern storage --- .../gtceu/common/mui/GTGuiTextures.java | 2 + .../machine/MEPatternBufferPartMachine.java | 40 +++++++++++++++++++ .../ae2/mui/widget/MEListWidget.java | 16 ++++++++ 3 files changed, 58 insertions(+) create mode 100644 src/main/java/com/gregtechceu/gtceu/integration/ae2/mui/widget/MEListWidget.java diff --git a/src/main/java/com/gregtechceu/gtceu/common/mui/GTGuiTextures.java b/src/main/java/com/gregtechceu/gtceu/common/mui/GTGuiTextures.java index 192c9159bf1..6e157c43def 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/mui/GTGuiTextures.java +++ b/src/main/java/com/gregtechceu/gtceu/common/mui/GTGuiTextures.java @@ -347,6 +347,8 @@ public static class IDs { public static final UITexture OUT_SLOT_OVERLAY_STEEL = fullImage("textures/gui/overlay/out_slot_overlay_steel.png"); public static final UITexture PAPER_OVERLAY = fullImage("textures/gui/overlay/paper_overlay.png", ColorType.DEFAULT); + public static final UITexture PATTERN_OVERLAY = fullImage("textures/gui/widget/pattern_overlay.png", + ColorType.DEFAULT); public static final UITexture PRINTED_PAPER_OVERLAY = fullImage("textures/gui/overlay/printed_paper_overlay.png", ColorType.DEFAULT); public static final UITexture PIPE_OVERLAY_2 = fullImage("textures/gui/overlay/pipe_overlay_2.png", diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java index da5d583f0fc..a37665065b8 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java @@ -1,5 +1,6 @@ package com.gregtechceu.gtceu.integration.ae2.machine; +import appeng.crafting.pattern.EncodedPatternItem; import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.machine.MetaMachine; @@ -10,11 +11,23 @@ import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank; import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; import com.gregtechceu.gtceu.api.machine.trait.RecipeHandlerList; +import com.gregtechceu.gtceu.api.mui.factory.PosGuiData; +import com.gregtechceu.gtceu.api.mui.value.sync.PanelSyncManager; +import com.gregtechceu.gtceu.api.mui.value.sync.SyncHandlers; +import com.gregtechceu.gtceu.api.mui.widgets.SlotGroupWidget; +import com.gregtechceu.gtceu.api.mui.widgets.layout.Grid; +import com.gregtechceu.gtceu.api.mui.widgets.slot.ItemSlot; +import com.gregtechceu.gtceu.api.mui.widgets.slot.SlotGroup; import com.gregtechceu.gtceu.api.recipe.ingredient.FluidIngredient; import com.gregtechceu.gtceu.api.recipe.ingredient.SizedIngredient; import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; +import com.gregtechceu.gtceu.client.mui.screen.ModularPanel; +import com.gregtechceu.gtceu.client.mui.screen.UISettings; import com.gregtechceu.gtceu.common.data.machines.GTAEMachines; +import com.gregtechceu.gtceu.common.data.mui.GTMuiWidgets; import com.gregtechceu.gtceu.common.item.IntCircuitBehaviour; +import com.gregtechceu.gtceu.common.mui.GTGuiTextures; +import com.gregtechceu.gtceu.common.mui.GTGuis; import com.gregtechceu.gtceu.integration.ae2.machine.trait.InternalSlotRecipeHandler; import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; @@ -259,6 +272,33 @@ private void onPatternChange(int index) { ////////////////////////////////////// // ********** GUI ***********// ////////////////////////////////////// + + @Override + public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISettings settings) { + var panel = GTGuis.createPanel(this, 176, 168); + + panel.child(GTMuiWidgets.createTitleBar(getDefinition(), 176)); + + SlotGroup patternSlotGroup = new SlotGroup("pattern_slots", 9, 0,true); + + panel.child(new Grid() + .top(7) + .height(18 * (MAX_PATTERN_COUNT / 9)) + .minElementMargin(0, 0) + .minColWidth(18).minRowHeight(18) + .alignX(0.5f) + .mapTo(9, MAX_PATTERN_COUNT, index -> new ItemSlot() + .slot(SyncHandlers.itemSlot(patternInventory, index) + .slotGroup(patternSlotGroup) + .accessibility(true, true) + .filter(stack -> stack.getItem() instanceof EncodedPatternItem)) + .background(GTGuiTextures.SLOT, GTGuiTextures.PATTERN_OVERLAY))); + + panel.child(SlotGroupWidget.playerInventory(true).bottom(7)); + + return panel; + } + /* * @Override * public void attachConfigurators(ConfiguratorPanel configuratorPanel) { diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/mui/widget/MEListWidget.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/mui/widget/MEListWidget.java new file mode 100644 index 00000000000..785fa404c20 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/mui/widget/MEListWidget.java @@ -0,0 +1,16 @@ +package com.gregtechceu.gtceu.integration.ae2.mui.widget; + +import com.gregtechceu.gtceu.api.mui.base.value.ISyncOrValue; +import com.gregtechceu.gtceu.api.mui.widget.Widget; +import com.gregtechceu.gtceu.api.mui.widgets.layout.Row; +import org.jetbrains.annotations.NotNull; + +import java.util.Map; + +public class MEListWidget extends Row { + + @Override + public boolean isValidSyncOrValue(@NotNull ISyncOrValue syncOrValue) { + return syncOrValue.isTypeOrEmpty(Map.class); + } +} From 03d9f4b400cf94110267447c6ceb5d8f8701dcaf Mon Sep 17 00:00:00 2001 From: NegaNote Date: Tue, 27 Jan 2026 16:47:21 -0500 Subject: [PATCH 02/13] why did this empty class get kept from when i was working with the me outputs what --- .../integration/ae2/mui/widget/MEListWidget.java | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 src/main/java/com/gregtechceu/gtceu/integration/ae2/mui/widget/MEListWidget.java diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/mui/widget/MEListWidget.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/mui/widget/MEListWidget.java deleted file mode 100644 index 785fa404c20..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/mui/widget/MEListWidget.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.gregtechceu.gtceu.integration.ae2.mui.widget; - -import com.gregtechceu.gtceu.api.mui.base.value.ISyncOrValue; -import com.gregtechceu.gtceu.api.mui.widget.Widget; -import com.gregtechceu.gtceu.api.mui.widgets.layout.Row; -import org.jetbrains.annotations.NotNull; - -import java.util.Map; - -public class MEListWidget extends Row { - - @Override - public boolean isValidSyncOrValue(@NotNull ISyncOrValue syncOrValue) { - return syncOrValue.isTypeOrEmpty(Map.class); - } -} From 4a657d2ec26d7517b25410e4e13e575261674b3b Mon Sep 17 00:00:00 2001 From: NegaNote Date: Tue, 27 Jan 2026 19:18:20 -0500 Subject: [PATCH 03/13] add shared item inventory --- .../machine/MEPatternBufferPartMachine.java | 48 +++++++++++++++++-- 1 file changed, 44 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java index a37665065b8..40a519457b7 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java @@ -1,6 +1,5 @@ package com.gregtechceu.gtceu.integration.ae2.machine; -import appeng.crafting.pattern.EncodedPatternItem; import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.machine.MetaMachine; @@ -11,10 +10,14 @@ import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank; import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; import com.gregtechceu.gtceu.api.machine.trait.RecipeHandlerList; +import com.gregtechceu.gtceu.api.mui.base.IPanelHandler; +import com.gregtechceu.gtceu.api.mui.base.drawable.IKey; import com.gregtechceu.gtceu.api.mui.factory.PosGuiData; import com.gregtechceu.gtceu.api.mui.value.sync.PanelSyncManager; import com.gregtechceu.gtceu.api.mui.value.sync.SyncHandlers; +import com.gregtechceu.gtceu.api.mui.widgets.ButtonWidget; import com.gregtechceu.gtceu.api.mui.widgets.SlotGroupWidget; +import com.gregtechceu.gtceu.api.mui.widgets.layout.Column; import com.gregtechceu.gtceu.api.mui.widgets.layout.Grid; import com.gregtechceu.gtceu.api.mui.widgets.slot.ItemSlot; import com.gregtechceu.gtceu.api.mui.widgets.slot.SlotGroup; @@ -62,6 +65,7 @@ import appeng.api.stacks.*; import appeng.api.storage.MEStorage; import appeng.api.storage.StorageHelper; +import appeng.crafting.pattern.EncodedPatternItem; import appeng.crafting.pattern.ProcessingPatternItem; import appeng.helpers.patternprovider.PatternContainer; import com.google.common.collect.BiMap; @@ -279,7 +283,7 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet panel.child(GTMuiWidgets.createTitleBar(getDefinition(), 176)); - SlotGroup patternSlotGroup = new SlotGroup("pattern_slots", 9, 0,true); + SlotGroup patternSlotGroup = new SlotGroup("pattern_slots", 9, 0, true); panel.child(new Grid() .top(7) @@ -294,13 +298,50 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet .filter(stack -> stack.getItem() instanceof EncodedPatternItem)) .background(GTGuiTextures.SLOT, GTGuiTextures.PATTERN_OVERLAY))); + IPanelHandler sharedItemsPanelHandler = syncManager.syncedPanel("shared_items", true, + (syncManager1, panelHandler) -> { + SlotGroup sharedItemSlotGroup = new SlotGroup("shared_item_slots", 3, false); + + return GTGuis.createPopupPanel("shared_items_panel", 80, 86) + .child(IKey.lang("gui.gtceu.share_inventory.title").asWidget().padding(4)) + .child(new Grid() + .name("shared_item_grid") + .top(26) + .height(18 * 3) + .minElementMargin(0, 0) + .minColWidth(18).minRowHeight(18) + .alignX(0.5f) + .mapTo(3, 9, index -> new ItemSlot() + .slot(SyncHandlers.itemSlot(shareInventory, index) + .slotGroup(sharedItemSlotGroup) + .accessibility(true, true)))); + }); + + panel.child(new Column() + .coverChildren() + .leftRel(1.0f) + .reverseLayout(true) + .bottom(16) + .padding(0, 8, 4, 4) + .childPadding(2) + .child(GTMuiWidgets.createCircuitSlotPanel(this, panel, syncManager)) + .child(new ButtonWidget<>() + .size(18) + .onMousePressed((x, y, b) -> { + sharedItemsPanelHandler.openPanel(); + return true; + }) + .overlay(GTGuiTextures.BUTTON_ITEM_OUTPUT) + .tooltipBuilder(richTooltip -> richTooltip + .addLine(IKey.lang("gui.gtceu.share_inventory.desc.0")) + .addLine(IKey.lang("gui.gtceu.share_inventory.desc.1"))))); + panel.child(SlotGroupWidget.playerInventory(true).bottom(7)); return panel; } /* - * @Override * public void attachConfigurators(ConfiguratorPanel configuratorPanel) { * configuratorPanel.attachConfigurators(new ButtonConfigurator( * new GuiTextureGroup(GuiTextures.BUTTON, GuiTextures.REFUND_OVERLAY), this::refundAll) @@ -320,7 +361,6 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet * Component.translatable("gui.gtceu.share_inventory.desc.1")))); * } * - * @Override * public Widget createUIWidget() { * int rowSize = 9; * int colSize = 3; From 0729cdc5195289f22fa70d8332c2d5d18b217f68 Mon Sep 17 00:00:00 2001 From: NegaNote Date: Tue, 27 Jan 2026 20:22:08 -0500 Subject: [PATCH 04/13] add shared fluid inventory --- .../machine/MEPatternBufferPartMachine.java | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java index 40a519457b7..5d8fa389e19 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java @@ -27,6 +27,7 @@ import com.gregtechceu.gtceu.client.mui.screen.ModularPanel; import com.gregtechceu.gtceu.client.mui.screen.UISettings; import com.gregtechceu.gtceu.common.data.machines.GTAEMachines; +import com.gregtechceu.gtceu.common.data.mui.GTMuiMachineUtil; import com.gregtechceu.gtceu.common.data.mui.GTMuiWidgets; import com.gregtechceu.gtceu.common.item.IntCircuitBehaviour; import com.gregtechceu.gtceu.common.mui.GTGuiTextures; @@ -303,7 +304,7 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet SlotGroup sharedItemSlotGroup = new SlotGroup("shared_item_slots", 3, false); return GTGuis.createPopupPanel("shared_items_panel", 80, 86) - .child(IKey.lang("gui.gtceu.share_inventory.title").asWidget().padding(4)) + .child(IKey.lang("gui.gtceu.share_inventory.title").asWidget().margin(4)) .child(new Grid() .name("shared_item_grid") .top(26) @@ -317,6 +318,15 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet .accessibility(true, true)))); }); + IPanelHandler sharedFluidsPanelHandler = syncManager.syncedPanel("shared_fluids", true, + (syncManager1, panelHandler) -> GTGuis.createPopupPanel("shared_fluids_panel", 88, 86) + .child(IKey.lang("gui.gtceu.share_tank.title").asWidget().margin(4)) + .child(GTMuiMachineUtil.createSlotGroupFromInventory(syncManager1, shareTank, + "shared_fluid_slots", 9, 'F', + GTMuiMachineUtil.createSquareMatrix(9, 'F')) + .top(26) + .alignX(0.5f))); + panel.child(new Column() .coverChildren() .leftRel(1.0f) @@ -334,6 +344,16 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet .overlay(GTGuiTextures.BUTTON_ITEM_OUTPUT) .tooltipBuilder(richTooltip -> richTooltip .addLine(IKey.lang("gui.gtceu.share_inventory.desc.0")) + .addLine(IKey.lang("gui.gtceu.share_inventory.desc.1")))) + .child(new ButtonWidget<>() + .size(18) + .onMousePressed((x, y, b) -> { + sharedFluidsPanelHandler.openPanel(); + return true; + }) + .overlay(GTGuiTextures.BUTTON_FLUID_OUTPUT) + .tooltipBuilder(richTooltip -> richTooltip + .addLine(IKey.lang("gui.gtceu.share_tank.desc.0")) .addLine(IKey.lang("gui.gtceu.share_inventory.desc.1"))))); panel.child(SlotGroupWidget.playerInventory(true).bottom(7)); From 05dc930cd24370081c2c395f25a4113f93c63646 Mon Sep 17 00:00:00 2001 From: NegaNote Date: Wed, 28 Jan 2026 00:38:41 -0500 Subject: [PATCH 05/13] add refunding --- .../gtceu/common/mui/GTGuiTextures.java | 2 + .../machine/MEPatternBufferPartMachine.java | 51 +++++++++++++------ 2 files changed, 37 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/common/mui/GTGuiTextures.java b/src/main/java/com/gregtechceu/gtceu/common/mui/GTGuiTextures.java index 6e157c43def..af0d7e805a9 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/mui/GTGuiTextures.java +++ b/src/main/java/com/gregtechceu/gtceu/common/mui/GTGuiTextures.java @@ -363,6 +363,8 @@ public static class IDs { ColorType.DEFAULT); public static final UITexture PRESS_OVERLAY_4 = fullImage("textures/gui/overlay/press_overlay_4.png", ColorType.DEFAULT); + public static final UITexture REFUND_OVERLAY = fullImage("textures/gui/widget/refund_overlay.png", + ColorType.DEFAULT); public static final UITexture SAWBLADE_OVERLAY = fullImage("textures/gui/overlay/sawblade_overlay.png", ColorType.DEFAULT); public static final UITexture SOLIDIFIER_OVERLAY = fullImage("textures/gui/overlay/solidifier_overlay.png", diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java index 5d8fa389e19..869192d3926 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java @@ -13,6 +13,7 @@ import com.gregtechceu.gtceu.api.mui.base.IPanelHandler; import com.gregtechceu.gtceu.api.mui.base.drawable.IKey; import com.gregtechceu.gtceu.api.mui.factory.PosGuiData; +import com.gregtechceu.gtceu.api.mui.value.sync.BooleanSyncValue; import com.gregtechceu.gtceu.api.mui.value.sync.PanelSyncManager; import com.gregtechceu.gtceu.api.mui.value.sync.SyncHandlers; import com.gregtechceu.gtceu.api.mui.widgets.ButtonWidget; @@ -25,6 +26,7 @@ import com.gregtechceu.gtceu.api.recipe.ingredient.SizedIngredient; import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; import com.gregtechceu.gtceu.client.mui.screen.ModularPanel; +import com.gregtechceu.gtceu.client.mui.screen.RichTooltip; import com.gregtechceu.gtceu.client.mui.screen.UISettings; import com.gregtechceu.gtceu.common.data.machines.GTAEMachines; import com.gregtechceu.gtceu.common.data.mui.GTMuiMachineUtil; @@ -38,8 +40,6 @@ import com.gregtechceu.gtceu.utils.GTMath; import com.gregtechceu.gtceu.utils.ItemStackHashStrategy; -import com.lowdragmc.lowdraglib.gui.util.ClickData; - import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; @@ -77,11 +77,7 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.UnmodifiableView; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Objects; -import java.util.Set; +import java.util.*; import javax.annotation.ParametersAreNonnullByDefault; @@ -148,6 +144,10 @@ public void setItemDirect(int slotIndex, ItemStack stack) { @Nullable protected TickableSubscription updateSubs; + @Getter + @Setter + protected boolean shouldRefund = false; + public MEPatternBufferPartMachine(BlockEntityCreationInfo info) { super(info, IO.IN); patternInventory.setOnContentsChanged(() -> getSyncDataHolder().markClientSyncFieldDirty("patternInventory")); @@ -225,6 +225,10 @@ protected void update() { ICraftingProvider.requestUpdate(getMainNode()); this.needPatternSync = false; } + if (shouldRefund) { + refundAll(); + shouldRefund = false; + } } public void addProxy(MEPatternBufferProxyPartMachine proxy) { @@ -250,11 +254,9 @@ public Set getProxies() { return Collections.unmodifiableSet(proxyMachines); } - private void refundAll(ClickData clickData) { - if (!clickData.isRemote) { - for (InternalSlot internalSlot : internalInventory) { - internalSlot.refund(); - } + private void refundAll() { + for (InternalSlot internalSlot : internalInventory) { + internalSlot.refund(); } } @@ -296,7 +298,8 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet .slot(SyncHandlers.itemSlot(patternInventory, index) .slotGroup(patternSlotGroup) .accessibility(true, true) - .filter(stack -> stack.getItem() instanceof EncodedPatternItem)) + .filter(stack -> stack.getItem() instanceof EncodedPatternItem) + .changeListener((i, o, c, init) -> onPatternChange(index))) .background(GTGuiTextures.SLOT, GTGuiTextures.PATTERN_OVERLAY))); IPanelHandler sharedItemsPanelHandler = syncManager.syncedPanel("shared_items", true, @@ -327,6 +330,9 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet .top(26) .alignX(0.5f))); + BooleanSyncValue refundValue = SyncHandlers.bool(this::isShouldRefund, this::setShouldRefund); + syncManager.syncValue("should_refund", refundValue); + panel.child(new Column() .coverChildren() .leftRel(1.0f) @@ -342,7 +348,7 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet return true; }) .overlay(GTGuiTextures.BUTTON_ITEM_OUTPUT) - .tooltipBuilder(richTooltip -> richTooltip + .tooltip(new RichTooltip() .addLine(IKey.lang("gui.gtceu.share_inventory.desc.0")) .addLine(IKey.lang("gui.gtceu.share_inventory.desc.1")))) .child(new ButtonWidget<>() @@ -352,9 +358,18 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet return true; }) .overlay(GTGuiTextures.BUTTON_FLUID_OUTPUT) - .tooltipBuilder(richTooltip -> richTooltip + .tooltip(new RichTooltip() .addLine(IKey.lang("gui.gtceu.share_tank.desc.0")) - .addLine(IKey.lang("gui.gtceu.share_inventory.desc.1"))))); + .addLine(IKey.lang("gui.gtceu.share_inventory.desc.1")))) + .child(new ButtonWidget<>() + .size(18) + .onMousePressed((x, y, b) -> { + refundValue.setBoolValue(true); + return true; + }) + .overlay(GTGuiTextures.REFUND_OVERLAY) + .tooltip(new RichTooltip() + .addLine(IKey.lang("gui.gtceu.refund_all.desc"))))); panel.child(SlotGroupWidget.playerInventory(true).bottom(7)); @@ -554,6 +569,10 @@ public boolean isFluidEmpty() { return fluidInventory.isEmpty(); } + public boolean isEmpty() { + return isItemEmpty() && isFluidEmpty(); + } + public void onContentsChanged() { itemStacks = null; fluidStacks = null; From 28f317d1ff832170279cbd7b7b1f9dc6bb4ebbe7 Mon Sep 17 00:00:00 2001 From: NegaNote Date: Wed, 28 Jan 2026 01:00:46 -0500 Subject: [PATCH 06/13] disable refunding when it can't be done --- .../machine/MEPatternBufferPartMachine.java | 38 +++++++++++++++---- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java index 869192d3926..846b8d15bb1 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java @@ -12,6 +12,9 @@ import com.gregtechceu.gtceu.api.machine.trait.RecipeHandlerList; import com.gregtechceu.gtceu.api.mui.base.IPanelHandler; import com.gregtechceu.gtceu.api.mui.base.drawable.IKey; +import com.gregtechceu.gtceu.api.mui.drawable.DrawableStack; +import com.gregtechceu.gtceu.api.mui.drawable.DynamicDrawable; +import com.gregtechceu.gtceu.api.mui.drawable.ItemDrawable; import com.gregtechceu.gtceu.api.mui.factory.PosGuiData; import com.gregtechceu.gtceu.api.mui.value.sync.BooleanSyncValue; import com.gregtechceu.gtceu.api.mui.value.sync.PanelSyncManager; @@ -51,6 +54,7 @@ import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; import net.minecraft.world.item.crafting.Ingredient; import net.minecraftforge.common.util.INBTSerializable; import net.minecraftforge.fluids.FluidStack; @@ -330,8 +334,11 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet .top(26) .alignX(0.5f))); - BooleanSyncValue refundValue = SyncHandlers.bool(this::isShouldRefund, this::setShouldRefund); - syncManager.syncValue("should_refund", refundValue); + BooleanSyncValue shouldRefundValue = SyncHandlers.bool(this::isShouldRefund, this::setShouldRefund); + syncManager.syncValue("should_refund", shouldRefundValue); + + BooleanSyncValue canRefundValue = SyncHandlers.bool(this::canRefund, b -> {}); + syncManager.syncValue("can_refund", canRefundValue); panel.child(new Column() .coverChildren() @@ -341,7 +348,7 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet .padding(0, 8, 4, 4) .childPadding(2) .child(GTMuiWidgets.createCircuitSlotPanel(this, panel, syncManager)) - .child(new ButtonWidget<>() + .child(new ButtonWidget<>() // Shared items subpanel .size(18) .onMousePressed((x, y, b) -> { sharedItemsPanelHandler.openPanel(); @@ -351,7 +358,7 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet .tooltip(new RichTooltip() .addLine(IKey.lang("gui.gtceu.share_inventory.desc.0")) .addLine(IKey.lang("gui.gtceu.share_inventory.desc.1")))) - .child(new ButtonWidget<>() + .child(new ButtonWidget<>() // Shared fluids subpanel .size(18) .onMousePressed((x, y, b) -> { sharedFluidsPanelHandler.openPanel(); @@ -361,13 +368,24 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet .tooltip(new RichTooltip() .addLine(IKey.lang("gui.gtceu.share_tank.desc.0")) .addLine(IKey.lang("gui.gtceu.share_inventory.desc.1")))) - .child(new ButtonWidget<>() + .child(new ButtonWidget<>() // Refund button .size(18) .onMousePressed((x, y, b) -> { - refundValue.setBoolValue(true); - return true; + if (canRefundValue.getBoolValue()) { + shouldRefundValue.setBoolValue(true); + return true; + } + return false; }) - .overlay(GTGuiTextures.REFUND_OVERLAY) + .overlay(new DynamicDrawable(() -> { + if (canRefundValue.getBoolValue()) { + return GTGuiTextures.REFUND_OVERLAY + .asIcon().size(16); + } else { + return new DrawableStack(GTGuiTextures.REFUND_OVERLAY, new ItemDrawable(Items.BARRIER)) + .asIcon().size(16); + } + })) .tooltip(new RichTooltip() .addLine(IKey.lang("gui.gtceu.refund_all.desc"))))); @@ -435,6 +453,10 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet * } */ + public boolean canRefund() { + return Arrays.stream(internalInventory).anyMatch(slot -> !slot.isEmpty()); + } + @Override public List getAvailablePatterns() { return detailsSlotMap.keySet().stream().filter(Objects::nonNull).toList(); From 413507595fcdba10ec2291b56d77b596c5dc92b1 Mon Sep 17 00:00:00 2001 From: NegaNote Date: Wed, 28 Jan 2026 18:55:50 -0500 Subject: [PATCH 07/13] move refunding to syncedAction --- .../ae2/machine/MEPatternBufferPartMachine.java | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java index 846b8d15bb1..c4d6fbc2b76 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java @@ -148,10 +148,6 @@ public void setItemDirect(int slotIndex, ItemStack stack) { @Nullable protected TickableSubscription updateSubs; - @Getter - @Setter - protected boolean shouldRefund = false; - public MEPatternBufferPartMachine(BlockEntityCreationInfo info) { super(info, IO.IN); patternInventory.setOnContentsChanged(() -> getSyncDataHolder().markClientSyncFieldDirty("patternInventory")); @@ -229,10 +225,6 @@ protected void update() { ICraftingProvider.requestUpdate(getMainNode()); this.needPatternSync = false; } - if (shouldRefund) { - refundAll(); - shouldRefund = false; - } } public void addProxy(MEPatternBufferProxyPartMachine proxy) { @@ -334,12 +326,11 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet .top(26) .alignX(0.5f))); - BooleanSyncValue shouldRefundValue = SyncHandlers.bool(this::isShouldRefund, this::setShouldRefund); - syncManager.syncValue("should_refund", shouldRefundValue); - BooleanSyncValue canRefundValue = SyncHandlers.bool(this::canRefund, b -> {}); syncManager.syncValue("can_refund", canRefundValue); + syncManager.registerServerSyncedAction("refundButtonPressed", packet -> refundAll()); + panel.child(new Column() .coverChildren() .leftRel(1.0f) @@ -371,8 +362,8 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet .child(new ButtonWidget<>() // Refund button .size(18) .onMousePressed((x, y, b) -> { - if (canRefundValue.getBoolValue()) { - shouldRefundValue.setBoolValue(true); + if (canRefundValue.getBoolValue() && b == 0) { + syncManager.callSyncedAction("refundButtonPressed"); return true; } return false; From 0c0fe91ef98f1e61fe0fd981a591f3f572c0cba9 Mon Sep 17 00:00:00 2001 From: NegaNote Date: Wed, 28 Jan 2026 19:22:54 -0500 Subject: [PATCH 08/13] move to InputConstants, give proxies their ui --- .../ae2/machine/MEPatternBufferPartMachine.java | 17 ++++++++++++----- .../MEPatternBufferProxyPartMachine.java | 16 +++++++++------- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java index c4d6fbc2b76..545a272ff9a 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java @@ -75,6 +75,7 @@ import appeng.helpers.patternprovider.PatternContainer; import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; +import com.mojang.blaze3d.platform.InputConstants; import it.unimi.dsi.fastutil.objects.*; import lombok.Getter; import lombok.Setter; @@ -342,8 +343,11 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet .child(new ButtonWidget<>() // Shared items subpanel .size(18) .onMousePressed((x, y, b) -> { - sharedItemsPanelHandler.openPanel(); - return true; + if (b == InputConstants.MOUSE_BUTTON_LEFT) { + sharedItemsPanelHandler.openPanel(); + return true; + } + return false; }) .overlay(GTGuiTextures.BUTTON_ITEM_OUTPUT) .tooltip(new RichTooltip() @@ -352,8 +356,11 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet .child(new ButtonWidget<>() // Shared fluids subpanel .size(18) .onMousePressed((x, y, b) -> { - sharedFluidsPanelHandler.openPanel(); - return true; + if (b == InputConstants.MOUSE_BUTTON_LEFT) { + sharedFluidsPanelHandler.openPanel(); + return true; + } + return false; }) .overlay(GTGuiTextures.BUTTON_FLUID_OUTPUT) .tooltip(new RichTooltip() @@ -362,7 +369,7 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet .child(new ButtonWidget<>() // Refund button .size(18) .onMousePressed((x, y, b) -> { - if (canRefundValue.getBoolValue() && b == 0) { + if (canRefundValue.getBoolValue() && b == InputConstants.MOUSE_BUTTON_LEFT) { syncManager.callSyncedAction("refundButtonPressed"); return true; } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferProxyPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferProxyPartMachine.java index 1a335f64b9f..8fbc10aa03e 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferProxyPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferProxyPartMachine.java @@ -8,6 +8,10 @@ import com.gregtechceu.gtceu.api.machine.feature.IMachineLife; import com.gregtechceu.gtceu.api.machine.multiblock.part.TieredIOPartMachine; import com.gregtechceu.gtceu.api.machine.trait.RecipeHandlerList; +import com.gregtechceu.gtceu.api.mui.factory.PosGuiData; +import com.gregtechceu.gtceu.api.mui.value.sync.PanelSyncManager; +import com.gregtechceu.gtceu.client.mui.screen.ModularPanel; +import com.gregtechceu.gtceu.client.mui.screen.UISettings; import com.gregtechceu.gtceu.integration.ae2.machine.trait.ProxySlotRecipeHandler; import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; @@ -91,13 +95,11 @@ public boolean shouldOpenUI(Player player, InteractionHand hand, BlockHitResult return getBuffer() != null; } - /* - * @Override - * public ModularUI createUI(Player entityPlayer) { - * assert getBuffer() != null; // UI should never be able to be opened when buffer is null - * return getBuffer().createUI(entityPlayer); - * } - */ + @Override + public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISettings settings) { + assert getBuffer() != null; + return getBuffer().buildUI(data, syncManager, settings); + } @Override public void onMachineRemoved() { From 56a4dd0c4244a61660f4afc00f425275f19e4cc4 Mon Sep 17 00:00:00 2001 From: NegaNote Date: Wed, 28 Jan 2026 20:15:14 -0500 Subject: [PATCH 09/13] add renaming and network status --- .../resources/assets/gtceu/lang/en_ud.json | 1 + .../resources/assets/gtceu/lang/en_us.json | 1 + .../gtceu/data/lang/LangHandler.java | 1 + .../machine/MEPatternBufferPartMachine.java | 42 +++++++++++++++++-- 4 files changed, 42 insertions(+), 3 deletions(-) diff --git a/src/generated/resources/assets/gtceu/lang/en_ud.json b/src/generated/resources/assets/gtceu/lang/en_ud.json index 91818fe5152..09b337502e7 100644 --- a/src/generated/resources/assets/gtceu/lang/en_ud.json +++ b/src/generated/resources/assets/gtceu/lang/en_ud.json @@ -2476,6 +2476,7 @@ "gtceu.gui.overclock.off": "X", "gtceu.gui.overclock.range": "]%s '%s[ sɹǝı⟘ ǝןqɐןıɐʌⱯ", "gtceu.gui.overclock.title": "ɹǝı⟘ ʞɔoןɔɹǝʌO", + "gtceu.gui.pattern_buffer.set_custom_name": " :ǝɯɐN ɯoʇsnƆ ʇǝS", "gtceu.gui.silktouch.disabled.0": "˙ǝןqɐuƎ oʇ ʞɔıןƆ :pǝןqɐsıᗡ ɥɔno⟘ ʞןıS", "gtceu.gui.silktouch.disabled.1": "˙ǝuıɥɔɐɯ ǝןpı uɐ sǝɹınbǝɹ buıɥɔʇıʍSㄥ§", "gtceu.gui.silktouch.enabled.0": "˙ǝןqɐsıᗡ oʇ ʞɔıןƆ :pǝןqɐuƎ ɥɔno⟘ ʞןıS", diff --git a/src/generated/resources/assets/gtceu/lang/en_us.json b/src/generated/resources/assets/gtceu/lang/en_us.json index aa05501a15c..9e388f84ca7 100644 --- a/src/generated/resources/assets/gtceu/lang/en_us.json +++ b/src/generated/resources/assets/gtceu/lang/en_us.json @@ -2476,6 +2476,7 @@ "gtceu.gui.overclock.off": "X", "gtceu.gui.overclock.range": "Available Tiers [%s, %s]", "gtceu.gui.overclock.title": "Overclock Tier", + "gtceu.gui.pattern_buffer.set_custom_name": "Set Custom Name: ", "gtceu.gui.silktouch.disabled.0": "Silk Touch Disabled: Click to Enable.", "gtceu.gui.silktouch.disabled.1": "§7Switching requires an idle machine.", "gtceu.gui.silktouch.enabled.0": "Silk Touch Enabled: Click to Disable.", diff --git a/src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java b/src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java index 6f9f99834e4..3f2d6da03e3 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java @@ -1325,6 +1325,7 @@ public static void init(RegistrateLangProvider provider) { provider.add("gtceu.gui.content.units.per_tick", "/t"); provider.add("gtceu.gui.content.units.per_second", "/s"); + provider.add("gtceu.gui.pattern_buffer.set_custom_name", "Set Custom Name: "); provider.add("gtceu.gui.me_network.online", "Network Status: §2Online§r"); provider.add("gtceu.gui.me_network.offline", "Network Status: §4Offline§r"); provider.add("gtceu.gui.waiting_list", "Sending Queue:"); diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java index 545a272ff9a..0dd70b3c42e 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java @@ -25,6 +25,7 @@ import com.gregtechceu.gtceu.api.mui.widgets.layout.Grid; import com.gregtechceu.gtceu.api.mui.widgets.slot.ItemSlot; import com.gregtechceu.gtceu.api.mui.widgets.slot.SlotGroup; +import com.gregtechceu.gtceu.api.mui.widgets.textfield.TextFieldWidget; import com.gregtechceu.gtceu.api.recipe.ingredient.FluidIngredient; import com.gregtechceu.gtceu.api.recipe.ingredient.SizedIngredient; import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; @@ -286,7 +287,7 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet SlotGroup patternSlotGroup = new SlotGroup("pattern_slots", 9, 0, true); panel.child(new Grid() - .top(7) + .top(25) .height(18 * (MAX_PATTERN_COUNT / 9)) .minElementMargin(0, 0) .minColWidth(18).minRowHeight(18) @@ -299,6 +300,27 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet .changeListener((i, o, c, init) -> onPatternChange(index))) .background(GTGuiTextures.SLOT, GTGuiTextures.PATTERN_OVERLAY))); + BooleanSyncValue isOnlineValue = SyncHandlers.bool(this::isOnline, this::setOnline); + syncManager.syncValue("is_online", isOnlineValue); + + panel.child(IKey.dynamic(() -> isOnlineValue.getBoolValue() ? + Component.translatable("gtceu.gui.me_network.online") : + Component.translatable("gtceu.gui.me_network.offline")) + .asWidget() + .top(10) + .margin(2) + .left(9)); + + IPanelHandler renamingPanelHandler = syncManager.syncedPanel("renaming", true, + ((syncManager1, syncHandler) -> GTGuis.createPopupPanel("renaming_panel", 110, 40) + .child(new Column() + .coverChildren() + .child(IKey.lang("gtceu.gui.pattern_buffer.set_custom_name").asWidget()) + .child(new TextFieldWidget() + .size(90, 20) + .value(SyncHandlers.string(() -> this.customName, this::setCustomName))) + .margin(5)))); + IPanelHandler sharedItemsPanelHandler = syncManager.syncedPanel("shared_items", true, (syncManager1, panelHandler) -> { SlotGroup sharedItemSlotGroup = new SlotGroup("shared_item_slots", 3, false); @@ -319,7 +341,7 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet }); IPanelHandler sharedFluidsPanelHandler = syncManager.syncedPanel("shared_fluids", true, - (syncManager1, panelHandler) -> GTGuis.createPopupPanel("shared_fluids_panel", 88, 86) + (syncManager1, panelHandler) -> GTGuis.createPopupPanel("shared_fluids_panel", 120, 86) .child(IKey.lang("gui.gtceu.share_tank.title").asWidget().margin(4)) .child(GTMuiMachineUtil.createSlotGroupFromInventory(syncManager1, shareTank, "shared_fluid_slots", 9, 'F', @@ -385,7 +407,21 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet } })) .tooltip(new RichTooltip() - .addLine(IKey.lang("gui.gtceu.refund_all.desc"))))); + .addLine(IKey.lang("gui.gtceu.refund_all.desc")))) + .child(new ButtonWidget<>() // Renaming button + .size(18) + .onMousePressed((x, y, b) -> { + if (b == InputConstants.MOUSE_BUTTON_LEFT) { + renamingPanelHandler.openPanel(); + return true; + } + return false; + }) + .overlay(IKey.str("✎") + .asIcon() + .size(16)) + .tooltip(new RichTooltip() + .addLine(IKey.lang("gui.gtceu.rename.desc"))))); panel.child(SlotGroupWidget.playerInventory(true).bottom(7)); From cc580d272423c281ba1da6166b334bca0c94aea0 Mon Sep 17 00:00:00 2001 From: NegaNote Date: Wed, 28 Jan 2026 20:16:44 -0500 Subject: [PATCH 10/13] remove old ldlib gui code --- .../machine/MEPatternBufferPartMachine.java | 59 ------------------- 1 file changed, 59 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java index 0dd70b3c42e..89fdd654b76 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java @@ -428,65 +428,6 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet return panel; } - /* - * public void attachConfigurators(ConfiguratorPanel configuratorPanel) { - * configuratorPanel.attachConfigurators(new ButtonConfigurator( - * new GuiTextureGroup(GuiTextures.BUTTON, GuiTextures.REFUND_OVERLAY), this::refundAll) - * .setTooltips(List.of(Component.translatable("gui.gtceu.refund_all.desc")))); - * if (isHasCircuitSlot() && isCircuitSlotEnabled()) { - * configuratorPanel.attachConfigurators(new CircuitFancyConfigurator(circuitInventory.storage)); - * } - * configuratorPanel.attachConfigurators(new FancyInvConfigurator( - * shareInventory.storage, Component.translatable("gui.gtceu.share_inventory.title")) - * .setTooltips(List.of( - * Component.translatable("gui.gtceu.share_inventory.desc.0"), - * Component.translatable("gui.gtceu.share_inventory.desc.1")))); - * configuratorPanel.attachConfigurators(new FancyTankConfigurator( - * shareTank.getStorages(), Component.translatable("gui.gtceu.share_tank.title")) - * .setTooltips(List.of( - * Component.translatable("gui.gtceu.share_tank.desc.0"), - * Component.translatable("gui.gtceu.share_inventory.desc.1")))); - * } - * - * public Widget createUIWidget() { - * int rowSize = 9; - * int colSize = 3; - * var group = new WidgetGroup(0, 0, 18 * rowSize + 16, 18 * colSize + 16); - * int index = 0; - * for (int y = 0; y < colSize; ++y) { - * for (int x = 0; x < rowSize; ++x) { - * int finalI = index; - * var slot = new AEPatternViewSlotWidget(patternInventory, index++, 8 + x * 18, 14 + y * 18) - * .setOccupiedTexture(GuiTextures.SLOT) - * .setItemHook(stack -> { - * if (!stack.isEmpty() && stack.getItem() instanceof EncodedPatternItem iep) { - * final ItemStack out = iep.getOutput(stack); - * if (!out.isEmpty()) { - * return out; - * } - * } - * return stack; - * }) - * .setChangeListener(() -> onPatternChange(finalI)) - * .setBackground(GuiTextures.SLOT, GuiTextures.PATTERN_OVERLAY); - * group.addWidget(slot); - * } - * } - * // ME Network status - * group.addWidget(new LabelWidget( - * 8, - * 2, - * () -> this.isOnline ? "gtceu.gui.me_network.online" : "gtceu.gui.me_network.offline")); - * - * group.addWidget(new AETextInputButtonWidget(18 * rowSize + 8 - 70, 2, 70, 10) - * .setText(customName) - * .setOnConfirm(this::setCustomName) - * .setButtonTooltips(Component.translatable("gui.gtceu.rename.desc"))); - * - * return group; - * } - */ - public boolean canRefund() { return Arrays.stream(internalInventory).anyMatch(slot -> !slot.isEmpty()); } From 103d181bd58e036b257026d212751dbf8bc52622 Mon Sep 17 00:00:00 2001 From: NegaNote Date: Wed, 28 Jan 2026 20:23:38 -0500 Subject: [PATCH 11/13] adjust fluid panel size --- .../integration/ae2/machine/MEPatternBufferPartMachine.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java index 89fdd654b76..3a22b8d1043 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java @@ -341,7 +341,7 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet }); IPanelHandler sharedFluidsPanelHandler = syncManager.syncedPanel("shared_fluids", true, - (syncManager1, panelHandler) -> GTGuis.createPopupPanel("shared_fluids_panel", 120, 86) + (syncManager1, panelHandler) -> GTGuis.createPopupPanel("shared_fluids_panel", 85, 86) .child(IKey.lang("gui.gtceu.share_tank.title").asWidget().margin(4)) .child(GTMuiMachineUtil.createSlotGroupFromInventory(syncManager1, shareTank, "shared_fluid_slots", 9, 'F', From 4776f721b70750f3276703b37c51364009329ef6 Mon Sep 17 00:00:00 2001 From: NegaNote Date: Wed, 28 Jan 2026 20:50:21 -0500 Subject: [PATCH 12/13] add background to side buttons --- .../integration/ae2/machine/MEPatternBufferPartMachine.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java index 3a22b8d1043..7588e1a957d 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java @@ -361,6 +361,7 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet .bottom(16) .padding(0, 8, 4, 4) .childPadding(2) + .background(GTGuiTextures.BACKGROUND.getSubArea(0.25f, 0f, 1.0f, 1.0f)) .child(GTMuiWidgets.createCircuitSlotPanel(this, panel, syncManager)) .child(new ButtonWidget<>() // Shared items subpanel .size(18) From f772189deb541924f7b8c30bf3b166c9e953baed Mon Sep 17 00:00:00 2001 From: NegaNote Date: Wed, 28 Jan 2026 21:01:48 -0500 Subject: [PATCH 13/13] move sidebar down 2 pixels --- .../integration/ae2/machine/MEPatternBufferPartMachine.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java index 7588e1a957d..a70e93a4042 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java @@ -358,8 +358,8 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet .coverChildren() .leftRel(1.0f) .reverseLayout(true) - .bottom(16) - .padding(0, 8, 4, 4) + .bottom(14) + .padding(8, 0, 4, 4) .childPadding(2) .background(GTGuiTextures.BACKGROUND.getSubArea(0.25f, 0f, 1.0f, 1.0f)) .child(GTMuiWidgets.createCircuitSlotPanel(this, panel, syncManager))