From 060f6c6056f88a021feffced6e51ca68df269c96 Mon Sep 17 00:00:00 2001 From: YoungOnion <39562198+YoungOnionMC@users.noreply.github.com> Date: Tue, 30 Jun 2026 02:40:12 -0600 Subject: [PATCH 1/2] ui for primitive pump :) --- .../common/data/machines/GTMultiMachines.java | 1 + .../primitive/PrimitivePumpMachine.java | 71 ++++++++++++++++++- 2 files changed, 71 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMultiMachines.java b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMultiMachines.java index f5831827e11..5136d1410d3 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMultiMachines.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMultiMachines.java @@ -408,6 +408,7 @@ public class GTMultiMachines { .multiblock("primitive_pump", PrimitivePumpMachine::new) .rotationState(RotationState.NON_Y_AXIS) .appearanceBlock(CASING_PUMP_DECK) + .themeId(GTGuiTheme.PRIMITIVE.getId()) .pattern(definition -> MultiblockPatternBuilder.start(FRONT, UP, RIGHT) .slice("XXXX", "##F#", "##F#") .slice("XXHX", "F##F", "FFFF") diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitivePumpMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitivePumpMachine.java index cea6edc03c7..29f7d3264fb 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitivePumpMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitivePumpMachine.java @@ -4,28 +4,49 @@ import com.gregtechceu.gtceu.api.capability.recipe.FluidRecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.machine.TickableSubscription; +import com.gregtechceu.gtceu.api.machine.feature.IMuiMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiPart; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank; import com.gregtechceu.gtceu.api.recipe.ingredient.FluidIngredient; +import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.data.GTMaterials; +import com.gregtechceu.gtceu.common.mui.GTMultiblockTextUtil; +import com.gregtechceu.gtceu.utils.FormattingUtil; import com.gregtechceu.gtceu.utils.GTUtil; +import net.minecraft.ChatFormatting; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.world.level.biome.Biome.Precipitation; import net.minecraftforge.fluids.FluidType; +import brachy.modularui.api.drawable.Text; +import brachy.modularui.api.widget.IWidget; +import brachy.modularui.drawable.GuiTextures; +import brachy.modularui.drawable.Icon; +import brachy.modularui.factory.PosGuiData; +import brachy.modularui.screen.UISettings; +import brachy.modularui.utils.Alignment; +import brachy.modularui.value.sync.BooleanSyncValue; +import brachy.modularui.value.sync.IntSyncValue; +import brachy.modularui.value.sync.PanelSyncManager; +import brachy.modularui.widget.ParentWidget; +import brachy.modularui.widget.Widget; +import brachy.modularui.widgets.ListWidget; import org.jetbrains.annotations.NotNull; +import java.util.ArrayList; import java.util.List; import javax.annotation.ParametersAreNonnullByDefault; @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault -public class PrimitivePumpMachine extends MultiblockControllerMachine { +public class PrimitivePumpMachine extends MultiblockControllerMachine implements IMuiMachine { + @SyncToClient private int biomeModifier = 0; + @SyncToClient private int hatchModifier = 0; private NotifiableFluidTank fluidTank; private TickableSubscription produceWaterSubscription; @@ -57,6 +78,7 @@ private void initializeTank() { } else { hatchModifier = 4; } + getSyncDataHolder().markClientSyncFieldDirty("hatchModifier"); return; } } @@ -91,6 +113,7 @@ private void produceWater() { if (getOffsetTimer() % 20 == 0 && isFormed()) { if (biomeModifier == 0) { biomeModifier = GTUtil.getPumpBiomeModifier(getLevel().getBiome(getBlockPos())); + getSyncDataHolder().markClientSyncFieldDirty("biomeModifier"); } else if (biomeModifier > 0) { if (fluidTank == null) initializeTank(); if (fluidTank != null) { @@ -117,4 +140,50 @@ public int getFluidProduction() { } return value; } + + public Widget getMainTextPanel(PanelSyncManager syncManager, int width, int height) { + var parentWidget = new ParentWidget<>(); + var listWidget = new ListWidget<>(); + listWidget + .width(width - 6) + .height(height - 6) + .childSeparator(Icon.EMPTY_2PX) + .crossAxisAlignment(Alignment.CrossAxis.START) + .collapseDisabledChildren() + .posRel(Alignment.CenterLeft) + .left(3) + .top(3); + parentWidget.size(width, height) + .background(GuiTextures.DISPLAY); + + listWidget.children(getWidgetsForDisplay(syncManager)); + parentWidget.child(listWidget.left(3).top(3)); + return parentWidget; + } + + @Override + public void buildMainUI(ParentWidget mainWidget, PosGuiData guiData, PanelSyncManager syncManager, + UISettings settings) { + mainWidget.child(getMainTextPanel(syncManager, 177, 77).margin(4, 2)); + } + + @Override + public List getWidgetsForDisplay(PanelSyncManager syncManager) { + List widgets = new ArrayList<>(); + + BooleanSyncValue isFormed = syncManager.getOrCreateSyncHandler("isFormed", BooleanSyncValue.class, + () -> new BooleanSyncValue(this::isFormed)); + + IntSyncValue production = syncManager.getOrCreateSyncHandler("production", IntSyncValue.class, + () -> new IntSyncValue(this::getFluidProduction)); + + widgets.add(GTMultiblockTextUtil.addUnformedWarning(this, syncManager)); + widgets.add( + Text.lang("gtceu.top.primitive_pump_production", FormattingUtil.formatNumbers(production.getIntValue())) + .withStyle(ChatFormatting.WHITE) + .asWidget() + .setEnabledIf((widget) -> isFormed.getBoolValue())); + + return widgets; + } } From 1b4e76c95d2cd10f709bd9c1737617bffb43e8c5 Mon Sep 17 00:00:00 2001 From: jurrejelle Date: Sat, 4 Jul 2026 08:10:01 +0200 Subject: [PATCH 2/2] Switch from GTM sync to MUI sync (:angy:) --- .../primitive/PrimitivePumpMachine.java | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitivePumpMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitivePumpMachine.java index 29f7d3264fb..3b43fa4048c 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitivePumpMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitivePumpMachine.java @@ -9,7 +9,6 @@ import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank; import com.gregtechceu.gtceu.api.recipe.ingredient.FluidIngredient; -import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.data.GTMaterials; import com.gregtechceu.gtceu.common.mui.GTMultiblockTextUtil; import com.gregtechceu.gtceu.utils.FormattingUtil; @@ -44,9 +43,7 @@ @MethodsReturnNonnullByDefault public class PrimitivePumpMachine extends MultiblockControllerMachine implements IMuiMachine { - @SyncToClient private int biomeModifier = 0; - @SyncToClient private int hatchModifier = 0; private NotifiableFluidTank fluidTank; private TickableSubscription produceWaterSubscription; @@ -78,7 +75,6 @@ private void initializeTank() { } else { hatchModifier = 4; } - getSyncDataHolder().markClientSyncFieldDirty("hatchModifier"); return; } } @@ -113,7 +109,6 @@ private void produceWater() { if (getOffsetTimer() % 20 == 0 && isFormed()) { if (biomeModifier == 0) { biomeModifier = GTUtil.getPumpBiomeModifier(getLevel().getBiome(getBlockPos())); - getSyncDataHolder().markClientSyncFieldDirty("biomeModifier"); } else if (biomeModifier > 0) { if (fluidTank == null) initializeTank(); if (fluidTank != null) { @@ -173,16 +168,20 @@ public List getWidgetsForDisplay(PanelSyncManager syncManager) { BooleanSyncValue isFormed = syncManager.getOrCreateSyncHandler("isFormed", BooleanSyncValue.class, () -> new BooleanSyncValue(this::isFormed)); - - IntSyncValue production = syncManager.getOrCreateSyncHandler("production", IntSyncValue.class, - () -> new IntSyncValue(this::getFluidProduction)); + // Sync these values for use in getFluidProduction() + syncManager.getOrCreateSyncHandler("biomeModifier", IntSyncValue.class, + () -> new IntSyncValue(() -> this.biomeModifier, value -> this.biomeModifier = value)); + syncManager.getOrCreateSyncHandler("hatchModifier", IntSyncValue.class, + () -> new IntSyncValue(() -> this.hatchModifier, value -> this.hatchModifier = value)); widgets.add(GTMultiblockTextUtil.addUnformedWarning(this, syncManager)); - widgets.add( - Text.lang("gtceu.top.primitive_pump_production", FormattingUtil.formatNumbers(production.getIntValue())) - .withStyle(ChatFormatting.WHITE) - .asWidget() - .setEnabledIf((widget) -> isFormed.getBoolValue())); + widgets.add(Text + .dynamic(() -> Text + .lang("gtceu.top.primitive_pump_production", + FormattingUtil.formatNumbers(this.getFluidProduction())) + .withStyle(ChatFormatting.WHITE)) + .asWidget() + .setEnabledIf((widget) -> isFormed.getBoolValue())); return widgets; }