From a8891e978e632f41cf9f476a0e87891187214aa2 Mon Sep 17 00:00:00 2001 From: Gustavo Date: Mon, 2 Mar 2026 13:31:47 +1100 Subject: [PATCH 1/4] steam miner machine ui --- .../gregtechceu/gtceu/api/gui/UITemplate.java | 31 ----- .../api/machine/steam/SteamBoilerMachine.java | 26 ---- .../machine/steam/SteamMinerMachine.java | 127 +++++++++--------- .../gregtechceu/gtceu/common/mui/GTGuis.java | 4 +- .../gtceu/data/lang/MachineLang.java | 9 +- 5 files changed, 71 insertions(+), 126 deletions(-) delete mode 100644 src/main/java/com/gregtechceu/gtceu/api/gui/UITemplate.java diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/UITemplate.java b/src/main/java/com/gregtechceu/gtceu/api/gui/UITemplate.java deleted file mode 100644 index 46bb179cbeb..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/UITemplate.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.gregtechceu.gtceu.api.gui; - -import com.gregtechceu.gtceu.api.gui.widget.SlotWidget; - -import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; -import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; - -import net.minecraft.world.entity.player.Inventory; - -public class UITemplate { - - public static WidgetGroup bindPlayerInventory(Inventory inventoryPlayer, IGuiTexture imageLocation, int x, int y, - boolean addHotbar) { - WidgetGroup group = new WidgetGroup(x, y, 162, 54 + (addHotbar ? 22 : 0)); - for (int row = 0; row < 3; row++) { - for (int col = 0; col < 9; col++) { - group.addWidget(new SlotWidget(inventoryPlayer, col + (row + 1) * 9, col * 18, row * 18) - .setBackgroundTexture(imageLocation) - .setLocationInfo(true, false)); - } - } - if (addHotbar) { - for (int slot = 0; slot < 9; slot++) { - group.addWidget(new SlotWidget(inventoryPlayer, slot, slot * 18, 58) - .setBackgroundTexture(imageLocation) - .setLocationInfo(true, true)); - } - } - return group; - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamBoilerMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamBoilerMachine.java index 33e7bef0004..1cbab0e678b 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamBoilerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamBoilerMachine.java @@ -361,32 +361,6 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet return panel; } - /* - * @Override - * public ModularUI createUI(Player entityPlayer) { - * return new ModularUI(176, 166, this, entityPlayer) - * .background(GuiTextures.BACKGROUND_STEAM.get(isHighPressure)) - * .widget(new LabelWidget(6, 6, getBlockState().getBlock().getDescriptionId())) - * .widget(new ProgressWidget(this::getTemperaturePercent, 96, 26, 10, 54) - * .setProgressTexture(GuiTextures.PROGRESS_BAR_BOILER_EMPTY.get(isHighPressure), - * GuiTextures.PROGRESS_BAR_BOILER_HEAT) - * .setFillDirection(ProgressTexture.FillDirection.DOWN_TO_UP) - * .setDynamicHoverTips(pct -> I18n.get("gtceu.multiblock.large_boiler.temperature", - * currentTemperature + 274, getMaxTemperature() + 274))) - * .widget(new TankWidget(waterTank.getStorages()[0], 83, 26, 10, 54, false, true) - * .setShowAmount(false) - * .setFillDirection(ProgressTexture.FillDirection.DOWN_TO_UP) - * .setBackground(GuiTextures.PROGRESS_BAR_BOILER_EMPTY.get(isHighPressure))) - * .widget(new TankWidget(steamTank.getStorages()[0], 70, 26, 10, 54, true, false) - * .setShowAmount(false) - * .setFillDirection(ProgressTexture.FillDirection.DOWN_TO_UP) - * .setBackground(GuiTextures.PROGRESS_BAR_BOILER_EMPTY.get(isHighPressure))) - * .widget(new ImageWidget(43, 44, 18, 18, GuiTextures.CANISTER_OVERLAY_STEAM.get(isHighPressure))) - * .widget(UITemplate.bindPlayerInventory(entityPlayer.getInventory(), - * GuiTextures.SLOT_STEAM.get(isHighPressure), 7, 84, true)); - * } - */ - ////////////////////////////////////// // ********* Client *********// ////////////////////////////////////// diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamMinerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamMinerMachine.java index 049a773e409..29baa8a7756 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamMinerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamMinerMachine.java @@ -4,26 +4,33 @@ import com.gregtechceu.gtceu.api.capability.IControllable; import com.gregtechceu.gtceu.api.capability.IMiner; import com.gregtechceu.gtceu.api.capability.recipe.IO; -import com.gregtechceu.gtceu.api.gui.GuiTextures; -import com.gregtechceu.gtceu.api.gui.UITemplate; -import com.gregtechceu.gtceu.api.gui.widget.PredicatedImageWidget; -import com.gregtechceu.gtceu.api.gui.widget.SlotWidget; import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.feature.*; import com.gregtechceu.gtceu.api.machine.steam.SteamWorkableMachine; import com.gregtechceu.gtceu.api.machine.trait.ExhaustVentMachineTrait; import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; +import com.gregtechceu.gtceu.api.mui.base.drawable.IKey; +import com.gregtechceu.gtceu.api.mui.base.widget.IWidget; +import com.gregtechceu.gtceu.api.mui.drawable.Icon; +import com.gregtechceu.gtceu.api.mui.factory.PosGuiData; +import com.gregtechceu.gtceu.api.mui.utils.Alignment; +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.ListWidget; +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.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.client.mui.screen.ModularPanel; +import com.gregtechceu.gtceu.client.mui.screen.UISettings; +import com.gregtechceu.gtceu.common.data.mui.GTMuiWidgets; import com.gregtechceu.gtceu.common.item.behavior.PortableScannerBehavior; import com.gregtechceu.gtceu.common.machine.trait.miner.SteamMinerLogic; +import com.gregtechceu.gtceu.common.mui.GTGuis; import com.gregtechceu.gtceu.utils.GTTransferUtils; import com.gregtechceu.gtceu.utils.ISubscription; -import com.lowdragmc.lowdraglib.gui.modular.ModularUI; -import com.lowdragmc.lowdraglib.gui.widget.ComponentPanelWidget; -import com.lowdragmc.lowdraglib.gui.widget.ImageWidget; -import com.lowdragmc.lowdraglib.gui.widget.LabelWidget; - import net.minecraft.ChatFormatting; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; @@ -31,7 +38,6 @@ import net.minecraft.network.chat.Component; import net.minecraft.server.TickTask; import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.block.Block; import net.minecraftforge.fluids.capability.IFluidHandler; @@ -48,7 +54,7 @@ @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault public class SteamMinerMachine extends SteamWorkableMachine implements IControllable, - IUIMachine, IDataInfoProvider, IMiner { + IDataInfoProvider, IMiner, IMuiMachine { @SaveField public final NotifiableItemStackHandler importItems; @@ -148,65 +154,65 @@ protected void autoOutput() { ////////////////////////////////////// // *********** GUI ***********// ////////////////////////////////////// - @Override - public ModularUI createUI(Player entityPlayer) { - int rowSize = (int) Math.sqrt(inventorySize); - - ModularUI builder = new ModularUI(175, 176, this, entityPlayer) - .background(GuiTextures.BACKGROUND_STEAM.get(isHighPressure())); - builder.widget(UITemplate.bindPlayerInventory(entityPlayer.getInventory(), - GuiTextures.SLOT_STEAM.get(isHighPressure()), 7, - 94, true)); - - for (int y = 0; y < rowSize; y++) { - for (int x = 0; x < rowSize; x++) { - int index = y * rowSize + x; - builder.widget(new SlotWidget(exportItems, index, 142 - rowSize * 9 + x * 18, 18 + y * 18, true, false) - .setBackgroundTexture(GuiTextures.SLOT_STEAM.get(isHighPressure()))); - } - } - builder.widget(new LabelWidget(5, 5, getBlockState().getBlock().getDescriptionId())); - builder.widget(new PredicatedImageWidget(79, 42, 18, 18, GuiTextures.INDICATOR_NO_STEAM.get(isHighPressure())) - .setPredicate(() -> !drainInput(true))); - builder.widget(new ImageWidget(7, 16, 105, 75, GuiTextures.DISPLAY_STEAM.get(isHighPressure()))); - builder.widget(new ComponentPanelWidget(10, 19, this::addDisplayText) - .setMaxWidthLimit(84)); - builder.widget(new ComponentPanelWidget(70, 19, this::addDisplayText2) - .setMaxWidthLimit(84)); - - return builder; + @Override + public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISettings settings) { + ModularPanel panel = GTGuis.createPanel(this, 176, 166); + + panel.child(GTMuiWidgets.createTitleBar(this.getDefinition(), 176)); + int rowSize = 2; + + SlotGroup group = new SlotGroup("item_inv", rowSize, 0, true); + panel.child(new Grid() + .coverChildren() + .top(10) + .alignX(0.75f) + .mapTo(rowSize, rowSize * rowSize, index -> new ItemSlot() + .slot(SyncHandlers.itemSlot(exportItems, index) + .slotGroup(group) + .changeListener((newItem, amount, client, init) -> { + if (amount) { + exportItems.onContentsChanged(); + } + }) + .accessibility(false, true)))) + .child(new ListWidget<>() + .top(10) + .alignX(0.25f) + .coverChildren() + .childSeparator(Icon.EMPTY_2PX) + .crossAxisAlignment(Alignment.CrossAxis.START) + .alignX(Alignment.CenterLeft).children(getDisplayTextWidgets())) + .child(SlotGroupWidget.playerInventory(true) + .left(7) + .bottom(7)); + + return panel; } - void addDisplayText(List textList) { + List getDisplayTextWidgets() { + List widgets = new ArrayList<>(); int workingArea = IMiner.getWorkingArea(getRecipeLogic().getCurrentRadius()); - textList.add(Component.translatable("gtceu.machine.miner.startx", this.getRecipeLogic().getX())); - textList.add(Component.translatable("gtceu.machine.miner.starty", this.getRecipeLogic().getY())); - textList.add(Component.translatable("gtceu.machine.miner.startz", this.getRecipeLogic().getZ())); - textList.add(Component.translatable("gtceu.universal.tooltip.working_area", workingArea, workingArea)); + widgets.add(IKey.lang("gtceu.machine.miner.x", getRecipeLogic().getX(), getRecipeLogic().getMineX()).asWidget()); + widgets.add(IKey.lang("gtceu.machine.miner.y", getRecipeLogic().getY(), getRecipeLogic().getMineY()).asWidget()); + widgets.add(IKey.lang("gtceu.machine.miner.z", getRecipeLogic().getZ(), getRecipeLogic().getMineZ()).asWidget()); + widgets.add(IKey.lang("gtceu.universal.tooltip.working_area", workingArea, workingArea).asWidget()); if (this.getRecipeLogic().isDone()) - textList.add(Component.translatable("gtceu.multiblock.large_miner.done") - .withStyle(ChatFormatting.GREEN)); + widgets.add(IKey.lang(Component.translatable("gtceu.multiblock.large_miner.done").withStyle(ChatFormatting.GREEN)).asWidget()); else if (this.getRecipeLogic().isWorking()) - textList.add(Component.translatable("gtceu.multiblock.large_miner.working") - .withStyle(ChatFormatting.GOLD)); + widgets.add(IKey.lang(Component.translatable("gtceu.multiblock.large_miner.working").withStyle(ChatFormatting.GOLD)).asWidget()); else if (!this.isWorkingEnabled()) - textList.add(Component.translatable("gtceu.multiblock.work_paused")); + widgets.add(IKey.lang("gtceu.multiblock.work_paused").asWidget()); if (getRecipeLogic().isInventoryFull()) - textList.add(Component.translatable("gtceu.multiblock.large_miner.invfull") - .withStyle(ChatFormatting.RED)); + widgets.add(IKey.lang(Component.translatable("gtceu.multiblock.large_miner.invfull") + .withStyle(ChatFormatting.RED)).asWidget()); if (exhaustVentTrait.isVentingBlocked()) - textList.add(Component.translatable("gtceu.multiblock.large_miner.vent") - .withStyle(ChatFormatting.RED)); + widgets.add(IKey.lang(Component.translatable("gtceu.multiblock.large_miner.vent") + .withStyle(ChatFormatting.RED)).asWidget()); else if (!drainInput(true)) - textList.add(Component.translatable("gtceu.multiblock.large_miner.steam") - .withStyle(ChatFormatting.RED)); - } - - void addDisplayText2(List textList) { - textList.add(Component.translatable("gtceu.machine.miner.minex", this.getRecipeLogic().getMineX())); - textList.add(Component.translatable("gtceu.machine.miner.miney", this.getRecipeLogic().getMineY())); - textList.add(Component.translatable("gtceu.machine.miner.minez", this.getRecipeLogic().getMineZ())); + widgets.add(IKey.lang(Component.translatable("gtceu.multiblock.large_miner.steam") + .withStyle(ChatFormatting.RED)).asWidget()); + return widgets; } @Override @@ -220,7 +226,6 @@ public boolean drainInput(boolean simulate) { return false; } - @NotNull @Override public List getDataInfo(PortableScannerBehavior.DisplayMode mode) { if (mode == PortableScannerBehavior.DisplayMode.SHOW_ALL || diff --git a/src/main/java/com/gregtechceu/gtceu/common/mui/GTGuis.java b/src/main/java/com/gregtechceu/gtceu/common/mui/GTGuis.java index 3108211f622..e55977acc66 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/mui/GTGuis.java +++ b/src/main/java/com/gregtechceu/gtceu/common/mui/GTGuis.java @@ -20,8 +20,8 @@ public static ModularPanel createPanel(String name, int width, int height) { return ModularPanel.defaultPanel(name, width, height); } - public static ModularPanel createPanel(MetaMachine mte, int width, int height) { - return createPanel(mte.getDefinition().getId().getPath(), width, height); + public static ModularPanel createPanel(MetaMachine machine, int width, int height) { + return createPanel(machine.getDefinition().getId().getPath(), width, height); } public static ModularPanel createPanel(CoverBehavior cover, int width, int height) { diff --git a/src/main/java/com/gregtechceu/gtceu/data/lang/MachineLang.java b/src/main/java/com/gregtechceu/gtceu/data/lang/MachineLang.java index 6415bc9de8d..93348fc679d 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/lang/MachineLang.java +++ b/src/main/java/com/gregtechceu/gtceu/data/lang/MachineLang.java @@ -476,12 +476,9 @@ protected static void init(RegistrateLangProvider provider) { provider.add("gtceu.machine.miner.fluid_usage", "Uses §f%d mB/t §7of §f%s§7, doubled per overclock."); provider.add("gtceu.machine.miner.multi.description", "A multiblock mining machine that covers a large area and produces huge quantity of ore."); - provider.add("gtceu.machine.miner.startx", "sX: %d"); - provider.add("gtceu.machine.miner.starty", "sY: %d"); - provider.add("gtceu.machine.miner.startz", "sZ: %d"); - provider.add("gtceu.machine.miner.minex", "mX: %d"); - provider.add("gtceu.machine.miner.miney", "mY: %d"); - provider.add("gtceu.machine.miner.minez", "mZ: %d"); + provider.add("gtceu.machine.miner.x", "sX: %d, mX: %d"); + provider.add("gtceu.machine.miner.y", "sY: %d, mY: %d"); + provider.add("gtceu.machine.miner.z", "sZ: %d, mZ: %d"); provider.add("gtceu.machine.miner.radius", "Radius: %d"); provider.add("gtceu.machine.miner.chunkradius", "Chunk Radius: %d"); provider.add("gtceu.machine.miner.progress", "Progress: %d/%d"); From 52f3ad438af7d5497da491aea114c3eaed3c9b3f Mon Sep 17 00:00:00 2001 From: Gustavo Date: Fri, 6 Mar 2026 21:06:34 +1100 Subject: [PATCH 2/4] another cherry-pick fail --- .../gregtechceu/gtceu/api/gui/UITemplate.java | 31 ++++++++++++++ .../machine/steam/SteamMinerMachine.java | 42 +++++++++++-------- 2 files changed, 55 insertions(+), 18 deletions(-) create mode 100644 src/main/java/com/gregtechceu/gtceu/api/gui/UITemplate.java diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/UITemplate.java b/src/main/java/com/gregtechceu/gtceu/api/gui/UITemplate.java new file mode 100644 index 00000000000..46bb179cbeb --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/gui/UITemplate.java @@ -0,0 +1,31 @@ +package com.gregtechceu.gtceu.api.gui; + +import com.gregtechceu.gtceu.api.gui.widget.SlotWidget; + +import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; +import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; + +import net.minecraft.world.entity.player.Inventory; + +public class UITemplate { + + public static WidgetGroup bindPlayerInventory(Inventory inventoryPlayer, IGuiTexture imageLocation, int x, int y, + boolean addHotbar) { + WidgetGroup group = new WidgetGroup(x, y, 162, 54 + (addHotbar ? 22 : 0)); + for (int row = 0; row < 3; row++) { + for (int col = 0; col < 9; col++) { + group.addWidget(new SlotWidget(inventoryPlayer, col + (row + 1) * 9, col * 18, row * 18) + .setBackgroundTexture(imageLocation) + .setLocationInfo(true, false)); + } + } + if (addHotbar) { + for (int slot = 0; slot < 9; slot++) { + group.addWidget(new SlotWidget(inventoryPlayer, slot, slot * 18, 58) + .setBackgroundTexture(imageLocation) + .setLocationInfo(true, true)); + } + } + return group; + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamMinerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamMinerMachine.java index 29baa8a7756..b2a9efa2313 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamMinerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamMinerMachine.java @@ -42,7 +42,6 @@ import net.minecraftforge.fluids.capability.IFluidHandler; import lombok.Getter; -import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; @@ -164,18 +163,18 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet SlotGroup group = new SlotGroup("item_inv", rowSize, 0, true); panel.child(new Grid() - .coverChildren() - .top(10) - .alignX(0.75f) - .mapTo(rowSize, rowSize * rowSize, index -> new ItemSlot() - .slot(SyncHandlers.itemSlot(exportItems, index) - .slotGroup(group) - .changeListener((newItem, amount, client, init) -> { - if (amount) { - exportItems.onContentsChanged(); - } - }) - .accessibility(false, true)))) + .coverChildren() + .top(10) + .alignX(0.75f) + .mapTo(rowSize, rowSize * rowSize, index -> new ItemSlot() + .slot(SyncHandlers.itemSlot(exportItems, index) + .slotGroup(group) + .changeListener((newItem, amount, client, init) -> { + if (amount) { + exportItems.onContentsChanged(); + } + }) + .accessibility(false, true)))) .child(new ListWidget<>() .top(10) .alignX(0.25f) @@ -193,14 +192,21 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet List getDisplayTextWidgets() { List widgets = new ArrayList<>(); int workingArea = IMiner.getWorkingArea(getRecipeLogic().getCurrentRadius()); - widgets.add(IKey.lang("gtceu.machine.miner.x", getRecipeLogic().getX(), getRecipeLogic().getMineX()).asWidget()); - widgets.add(IKey.lang("gtceu.machine.miner.y", getRecipeLogic().getY(), getRecipeLogic().getMineY()).asWidget()); - widgets.add(IKey.lang("gtceu.machine.miner.z", getRecipeLogic().getZ(), getRecipeLogic().getMineZ()).asWidget()); + widgets.add( + IKey.lang("gtceu.machine.miner.x", getRecipeLogic().getX(), getRecipeLogic().getMineX()).asWidget()); + widgets.add( + IKey.lang("gtceu.machine.miner.y", getRecipeLogic().getY(), getRecipeLogic().getMineY()).asWidget()); + widgets.add( + IKey.lang("gtceu.machine.miner.z", getRecipeLogic().getZ(), getRecipeLogic().getMineZ()).asWidget()); widgets.add(IKey.lang("gtceu.universal.tooltip.working_area", workingArea, workingArea).asWidget()); if (this.getRecipeLogic().isDone()) - widgets.add(IKey.lang(Component.translatable("gtceu.multiblock.large_miner.done").withStyle(ChatFormatting.GREEN)).asWidget()); + widgets.add(IKey + .lang(Component.translatable("gtceu.multiblock.large_miner.done").withStyle(ChatFormatting.GREEN)) + .asWidget()); else if (this.getRecipeLogic().isWorking()) - widgets.add(IKey.lang(Component.translatable("gtceu.multiblock.large_miner.working").withStyle(ChatFormatting.GOLD)).asWidget()); + widgets.add(IKey + .lang(Component.translatable("gtceu.multiblock.large_miner.working").withStyle(ChatFormatting.GOLD)) + .asWidget()); else if (!this.isWorkingEnabled()) widgets.add(IKey.lang("gtceu.multiblock.work_paused").asWidget()); if (getRecipeLogic().isInventoryFull()) From 1a7dd447ac495808d00f5dab96a5fdad3163cfc4 Mon Sep 17 00:00:00 2001 From: Gustavo Date: Sun, 8 Mar 2026 09:36:48 +1100 Subject: [PATCH 3/4] update ui --- .../resources/assets/gtceu/lang/en_ud.json | 9 +- .../resources/assets/gtceu/lang/en_us.json | 9 +- .../gtceu/common/data/GTMachines.java | 1 + .../common/machine/electric/MinerMachine.java | 14 +-- .../machine/steam/SteamMinerMachine.java | 116 +++++++++--------- 5 files changed, 73 insertions(+), 76 deletions(-) diff --git a/src/generated/resources/assets/gtceu/lang/en_ud.json b/src/generated/resources/assets/gtceu/lang/en_ud.json index c6df7873d85..3189bc754e3 100644 --- a/src/generated/resources/assets/gtceu/lang/en_ud.json +++ b/src/generated/resources/assets/gtceu/lang/en_ud.json @@ -3085,19 +3085,16 @@ "gtceu.machine.me_import_item_hatch.configs.tooltip": "ʞɔoʇs uı sǝdʎʇ ɯǝʇı 9Ɩ sdǝǝʞ", "gtceu.machine.miner.chunkradius": "%d :snıpɐᴚ ʞunɥƆ", "gtceu.machine.miner.fluid_usage": "˙ʞɔoןɔɹǝʌo ɹǝd pǝןqnop 'ㄥ§%sɟ§ ɟoㄥ§ ʇ/ᗺɯ %dɟ§ sǝs∩", - "gtceu.machine.miner.minex": "%d :Xɯ", - "gtceu.machine.miner.miney": "%d :ʎɯ", - "gtceu.machine.miner.minez": "%d :Zɯ", "gtceu.machine.miner.multi.description": "˙ǝɹo ɟo ʎʇıʇuɐnb ǝbnɥ sǝɔnpoɹd puɐ ɐǝɹɐ ǝbɹɐן ɐ sɹǝʌoɔ ʇɐɥʇ ǝuıɥɔɐɯ buıuıɯ ʞɔoןqıʇןnɯ Ɐ", "gtceu.machine.miner.multi.modes": "˙sǝpoW pǝubıןⱯ ʞunɥƆ puɐ ɥɔno⟘ ʞןıS sɐH", "gtceu.machine.miner.multi.production": "˙ㄥ§ɹoʇɐɹǝɔɐWɟ§ ɐ uɐɥʇ ǝɹo pǝɥsnɹɔ ǝɹoɯ ㄥ§xƐɟ§ sǝɔnpoɹԀ", "gtceu.machine.miner.per_block": "ʞɔoןᗺ ɹǝdㄥ§ %dsɟ§ sǝʞɐʇㄥ§", "gtceu.machine.miner.progress": "%d/%d :ssǝɹboɹԀ", "gtceu.machine.miner.radius": "%d :snıpɐᴚ", - "gtceu.machine.miner.startx": "%d :Xs", - "gtceu.machine.miner.starty": "%d :ʎs", - "gtceu.machine.miner.startz": "%d :Zs", "gtceu.machine.miner.tooltip": "ɐǝɹɐㄥ§ %sx%sɟ§ sɐ sʇɹɐʇS ¡ɹǝuıW ǝɥʇ ʍoןǝq sǝɹo sǝuıWㄥ§", + "gtceu.machine.miner.x": "%d :Xɯ '%d :Xs", + "gtceu.machine.miner.y": "%d :ʎɯ '%d :ʎs", + "gtceu.machine.miner.z": "%d :Zɯ '%d :Zs", "gtceu.machine.muffle.off": "pǝןqɐsıᗡ :buıןɟɟnW punoS", "gtceu.machine.muffle.on": "pǝןqɐuƎ :buıןɟɟnW punoS", "gtceu.machine.muffler_hatch.tooltip.0": "sǝuıɥɔɐɯ ɯoɹɟ ǝʇsɐʍ sɹǝʌoɔǝᴚ", diff --git a/src/generated/resources/assets/gtceu/lang/en_us.json b/src/generated/resources/assets/gtceu/lang/en_us.json index bef044ec8ca..c64082ced62 100644 --- a/src/generated/resources/assets/gtceu/lang/en_us.json +++ b/src/generated/resources/assets/gtceu/lang/en_us.json @@ -3085,19 +3085,16 @@ "gtceu.machine.me_import_item_hatch.configs.tooltip": "Keeps 16 item types in stock", "gtceu.machine.miner.chunkradius": "Chunk Radius: %d", "gtceu.machine.miner.fluid_usage": "Uses §f%d mB/t §7of §f%s§7, doubled per overclock.", - "gtceu.machine.miner.minex": "mX: %d", - "gtceu.machine.miner.miney": "mY: %d", - "gtceu.machine.miner.minez": "mZ: %d", "gtceu.machine.miner.multi.description": "A multiblock mining machine that covers a large area and produces huge quantity of ore.", "gtceu.machine.miner.multi.modes": "Has Silk Touch and Chunk Aligned Modes.", "gtceu.machine.miner.multi.production": "Produces §f3x§7 more crushed ore than a §fMacerator§7.", "gtceu.machine.miner.per_block": "§7takes §f%ds §7per Block", "gtceu.machine.miner.progress": "Progress: %d/%d", "gtceu.machine.miner.radius": "Radius: %d", - "gtceu.machine.miner.startx": "sX: %d", - "gtceu.machine.miner.starty": "sY: %d", - "gtceu.machine.miner.startz": "sZ: %d", "gtceu.machine.miner.tooltip": "§7Mines ores below the Miner! Starts as §f%sx%s §7area", + "gtceu.machine.miner.x": "sX: %d, mX: %d", + "gtceu.machine.miner.y": "sY: %d, mY: %d", + "gtceu.machine.miner.z": "sZ: %d, mZ: %d", "gtceu.machine.muffle.off": "Sound Muffling: Disabled", "gtceu.machine.muffle.on": "Sound Muffling: Enabled", "gtceu.machine.muffler_hatch.tooltip.0": "Recovers waste from machines", diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTMachines.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTMachines.java index eea750ec50e..f48b98a9298 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTMachines.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTMachines.java @@ -155,6 +155,7 @@ public class GTMachines { int maxArea = IMiner.getWorkingArea(isHP ? 6 : 4); tooltip.add(Component.translatable("gtceu.universal.tooltip.working_area", maxArea, maxArea)); }) + .themeId((i) -> i > 0 ? GTGuiTheme.STEEL.getId() : GTGuiTheme.BRONZE.getId()) .modelProperty(GTMachineModelProperties.VENT_DIRECTION, RelativeDirection.UP) .workableSteamHullModel(isHP, isHP ? GTCEu.id("block/machines/high_pressure_steam_miner") : diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/MinerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/MinerMachine.java index 4d3f886fcd6..53aa9ac5581 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/MinerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/MinerMachine.java @@ -13,6 +13,7 @@ import com.gregtechceu.gtceu.api.mui.base.drawable.IKey; import com.gregtechceu.gtceu.api.mui.factory.PosGuiData; import com.gregtechceu.gtceu.api.mui.utils.Alignment; +import com.gregtechceu.gtceu.api.mui.utils.Color; import com.gregtechceu.gtceu.api.mui.value.sync.PanelSyncManager; import com.gregtechceu.gtceu.api.mui.widgets.TextWidget; import com.gregtechceu.gtceu.api.mui.widgets.layout.Column; @@ -141,15 +142,12 @@ protected void chargeBattery() { } } - private void addDisplayText(@NotNull List textList) { + private void addDisplayText(List textList) { int workingArea = IMiner.getWorkingArea(getRecipeLogic().getCurrentRadius()); textList.add(recipeLogic.getCustomProgressLine()); - textList.add(Component.translatable("gtceu.machine.miner.startx", getRecipeLogic().getX()).append(" ") - .append(Component.translatable("gtceu.machine.miner.minex", getRecipeLogic().getMineX()))); - textList.add(Component.translatable("gtceu.machine.miner.starty", getRecipeLogic().getY()).append(" ") - .append(Component.translatable("gtceu.machine.miner.miney", getRecipeLogic().getMineY()))); - textList.add(Component.translatable("gtceu.machine.miner.startz", getRecipeLogic().getZ()).append(" ") - .append(Component.translatable("gtceu.machine.miner.minez", getRecipeLogic().getMineZ()))); + textList.add(Component.translatable("gtceu.machine.miner.x", getRecipeLogic().getX(), getRecipeLogic().getMineX())); + textList.add(Component.translatable("gtceu.machine.miner.y", getRecipeLogic().getY(), getRecipeLogic().getMineY())); + textList.add(Component.translatable("gtceu.machine.miner.x", getRecipeLogic().getZ(), getRecipeLogic().getMineZ())); textList.add(Component.translatable("gtceu.universal.tooltip.working_area", workingArea, workingArea)); if (getRecipeLogic().isDone()) textList.add(Component.translatable("gtceu.multiblock.large_miner.done") @@ -242,7 +240,7 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet .map(Component::copy) .reduce((a, b) -> a.append("\n").append(b)) .orElse(Component.empty()); - })))) + })).color(Color.WHITE.main))) .child(GTMuiMachineUtil.createSquareSlotGroupFromInventory(exportItems, "export_inv", syncManager))) .child(new Column() diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamMinerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamMinerMachine.java index b2a9efa2313..4786fffd03f 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamMinerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamMinerMachine.java @@ -12,21 +12,29 @@ import com.gregtechceu.gtceu.api.mui.base.drawable.IKey; import com.gregtechceu.gtceu.api.mui.base.widget.IWidget; import com.gregtechceu.gtceu.api.mui.drawable.Icon; +import com.gregtechceu.gtceu.api.mui.drawable.UITexture; import com.gregtechceu.gtceu.api.mui.factory.PosGuiData; +import com.gregtechceu.gtceu.api.mui.theme.ThemeAPI; import com.gregtechceu.gtceu.api.mui.utils.Alignment; +import com.gregtechceu.gtceu.api.mui.utils.Color; 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.ListWidget; import com.gregtechceu.gtceu.api.mui.widgets.SlotGroupWidget; +import com.gregtechceu.gtceu.api.mui.widgets.TextWidget; +import com.gregtechceu.gtceu.api.mui.widgets.layout.Column; +import com.gregtechceu.gtceu.api.mui.widgets.layout.Flow; 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.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.client.mui.screen.ModularPanel; import com.gregtechceu.gtceu.client.mui.screen.UISettings; +import com.gregtechceu.gtceu.common.data.mui.GTMuiMachineUtil; import com.gregtechceu.gtceu.common.data.mui.GTMuiWidgets; import com.gregtechceu.gtceu.common.item.behavior.PortableScannerBehavior; import com.gregtechceu.gtceu.common.machine.trait.miner.SteamMinerLogic; +import com.gregtechceu.gtceu.common.mui.GTGuiTextures; import com.gregtechceu.gtceu.common.mui.GTGuis; import com.gregtechceu.gtceu.utils.GTTransferUtils; import com.gregtechceu.gtceu.utils.ISubscription; @@ -36,6 +44,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.Style; import net.minecraft.server.TickTask; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.block.Block; @@ -156,69 +165,64 @@ protected void autoOutput() { @Override public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISettings settings) { - ModularPanel panel = GTGuis.createPanel(this, 176, 166); - - panel.child(GTMuiWidgets.createTitleBar(this.getDefinition(), 176)); - int rowSize = 2; - - SlotGroup group = new SlotGroup("item_inv", rowSize, 0, true); - panel.child(new Grid() - .coverChildren() - .top(10) - .alignX(0.75f) - .mapTo(rowSize, rowSize * rowSize, index -> new ItemSlot() - .slot(SyncHandlers.itemSlot(exportItems, index) - .slotGroup(group) - .changeListener((newItem, amount, client, init) -> { - if (amount) { - exportItems.onContentsChanged(); - } - }) - .accessibility(false, true)))) - .child(new ListWidget<>() - .top(10) - .alignX(0.25f) - .coverChildren() - .childSeparator(Icon.EMPTY_2PX) - .crossAxisAlignment(Alignment.CrossAxis.START) - .alignX(Alignment.CenterLeft).children(getDisplayTextWidgets())) - .child(SlotGroupWidget.playerInventory(true) - .left(7) - .bottom(7)); - - return panel; + var theme = getDefinition().getThemeId(); + var backgroundTexture = (UITexture) ThemeAPI.INSTANCE.getTheme(theme).getPanelTheme().getTheme() + .getBackground(); + if (backgroundTexture == null) { + backgroundTexture = GTGuiTextures.BACKGROUND; + } + + return new ModularPanel(getDefinition().getName()) + .width(200) + .child(GTMuiWidgets.createTitleBar(getDefinition(), 200)) + .bindPlayerInventory() + .child(Flow.row() + .coverChildrenHeight() + .margin(5) + .childPadding(5) + .widthRel(1f) + .child(Flow.column() + .crossAxisAlignment(Alignment.CrossAxis.START) + .padding(5) + .background(GTGuiTextures.DISPLAY) + .widthRel(.6f) + .coverChildrenHeight() + .child(new TextWidget<>(IKey.dynamic(() -> { + List text = new ArrayList<>(); + addDisplayText(text); + return text.stream() + .map(Component::copy) + .reduce((a, b) -> a.append("\n").append(b)) + .orElse(Component.empty()); + })).color(Color.WHITE.main))) + .child(GTMuiMachineUtil.createSquareSlotGroupFromInventory(exportItems, "export_inv", + syncManager).alignX(0.875f).alignY(0.5f))); } - List getDisplayTextWidgets() { - List widgets = new ArrayList<>(); + private void addDisplayText(List textList) { int workingArea = IMiner.getWorkingArea(getRecipeLogic().getCurrentRadius()); - widgets.add( - IKey.lang("gtceu.machine.miner.x", getRecipeLogic().getX(), getRecipeLogic().getMineX()).asWidget()); - widgets.add( - IKey.lang("gtceu.machine.miner.y", getRecipeLogic().getY(), getRecipeLogic().getMineY()).asWidget()); - widgets.add( - IKey.lang("gtceu.machine.miner.z", getRecipeLogic().getZ(), getRecipeLogic().getMineZ()).asWidget()); - widgets.add(IKey.lang("gtceu.universal.tooltip.working_area", workingArea, workingArea).asWidget()); - if (this.getRecipeLogic().isDone()) - widgets.add(IKey - .lang(Component.translatable("gtceu.multiblock.large_miner.done").withStyle(ChatFormatting.GREEN)) - .asWidget()); - else if (this.getRecipeLogic().isWorking()) - widgets.add(IKey - .lang(Component.translatable("gtceu.multiblock.large_miner.working").withStyle(ChatFormatting.GOLD)) - .asWidget()); + textList.add(recipeLogic.getCustomProgressLine()); + textList.add(Component.translatable("gtceu.machine.miner.x", getRecipeLogic().getX(), getRecipeLogic().getMineX())); + textList.add(Component.translatable("gtceu.machine.miner.y", getRecipeLogic().getY(), getRecipeLogic().getMineY())); + textList.add(Component.translatable("gtceu.machine.miner.x", getRecipeLogic().getZ(), getRecipeLogic().getMineZ())); + textList.add(Component.translatable("gtceu.universal.tooltip.working_area", workingArea, workingArea)); + if (getRecipeLogic().isDone()) + textList.add(Component.translatable("gtceu.multiblock.large_miner.done") + .setStyle(Style.EMPTY.withColor(ChatFormatting.GREEN))); + else if (getRecipeLogic().isWorking()) + textList.add(Component.translatable("gtceu.multiblock.large_miner.working") + .setStyle(Style.EMPTY.withColor(ChatFormatting.GOLD))); else if (!this.isWorkingEnabled()) - widgets.add(IKey.lang("gtceu.multiblock.work_paused").asWidget()); + textList.add(Component.translatable("gtceu.multiblock.work_paused")); if (getRecipeLogic().isInventoryFull()) - widgets.add(IKey.lang(Component.translatable("gtceu.multiblock.large_miner.invfull") - .withStyle(ChatFormatting.RED)).asWidget()); + textList.add(Component.translatable("gtceu.multiblock.large_miner.invfull") + .setStyle(Style.EMPTY.withColor(ChatFormatting.RED))); if (exhaustVentTrait.isVentingBlocked()) - widgets.add(IKey.lang(Component.translatable("gtceu.multiblock.large_miner.vent") - .withStyle(ChatFormatting.RED)).asWidget()); + textList.add(Component.translatable("gtceu.multiblock.large_miner.vent") + .withStyle(ChatFormatting.RED)); else if (!drainInput(true)) - widgets.add(IKey.lang(Component.translatable("gtceu.multiblock.large_miner.steam") - .withStyle(ChatFormatting.RED)).asWidget()); - return widgets; + textList.add(Component.translatable("gtceu.multiblock.large_miner.steam") + .withStyle(ChatFormatting.RED)); } @Override From d2003265c8271bfc03f67fc5edbee425a2be216d Mon Sep 17 00:00:00 2001 From: Gustavo Date: Sun, 8 Mar 2026 21:36:35 +1100 Subject: [PATCH 4/4] spotless --- .../common/machine/electric/MinerMachine.java | 9 ++++++--- .../machine/steam/SteamMinerMachine.java | 19 ++++++------------- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/MinerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/MinerMachine.java index 53aa9ac5581..4440ed17fc4 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/MinerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/MinerMachine.java @@ -145,9 +145,12 @@ protected void chargeBattery() { private void addDisplayText(List textList) { int workingArea = IMiner.getWorkingArea(getRecipeLogic().getCurrentRadius()); textList.add(recipeLogic.getCustomProgressLine()); - textList.add(Component.translatable("gtceu.machine.miner.x", getRecipeLogic().getX(), getRecipeLogic().getMineX())); - textList.add(Component.translatable("gtceu.machine.miner.y", getRecipeLogic().getY(), getRecipeLogic().getMineY())); - textList.add(Component.translatable("gtceu.machine.miner.x", getRecipeLogic().getZ(), getRecipeLogic().getMineZ())); + textList.add( + Component.translatable("gtceu.machine.miner.x", getRecipeLogic().getX(), getRecipeLogic().getMineX())); + textList.add( + Component.translatable("gtceu.machine.miner.y", getRecipeLogic().getY(), getRecipeLogic().getMineY())); + textList.add( + Component.translatable("gtceu.machine.miner.x", getRecipeLogic().getZ(), getRecipeLogic().getMineZ())); textList.add(Component.translatable("gtceu.universal.tooltip.working_area", workingArea, workingArea)); if (getRecipeLogic().isDone()) textList.add(Component.translatable("gtceu.multiblock.large_miner.done") diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamMinerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamMinerMachine.java index 4786fffd03f..29f075a9456 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamMinerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamMinerMachine.java @@ -10,23 +10,14 @@ import com.gregtechceu.gtceu.api.machine.trait.ExhaustVentMachineTrait; import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; import com.gregtechceu.gtceu.api.mui.base.drawable.IKey; -import com.gregtechceu.gtceu.api.mui.base.widget.IWidget; -import com.gregtechceu.gtceu.api.mui.drawable.Icon; import com.gregtechceu.gtceu.api.mui.drawable.UITexture; import com.gregtechceu.gtceu.api.mui.factory.PosGuiData; import com.gregtechceu.gtceu.api.mui.theme.ThemeAPI; import com.gregtechceu.gtceu.api.mui.utils.Alignment; import com.gregtechceu.gtceu.api.mui.utils.Color; 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.ListWidget; -import com.gregtechceu.gtceu.api.mui.widgets.SlotGroupWidget; import com.gregtechceu.gtceu.api.mui.widgets.TextWidget; -import com.gregtechceu.gtceu.api.mui.widgets.layout.Column; import com.gregtechceu.gtceu.api.mui.widgets.layout.Flow; -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.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.client.mui.screen.ModularPanel; import com.gregtechceu.gtceu.client.mui.screen.UISettings; @@ -35,7 +26,6 @@ import com.gregtechceu.gtceu.common.item.behavior.PortableScannerBehavior; import com.gregtechceu.gtceu.common.machine.trait.miner.SteamMinerLogic; import com.gregtechceu.gtceu.common.mui.GTGuiTextures; -import com.gregtechceu.gtceu.common.mui.GTGuis; import com.gregtechceu.gtceu.utils.GTTransferUtils; import com.gregtechceu.gtceu.utils.ISubscription; @@ -202,9 +192,12 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet private void addDisplayText(List textList) { int workingArea = IMiner.getWorkingArea(getRecipeLogic().getCurrentRadius()); textList.add(recipeLogic.getCustomProgressLine()); - textList.add(Component.translatable("gtceu.machine.miner.x", getRecipeLogic().getX(), getRecipeLogic().getMineX())); - textList.add(Component.translatable("gtceu.machine.miner.y", getRecipeLogic().getY(), getRecipeLogic().getMineY())); - textList.add(Component.translatable("gtceu.machine.miner.x", getRecipeLogic().getZ(), getRecipeLogic().getMineZ())); + textList.add( + Component.translatable("gtceu.machine.miner.x", getRecipeLogic().getX(), getRecipeLogic().getMineX())); + textList.add( + Component.translatable("gtceu.machine.miner.y", getRecipeLogic().getY(), getRecipeLogic().getMineY())); + textList.add( + Component.translatable("gtceu.machine.miner.x", getRecipeLogic().getZ(), getRecipeLogic().getMineZ())); textList.add(Component.translatable("gtceu.universal.tooltip.working_area", workingArea, workingArea)); if (getRecipeLogic().isDone()) textList.add(Component.translatable("gtceu.multiblock.large_miner.done")