diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/MultiblockTankMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/MultiblockTankMachine.java index f7229468dd..996935ce85 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/MultiblockTankMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/MultiblockTankMachine.java @@ -2,23 +2,33 @@ import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.fluids.PropertyFluidFilter; -import com.gregtechceu.gtceu.api.gui.GuiTextures; -import com.gregtechceu.gtceu.api.gui.widget.TankWidget; import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; -import com.gregtechceu.gtceu.api.machine.feature.IFancyUIMachine; +import com.gregtechceu.gtceu.api.machine.feature.IMuiMachine; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank; +import com.gregtechceu.gtceu.api.mui.base.drawable.IKey; +import com.gregtechceu.gtceu.api.mui.base.widget.IWidget; +import com.gregtechceu.gtceu.api.mui.factory.PosGuiData; +import com.gregtechceu.gtceu.api.mui.utils.Alignment; +import com.gregtechceu.gtceu.api.mui.value.sync.IntSyncValue; +import com.gregtechceu.gtceu.api.mui.value.sync.PanelSyncManager; +import com.gregtechceu.gtceu.api.mui.value.sync.SyncHandlers; +import com.gregtechceu.gtceu.api.mui.widget.ParentWidget; +import com.gregtechceu.gtceu.api.mui.widgets.SlotGroupWidget; +import com.gregtechceu.gtceu.api.mui.widgets.layout.Flow; +import com.gregtechceu.gtceu.api.mui.widgets.slot.FluidSlot; import com.gregtechceu.gtceu.api.transfer.fluid.IFluidHandlerModifiable; +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.mui.GTGuiTextures; import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; - -import com.lowdragmc.lowdraglib.gui.widget.ImageWidget; -import com.lowdragmc.lowdraglib.gui.widget.LabelWidget; -import com.lowdragmc.lowdraglib.gui.widget.Widget; -import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; +import com.gregtechceu.gtceu.utils.FormattingUtil; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.network.chat.Component; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; @@ -34,7 +44,7 @@ @MethodsReturnNonnullByDefault @ParametersAreNonnullByDefault -public class MultiblockTankMachine extends MultiblockControllerMachine implements IFancyUIMachine { +public class MultiblockTankMachine extends MultiblockControllerMachine implements IMuiMachine { @SaveField @Getter @@ -82,20 +92,40 @@ public IFluidHandlerModifiable getFluidHandlerCap(@Nullable Direction side, bool ///////////////////////////////////// @Override - public Widget createUIWidget() { - var group = new WidgetGroup(0, 0, 90, 63); - group.setBackground(GuiTextures.BACKGROUND_INVERSE); - - group.addWidget(new ImageWidget(4, 4, 82, 55, GuiTextures.DISPLAY)); - group.addWidget(new LabelWidget(8, 8, "gtceu.gui.fluid_amount")); - group.addWidget(new LabelWidget(8, 18, this::getFluidLabel).setTextColor(-1).setDropShadow(true)); - group.addWidget(new TankWidget(tank.getStorages()[0], 68, 23, true, true) - .setBackground(GuiTextures.FLUID_SLOT)); - - return group; + public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISettings settings) { + IntSyncValue bucketSyncer = new IntSyncValue(() -> tank.getFluidInTank(0).getAmount(), (ignored) -> {}); + syncManager.syncValue("bucket_amount", bucketSyncer); + + return new ModularPanel(this.getDefinition().getName()) + .child( + // Top half of the screen + new ParentWidget<>() + .widthRel(1) + .height(20 + 60) + .child(new ParentWidget<>() + .background(GTGuiTextures.DISPLAY) + .size(90, 63) + .align(Alignment.CENTER) + .child(IKey.lang("gtceu.gui.fluid_amount").asWidget() + .color(0xffffff) + .margin(8, 0, 8, 0)) + .child(IKey.dynamic( + () -> Component.literal( + FormattingUtil.formatBuckets(bucketSyncer.getIntValue()))) + .asWidget() + .color(0xffffff) + .margin(8, 0, 20, 0)) + .child(Flow.column() + .margin(68, 0, 23, 0) + .coverChildren() + .child(createFluidSlot(syncManager))))) + .child(GTMuiWidgets.createTitleBar(getDefinition(), 176, GTGuiTextures.BACKGROUND)) + .child(SlotGroupWidget.playerInventory(false).left(7).bottom(7)); } - private String getFluidLabel() { - return String.valueOf(tank.getFluidInTank(0).getAmount()); + private IWidget createFluidSlot(PanelSyncManager syncManager) { + syncManager.syncValue("fluid_slot", + SyncHandlers.fluidSlot(tank.getStorages()[0]).controlsAmount(false)); + return new FluidSlot().syncHandler("fluid_slot", 0).background(GTGuiTextures.FLUID_SLOT); } }