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 a855a7a5f2c..11f369732e0 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 @@ -334,6 +334,7 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet .child(new FluidSlot() .syncHandler(new FluidSlotSyncHandler(waterTank.getStorages()[0])) .size(14, 54) + .alwaysShowFull(true) .displayAmount(false)) .child(new FluidSlot() .syncHandler(new FluidSlotSyncHandler(steamTank.getStorages()[0]) diff --git a/src/main/java/com/gregtechceu/gtceu/api/mui/drawable/InteractableIcon.java b/src/main/java/com/gregtechceu/gtceu/api/mui/drawable/InteractableIcon.java index bda49a42b6f..b3d780e9a3a 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/mui/drawable/InteractableIcon.java +++ b/src/main/java/com/gregtechceu/gtceu/api/mui/drawable/InteractableIcon.java @@ -25,15 +25,17 @@ public class InteractableIcon extends DelegateIcon implements Interactable { private IGuiAction.KeyReleased onKeyReleased; @Setter private IGuiAction.KeyPressed onKeyTapped; + @Setter + public boolean playClickSound = true; public InteractableIcon(IIcon icon) { super(icon); } public void playClickSound() { - // if (this.playClickSound) { - Interactable.playButtonClickSound(); - // } + if (this.playClickSound) { + Interactable.playButtonClickSound(); + } } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/api/mui/value/sync/FluidSlotSyncHandler.java b/src/main/java/com/gregtechceu/gtceu/api/mui/value/sync/FluidSlotSyncHandler.java index 121cfa49c10..5ca2d972872 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/mui/value/sync/FluidSlotSyncHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/api/mui/value/sync/FluidSlotSyncHandler.java @@ -15,6 +15,7 @@ import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandlerItem; +import com.mojang.blaze3d.platform.InputConstants; import lombok.Getter; import lombok.Setter; import lombok.experimental.Accessors; @@ -137,7 +138,7 @@ private void tryClickContainer(MouseData mouseData) { return; } int maxAttempts = mouseData.shift() ? currentStack.getCount() : 1; - if (mouseData.mouseButton() == 0 && this.canFillSlot) { + if (mouseData.mouseButton() == InputConstants.MOUSE_BUTTON_RIGHT && this.canFillSlot) { boolean performedTransfer = false; for (int i = 0; i < maxAttempts; i++) { FluidActionResult result = FluidUtil.tryEmptyContainer(currentStack, this.fluidHandler, @@ -169,7 +170,8 @@ private void tryClickContainer(MouseData mouseData) { return; } FluidStack currentFluid = this.fluidTank.getFluid(); - if (mouseData.mouseButton() == 1 && this.canDrainSlot && !currentFluid.isEmpty()) { + if (mouseData.mouseButton() == InputConstants.MOUSE_BUTTON_LEFT && this.canDrainSlot && + !currentFluid.isEmpty()) { boolean performedTransfer = false; for (int i = 0; i < maxAttempts; i++) { FluidActionResult result = FluidUtil.tryFillContainer(currentStack, this.fluidHandler, @@ -180,7 +182,7 @@ private void tryClickContainer(MouseData mouseData) { break; // do not continue if we can't add resulting container into inventory } - remainingStack = FluidUtil.tryFillContainer(currentStack, this.fluidHandler, Integer.MAX_VALUE, null, + remainingStack = FluidUtil.tryFillContainer(currentStack, this.fluidHandler, Integer.MAX_VALUE, player, true).result; if (currentStack.getCount() == 1) { currentStack = remainingStack; 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 bee4dad3efa..865bd461615 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTMachines.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTMachines.java @@ -892,6 +892,7 @@ public class GTMachines { .abilities(PartAbility.STEAM_IMPORT_ITEMS) .modelProperty(IS_FORMED, false) .colorOverlaySteamHullModel(OVERLAY_ITEM_HATCH_INPUT, "overlay_pipe", "overlay_pipe_in_emissive") + .themeId(GTGuiTheme.BRONZE.getId()) .langValue("Steam Input Bus") .tooltips(Component.translatable("gtceu.machine.item_bus.import.tooltip"), Component.translatable("gtceu.machine.steam_bus.tooltip"), @@ -905,6 +906,7 @@ public class GTMachines { .abilities(PartAbility.STEAM_EXPORT_ITEMS) .modelProperty(IS_FORMED, false) .colorOverlaySteamHullModel(OVERLAY_ITEM_HATCH_OUTPUT, "overlay_pipe", "overlay_pipe_out_emissive") + .themeId(GTGuiTheme.BRONZE.getId()) .langValue("Steam Output Bus") .tooltips(Component.translatable("gtceu.machine.item_bus.export.tooltip"), Component.translatable("gtceu.machine.steam_bus.tooltip"), @@ -918,6 +920,7 @@ public class GTMachines { .abilities(PartAbility.STEAM) .modelProperty(IS_FORMED, false) .overlaySteamHullModel("steam_hatch") + .themeId(GTGuiTheme.BRONZE.getId()) .tooltips(Component.translatable("gtceu.universal.tooltip.fluid_storage_capacity", SteamHatchPartMachine.INITIAL_TANK_CAPACITY), Component.translatable("gtceu.machine.steam.steam_hatch.tooltip")) @@ -929,6 +932,7 @@ public class GTMachines { .modelProperty(IS_FORMED, false) .tooltips(Component.translatable("gtceu.part_sharing.disabled")) .simpleModel(GTCEu.id("block/machine/part/coke_oven_hatch")) + .themeId(GTGuiTheme.PRIMITIVE.getId()) .register(); public static final MachineDefinition PUMP_HATCH = REGISTRATE.machine("pump_hatch", PumpHatchPartMachine::new) @@ -936,6 +940,7 @@ public class GTMachines { .abilities(PartAbility.PUMP_FLUID_HATCH) .modelProperty(IS_FORMED, false) .model(createBasicReplaceableTextureMachineModel(GTCEu.id("block/machine/part/pump_hatch"))) + .themeId(GTGuiTheme.PRIMITIVE.getId()) .register(); public static final MachineDefinition MAINTENANCE_HATCH = REGISTRATE diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMuiWidgets.java b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMuiWidgets.java index ed77e6b9e76..35eaa52b3b6 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMuiWidgets.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMuiWidgets.java @@ -191,7 +191,8 @@ private static IntSyncValue createCircuitSlotSyncValue(Consumer circu return IntCircuitBehaviour.getCircuitConfiguration(circuitGetter.get()); }, (v) -> circuitSetter.accept(v < 0 ? ItemStack.EMPTY : - IntCircuitBehaviour.stack(v, circuitGetter.get().getCount()))); + IntCircuitBehaviour.stack(v, + circuitGetter.get().isEmpty() ? 1 : circuitGetter.get().getCount()))); } public static ModularPanel createCircuitSlotPanel(IntSyncValue circuitSyncValue, PanelSyncManager syncManager) { diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DataAccessHatchMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DataAccessHatchMachine.java index 65b7136fdb8..434faf1823c 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DataAccessHatchMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DataAccessHatchMachine.java @@ -22,9 +22,11 @@ import com.gregtechceu.gtceu.client.mui.screen.ModularPanel; import com.gregtechceu.gtceu.client.mui.screen.UISettings; import com.gregtechceu.gtceu.common.data.GTRecipeTypes; +import com.gregtechceu.gtceu.common.data.mui.GTMuiMachineUtil; import com.gregtechceu.gtceu.common.data.mui.GTMuiWidgets; import com.gregtechceu.gtceu.common.item.PortableScannerBehavior; import com.gregtechceu.gtceu.common.machine.multiblock.electric.research.DataBankMachine; +import com.gregtechceu.gtceu.common.mui.GTGuiTextures; import com.gregtechceu.gtceu.common.recipe.condition.ResearchCondition; import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; import com.gregtechceu.gtceu.utils.ItemStackHashStrategy; @@ -50,8 +52,6 @@ import javax.annotation.ParametersAreNonnullByDefault; -import static com.gregtechceu.gtceu.common.data.mui.GTMuiMachineUtil.createSquareSlotGroupFromInventory; - @MethodsReturnNonnullByDefault @ParametersAreNonnullByDefault public class DataAccessHatchMachine extends TieredPartMachine @@ -98,6 +98,10 @@ public ItemStack insertItem(int slot, @NotNull ItemStack stack, boolean simulate @NotNull UISettings settings) { int size = (int) Math.sqrt(getInventorySize()); + var grid = GTMuiMachineUtil.createSlotGroupFromInventory(importItems, "data_inventory", getInventorySize(), 'I', + i -> i.background(GTGuiTextures.SLOT, GTGuiTextures.DATA_ORB_OVERLAY), syncManager, + GTMuiMachineUtil.createSquareMatrix(importItems.getSlots(), 'I')); + return new ModularPanel(this.getDefinition().getName()) .size(176, 100 + (18 * size)) .child(GTMuiWidgets.createTitleBar(this.getDefinition(), 176)) @@ -108,7 +112,7 @@ public ItemStack insertItem(int slot, @NotNull ItemStack stack, boolean simulate .crossAxisAlignment(Alignment.CrossAxis.CENTER) .align(Alignment.CENTER) .coverChildren() - .child(createSquareSlotGroupFromInventory(importItems, "data_inventory", syncManager) + .child(grid .marginLeft(30) .marginRight(30) .verticalCenter()))) diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/FluidHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/FluidHatchPartMachine.java index e8dc934d9bc..dd35880cdd5 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/FluidHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/FluidHatchPartMachine.java @@ -12,7 +12,9 @@ import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank; import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; import com.gregtechceu.gtceu.api.mui.base.drawable.IKey; +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.value.sync.BooleanSyncValue; import com.gregtechceu.gtceu.api.mui.value.sync.FluidSlotSyncHandler; @@ -22,6 +24,7 @@ import com.gregtechceu.gtceu.api.mui.widgets.ToggleButton; 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.Row; import com.gregtechceu.gtceu.api.mui.widgets.slot.FluidSlot; import com.gregtechceu.gtceu.client.mui.screen.ModularPanel; import com.gregtechceu.gtceu.client.mui.screen.UISettings; @@ -30,9 +33,11 @@ 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.config.ConfigHolder; import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; +import com.gregtechceu.gtceu.utils.FormattingUtil; import com.gregtechceu.gtceu.utils.GTTransferUtils; import com.gregtechceu.gtceu.utils.ISubscription; @@ -270,26 +275,13 @@ public boolean swapIO() { } private Component getFluidNameText() { - Component translation; - if (!this.tank.getFluidInTank(0).isEmpty()) { - translation = this.tank.getFluidInTank(0).getDisplayName(); - } else { - translation = this.tank.getLockedFluid().getFluid().getDisplayName(); - } - return translation; + return this.tank.getFluidInTank(0).isEmpty() ? + Component.translatable("gtceu.fluid.empty") : + this.tank.getFluidInTank(0).getDisplayName(); } - private String getFluidAmountText() { - String fluidAmount = ""; - if (!tank.getFluidInTank(0).isEmpty()) { - fluidAmount = getFormattedFluidAmount(tank.getFluidInTank(0)); - } else { - // Display Zero to show information about the locked fluid - if (!this.tank.getLockedFluid().getFluid().isEmpty()) { - fluidAmount = "0"; - } - } - return fluidAmount; + private Component getFluidAmountText() { + return Component.literal(FormattingUtil.formatBuckets(this.tank.getFluidInTank(0).getAmount())); } private Component getFluidText() { @@ -302,52 +294,79 @@ public String getFormattedFluidAmount(FluidStack fluidStack) { @Override public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISettings settings) { - return new ModularPanel(getDefinition().getName()) - .child(GTMuiWidgets.createTitleBar(getDefinition(), 174)) - .bindPlayerInventory() + int width = 176; + int height = Math.max(168, (int) (18 * Math.sqrt(slots)) + 78 + 19); + var panel = GTGuis.createPanel(this, width, height); + + // magic numbers are me favorite :3 + int topOffset = slots == 1 ? 10 : slots == 9 ? 16 : 20; + + var theme = this.getDefinition().getThemeId(); + var backgroundTexture = (UITexture) ThemeAPI.INSTANCE.getTheme(theme).getPanelTheme().getTheme() + .getBackground(); + if (backgroundTexture == null) { + backgroundTexture = GTGuiTextures.BACKGROUND; + } + + panel.child(GTMuiWidgets.createTitleBar(getDefinition(), 174)) + .child(SlotGroupWidget.playerInventory(true) + .left(7) + .bottom(7)) .child((slots == 1 ? createSingleSlotUI(syncManager) : createMultiSlotUI(syncManager)) - .marginBottom(91) - .center()) + .top(topOffset) + .horizontalCenter()) .child(new Column() .coverChildren() - .leftRel(1.0f) + .rightRel(1.0f) .reverseLayout(true) .bottom(16) - .padding(0, 8, 4, 4) + .padding(8, 0, 4, 4) .childPadding(2) + .background(backgroundTexture.getSubArea(0.0f, 0f, 0.75f, 1.0f)) .excludeAreaInXei() - .background(GTGuiTextures.BACKGROUND.getSubArea(0.25f, 0f, 1.0f, 1.0f)) .child(GTMuiWidgets.createPowerButton(this::isWorkingEnabled, this::setWorkingEnabled, - syncManager))); + syncManager)) + .childIf(this.isCircuitSlotEnabled(), + () -> GTMuiWidgets.createCircuitSlotPanel(this, panel, syncManager))); + + return panel; } protected Flow createSingleSlotUI(PanelSyncManager syncManager) { - return Flow.row() - .coverChildrenHeight() + BooleanSyncValue locked = new BooleanSyncValue(this.tank::isLocked, this.tank::setLocked); + syncManager.syncValue("locked", locked); + return new Column() .widthRel(.6f) - .background(GTGuiTextures.DISPLAY) - .padding(5) - .childPadding(5) - .crossAxisAlignment(Alignment.CrossAxis.START) - .child(new TextWidget<>(IKey.dynamic(this::getFluidText))) - .child(Flow.column() - .alignX(1f) + .height(60) + .mainAxisAlignment(Alignment.MainAxis.CENTER) + .childPadding(4) + .child(new TextWidget<>(IKey.dynamic(this::getFluidNameText)) + .horizontalCenter()) + .child(new TextWidget<>(IKey.dynamic(this::getFluidAmountText)) + .horizontalCenter()) + .child(new Row() .childPadding(2) .coverChildren() - .childIf(io.support(IO.OUT), new FluidSlot() - .syncHandler(new FluidSlotSyncHandler(tank.getLockedFluid()) - .phantom(true) - .controlsAmount(false))) - .childIf(io.support(IO.OUT), new ToggleButton() - .value(new BooleanSyncValue(tank::isLocked, tank::setLocked)) - .background(GTGuiTextures.MC_BUTTON, GTGuiTextures.BUTTON_LOCK) - .hoverBackground(GTGuiTextures.MC_BUTTON_HOVERED, GTGuiTextures.BUTTON_LOCK) - .selectedBackground(GTGuiTextures.MC_BUTTON_PRESSED, GTGuiTextures.BUTTON_LOCK) - .selectedHoverBackground(GTGuiTextures.MC_BUTTON_HOVERED_PRESSED, - GTGuiTextures.BUTTON_LOCK)) + .childIf(io.support(IO.OUT), () -> new FluidSlot() + .name("lockedFluid") + .syncHandler(new FluidSlotSyncHandler(tank.getLockedFluid())) + .alwaysShowFull(true) + .displayAmount(true) + .tooltip(t -> t.addLine("Locked Fluid"))) + .childIf(io.support(IO.OUT), () -> new ToggleButton() + .syncHandler("locked") + .tooltip(t -> t.addLine("gtceu.gui.fluid_lock.tooltip")) + .overlay(false, GTGuiTextures.BUTTON_LOCK) + .overlay(true, GTGuiTextures.BUTTON_LOCK) + .background(GTGuiTextures.MC_BUTTON) + .selectedBackground(GTGuiTextures.MC_BUTTON_PRESSED) + + ) .child(new FluidSlot() + .name("regularFluid") .syncHandler(new FluidSlotSyncHandler(tank.getStorages()[0]) - .canFillSlot(io.support(IO.IN))))); + .canFillSlot(io.support(IO.IN))) + .displayAmount(true))); } protected SlotGroupWidget createMultiSlotUI(PanelSyncManager syncManager) { diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ItemBusPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ItemBusPartMachine.java index a4d7289b057..d6bbaab36f2 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ItemBusPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ItemBusPartMachine.java @@ -12,10 +12,9 @@ import com.gregtechceu.gtceu.api.machine.multiblock.part.TieredIOPartMachine; import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; import com.gregtechceu.gtceu.api.mui.base.drawable.IKey; -import com.gregtechceu.gtceu.api.mui.drawable.ItemDrawable; -import com.gregtechceu.gtceu.api.mui.drawable.text.TextRenderer; +import com.gregtechceu.gtceu.api.mui.drawable.UITexture; import com.gregtechceu.gtceu.api.mui.factory.PosGuiData; -import com.gregtechceu.gtceu.api.mui.utils.Alignment; +import com.gregtechceu.gtceu.api.mui.theme.ThemeAPI; import com.gregtechceu.gtceu.api.mui.value.BoolValue; import com.gregtechceu.gtceu.api.mui.value.sync.PanelSyncManager; import com.gregtechceu.gtceu.api.mui.value.sync.SyncHandlers; @@ -23,12 +22,12 @@ import com.gregtechceu.gtceu.api.mui.widgets.ToggleButton; 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.layout.Row; import com.gregtechceu.gtceu.api.mui.widgets.slot.ItemSlot; import com.gregtechceu.gtceu.api.mui.widgets.slot.SlotGroup; import com.gregtechceu.gtceu.client.mui.screen.ModularPanel; import com.gregtechceu.gtceu.client.mui.screen.UISettings; import com.gregtechceu.gtceu.common.data.GTMachines; +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; @@ -306,50 +305,17 @@ public boolean swapIO() { public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISettings settings) { int rowSize = (int) Math.sqrt(getInventorySize()); - // inv is 162, 74 - // 176 = 162 + 7 * 2 padding, - int panelWidth = Math.max(176 + 18 + 3, 18 * rowSize + 18 + 14); - int panelHeight = 74 + Math.max(30, 9 + rowSize * 18) + 14; - - var panel = GTGuis.createPanel(this, panelWidth, panelHeight); - - var displayItem = this.getDefinition().asStack(); - String hatchName = displayItem.getHoverName().getString(); - hatchName = hatchName.replaceAll("ยง.", "").trim(); - - int borderRadius = 5; - int iconSize = 16; - int minPanelWidth = (int) (panelWidth * 0.8f) - (iconSize + (borderRadius * 2)); - int textTitleWidth = TextRenderer.getFont().width(hatchName) + iconSize + (borderRadius * 2); - - int textRows = (int) Math.ceil((double) textTitleWidth / minPanelWidth); - int textHeightPerRow = (int) (IKey.renderer.getFontHeight()); - int textHeight = textHeightPerRow * textRows + borderRadius; - - panel.child(new Row() - .coverChildrenHeight() - .mainAxisAlignment(Alignment.MainAxis.CENTER) - .widthRel(.8f) - .top(-(textHeight + borderRadius)) - .rightRel(0.5f) - .background(GTGuiTextures.BACKGROUND) - .child(new ItemDrawable(displayItem) - .asIcon().size(iconSize) - .asWidget() - .marginLeft(borderRadius)) - .mainAxisAlignment(Alignment.MainAxis.START) - .child(IKey.str(hatchName) - .asWidget() - .paddingTop(1) - .margin(borderRadius, borderRadius, borderRadius, 1) - .size(textTitleWidth, textHeight))); + int width = Math.max(176, 18 * rowSize + 14); + int height = Math.max(168, (18 * rowSize) + 78 + 19); + var panel = GTGuis.createPanel(this, width, height); + panel.child(GTMuiWidgets.createTitleBar(this.getDefinition(), width)); - SlotGroup group = new SlotGroup("item_inv", rowSize, 0, true); + int smallHatchOffset = tier < 2 ? 9 * (3 - rowSize) : 0; + SlotGroup group = new SlotGroup("item_inv", rowSize, 0, true); panel.child(new Grid() - .top(7).height(18 * rowSize) - .minElementMargin(0, 0) - .minColWidth(18).minRowHeight(18) + .coverChildren() + .top(10 + smallHatchOffset) .alignX(0.5f) .mapTo(rowSize, rowSize * rowSize, index -> new ItemSlot() .slot(SyncHandlers.itemSlot(inventory, index) @@ -363,14 +329,24 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet .child(SlotGroupWidget.playerInventory(true) // .alignX(Alignment.CENTER) - .left(18 + 10) + .left(7) .bottom(7)); + var theme = this.getDefinition().getThemeId(); + var backgroundTexture = (UITexture) ThemeAPI.INSTANCE.getTheme(theme).getPanelTheme().getTheme() + .getBackground(); + if (backgroundTexture == null) { + backgroundTexture = GTGuiTextures.BACKGROUND; + } + panel.child(new Column() .coverChildren() - .childPadding(3) - // .left(7).top(18 * rowSize + 7 + 5) - .left(7).bottom(7) + .rightRel(1.0f) + .reverseLayout(true) + .bottom(16) + .padding(8, 0, 4, 4) + .childPadding(2) + .background(backgroundTexture.getSubArea(0.0f, 0f, 0.75f, 1.0f)) .child(new ToggleButton() .value(new BoolValue.Dynamic(this::isWorkingEnabled, this::setWorkingEnabled)) .selectedBackground(GTGuiTextures.BUTTON_POWER[1]) @@ -379,7 +355,8 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet .tooltipBuilder((r) -> r.addLine(IKey.lang(Component.translatable( isWorkingEnabled() ? "behaviour.soft_hammer.enabled" : "behaviour.soft_hammer.disabled"))))) - .childIf(io.support(IO.IN), new ToggleButton() + .childIf(isCircuitSlotEnabled(), () -> GTMuiWidgets.createCircuitSlotPanel(this, panel, syncManager)) + .childIf(io.support(IO.IN), () -> new ToggleButton() .value(new BoolValue.Dynamic(this::isDistinct, this::setDistinct)) .stateOverlay(GTGuiTextures.BUTTON_DISTINCT) .tooltipAutoUpdate(true) @@ -387,14 +364,9 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet richTooltip) -> richTooltip .add(Component.translatable("gtceu.multiblock.universal.distinct") .setStyle(Style.EMPTY.withColor(ChatFormatting.YELLOW)) - .append(Component.translatable(isDistinct() ? - "gtceu.multiblock.universal.distinct.yes" : - "gtceu.multiblock.universal.distinct.no")))))) - /* - * .childIf(io.support(IO.IN) && hasCircuitSlot && isCircuitSlotEnabled(), - * new ItemSlot().slot(new ModularSlot(circuitInventory.storage, 0))) - */ - ; + .append(Component + .translatable("gtceu.multiblock.universal.distinct" + + (isDistinct() ? ".yes" : ".no"))))))); return panel; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/SteamHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/SteamHatchPartMachine.java index b494c5b651e..ed684a53e79 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/SteamHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/SteamHatchPartMachine.java @@ -53,4 +53,9 @@ protected NotifiableFluidTank createTank(int initialCapacity, int slots) { public boolean swapIO() { return false; } + + @Override + public boolean isCircuitSlotEnabled() { + return false; + } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/SteamItemBusPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/SteamItemBusPartMachine.java index b5556fd2c2a..b0babdf61d0 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/SteamItemBusPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/SteamItemBusPartMachine.java @@ -17,39 +17,6 @@ public SteamItemBusPartMachine(BlockEntityCreationInfo info, IO io) { autoTooltipKey = io == IO.IN ? "gtceu.gui.item_auto_input.tooltip" : "gtceu.gui.item_auto_output.tooltip"; } - /* - * @NotNull - * - * @Override - * public ModularUI createUI(@NotNull Player entityPlayer) { - * int rowSize = (int) Math.sqrt(getInventorySize()); - * int xOffset = rowSize == 10 ? 9 : 0; - * var modular = new ModularUI(176 + xOffset * 2, - * 18 + 18 * rowSize + 105, this, entityPlayer) - * .background(GuiTextures.BACKGROUND_STEAM.get(ConfigHolder.INSTANCE.machines.steelSteamMultiblocks)) - * .widget(new LabelWidget(10, 5, getBlockState().getBlock().getDescriptionId())) - * .widget(new ToggleButtonWidget(7 + xOffset, 18 + 18 * rowSize, 18, 18, - * GuiTextures.BUTTON_ITEM_OUTPUT, this::isWorkingEnabled, this::setWorkingEnabled) - * .setShouldUseBaseBackground() // TODO: Steamify background - * .setTooltipText(autoTooltipKey)) - * .widget(UITemplate.bindPlayerInventory(entityPlayer.getInventory(), - * GuiTextures.SLOT_STEAM.get(ConfigHolder.INSTANCE.machines.steelSteamMultiblocks), - * 7 + xOffset, 18 + 18 * rowSize + 24, true)); - * - * for (int y = 0; y < rowSize; y++) { - * for (int x = 0; x < rowSize; x++) { - * int index = y * rowSize + x; - * modular.widget(new SlotWidget(getInventory().storage, index, - * (88 - rowSize * 9 + x * 18) + xOffset, 18 + y * 18 + 6, true, io.support(IO.IN)) - * .setBackgroundTexture( - * GuiTextures.SLOT_STEAM.get(ConfigHolder.INSTANCE.machines.steelSteamMultiblocks))); - * } - * } - * - * return modular; - * } - */ - @Override public boolean swapIO() { BlockPos blockPos = getBlockPos(); @@ -75,4 +42,9 @@ public boolean swapIO() { } return true; } + + @Override + public boolean isCircuitSlotEnabled() { + return false; + } }