From 518c80ab03ad238c8773209ef82ec6601886f802 Mon Sep 17 00:00:00 2001 From: YoungOnion <39562198+YoungOnionMC@users.noreply.github.com> Date: Sat, 16 May 2026 03:38:20 -0600 Subject: [PATCH 01/14] add back test machine, update mui, fix up steam forge hammer, steam solar, rock crusher uis, start of pump cover, fix id button position --- .../api/recipe/category/GTRecipeCategory.java | 7 +- .../api/recipe/gui/GTRecipeViewerWidget.java | 5 +- .../gtceu/common/cover/ConveyorCover.java | 8 +- .../gtceu/common/cover/PumpCover.java | 8 +- .../gtceu/common/cover/RobotArmCover.java | 5 +- .../gtceu/common/data/GTMachines.java | 8 + .../gtceu/common/data/GTRecipeTypes.java | 4 + .../common/machine/mui/TestMuiMachine.java | 741 ++++++++++++++++++ .../machine/steam/SteamSolarBoiler.java | 2 + .../gtceu/common/mui/GTMuiWidgets.java | 10 +- .../progress_bar_hammer_base_bronze.png | Bin 628 -> 542 bytes .../progress_bar_hammer_base_steel.png | Bin 627 -> 542 bytes 12 files changed, 781 insertions(+), 17 deletions(-) create mode 100644 src/main/java/com/gregtechceu/gtceu/common/machine/mui/TestMuiMachine.java diff --git a/src/main/java/com/gregtechceu/gtceu/api/recipe/category/GTRecipeCategory.java b/src/main/java/com/gregtechceu/gtceu/api/recipe/category/GTRecipeCategory.java index 52900b5b7e1..cee9e45f1cd 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/recipe/category/GTRecipeCategory.java +++ b/src/main/java/com/gregtechceu/gtceu/api/recipe/category/GTRecipeCategory.java @@ -58,8 +58,11 @@ public static GTRecipeCategory registerDefault(@NotNull GTRecipeType recipeType) public CategoryIcon getIcon() { if (icon == null) { - if (recipeType.getIconSupplier() != null) icon = new CategoryIcon(recipeType.getIconSupplier().get()); - else icon = new CategoryIcon(new ItemStack(Items.BARRIER)); + if (recipeType.getIconSupplier() != null) { + icon = new CategoryIcon(recipeType.getIconSupplier().get()); + } else { + icon = new CategoryIcon(new ItemStack(Items.BARRIER)); + } } return icon; } diff --git a/src/main/java/com/gregtechceu/gtceu/api/recipe/gui/GTRecipeViewerWidget.java b/src/main/java/com/gregtechceu/gtceu/api/recipe/gui/GTRecipeViewerWidget.java index 0c0489b6cd8..d487d23d27f 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/recipe/gui/GTRecipeViewerWidget.java +++ b/src/main/java/com/gregtechceu/gtceu/api/recipe/gui/GTRecipeViewerWidget.java @@ -88,7 +88,8 @@ public GTRecipeViewerWidget(GTRecipe recipe) { recipeContentRow = uiLayout.getCustomUIBuilder() == null ? buildDefaultLayout() : uiLayout.getCustomUIBuilder().apply(recipe); - mainColumn.child(recipeContentRow.coverChildrenWidth().marginTop(5).marginBottom(3)); + mainColumn.child(recipeContentRow.coverChildrenWidth().marginTop(5).marginBottom(3) + .paddingLeft(2).paddingRight(2)); mainColumn.child(additionalRecipeContent.child(textComponents)); loadContentIntoSlots(); @@ -183,7 +184,7 @@ private void attachDebugRecipeIDButton() { childIf(!FMLLoader.isProduction(), () -> new ButtonWidget<>() .overlay(Text.str("ID")) .decoration() - .top(3).right(3) + .bottom(16).right(3) .size(15, 15) .tooltip(r -> r.addLine("Click to copy recipe ID: " + baseRecipe.id)) .onMousePressed((ctx, b) -> { diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/ConveyorCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/ConveyorCover.java index c39226bfe03..bde1e288ee5 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/ConveyorCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/ConveyorCover.java @@ -418,13 +418,13 @@ public boolean shouldRespectDistributionMode() { public void createCoverUIRows(Flow column, SidedPosGuiData data, PanelSyncManager syncManager, UISettings settings) { EnumSyncValue manualMode = new EnumSyncValue<>(ManualIOMode.class, - this::getManualIOMode, this::setManualIOMode); + this::getManualIOMode, this::setManualIOMode).allowC2S(); EnumSyncValue distMode = new EnumSyncValue<>(DistributionMode.class, - this::getDistributionMode, this::setDistributionMode); + this::getDistributionMode, this::setDistributionMode).allowC2S(); - IntSyncValue transferRate = new IntSyncValue(this::getTransferRate, this::setTransferRate); - EnumSyncValue ioSync = new EnumSyncValue<>(IO.class, this::getIo, this::setIo); + IntSyncValue transferRate = new IntSyncValue(this::getTransferRate, this::setTransferRate).allowC2S(); + EnumSyncValue ioSync = new EnumSyncValue<>(IO.class, this::getIo, this::setIo).allowC2S(); syncManager.syncValue("io", ioSync); syncManager.syncValue("manualMode", manualMode); diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/PumpCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/PumpCover.java index 2e360a6f946..031d4c3001c 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/PumpCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/PumpCover.java @@ -268,12 +268,12 @@ private static boolean canTransfer(IFluidHandlerModifiable fluidHandler, Transfe @Override public void createCoverUIRows(Flow column, SidedPosGuiData data, PanelSyncManager syncManager, UISettings settings) { - IntSyncValue transferRateSync = new IntSyncValue(this::getTransferRate, this::setTransferRate); + IntSyncValue transferRateSync = new IntSyncValue(this::getTransferRate, this::setTransferRate).allowC2S(); EnumSyncValue bucketModeSync = new EnumSyncValue<>(BucketMode.class, this::getBucketMode, - this::setBucketMode); + this::setBucketMode).allowC2S(); EnumSyncValue manualIOModeSync = new EnumSyncValue<>(ManualIOMode.class, this::getManualIOMode, - this::setManualIOMode); - EnumSyncValue ioSync = new EnumSyncValue<>(IO.class, this::getIo, this::setIo); + this::setManualIOMode).allowC2S(); + EnumSyncValue ioSync = new EnumSyncValue<>(IO.class, this::getIo, this::setIo).allowC2S(); syncManager.syncValue("io", ioSync); syncManager.syncValue("transferRate", transferRateSync); diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/RobotArmCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/RobotArmCover.java index c548505e5bc..796146bac1a 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/RobotArmCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/RobotArmCover.java @@ -166,8 +166,9 @@ public void createCoverUIRows(Flow column, SidedPosGuiData data, PanelSyncManage UISettings settings) { super.createCoverUIRows(column, data, syncManager, settings); - var transferMode = new EnumSyncValue<>(TransferMode.class, this::getTransferMode, this::setTransferMode); - var transferSize = new IntSyncValue(this::getGlobalTransferLimit, v -> this.globalTransferLimit = v); + var transferMode = new EnumSyncValue<>(TransferMode.class, this::getTransferMode, this::setTransferMode) + .allowC2S(); + var transferSize = new IntSyncValue(this::getGlobalTransferLimit, v -> this.globalTransferLimit = v).allowC2S(); syncManager.syncValue("transferMode", transferMode); syncManager.syncValue("transferSize", transferSize); 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 1946e35aa26..f7c8b92362c 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTMachines.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTMachines.java @@ -22,6 +22,7 @@ import com.gregtechceu.gtceu.common.data.machines.*; import com.gregtechceu.gtceu.common.data.models.GTModels; import com.gregtechceu.gtceu.common.machine.electric.*; +import com.gregtechceu.gtceu.common.machine.mui.TestMuiMachine; import com.gregtechceu.gtceu.common.machine.multiblock.part.*; import com.gregtechceu.gtceu.common.machine.multiblock.part.monitor.AdvancedMonitorPartMachine; import com.gregtechceu.gtceu.common.machine.multiblock.part.monitor.MonitorPartMachine; @@ -1151,6 +1152,13 @@ public class GTMachines { .allowExtendedFacing(true) .register(); + public static final MachineDefinition MUI_TEST = REGISTRATE + .machine("test_mui", TestMuiMachine::new) + .rotationState(RotationState.ALL) + .model(createOverlayCasingMachineModel(GTCEu.id("block/casings/solid/machine_casing_clean_stainless_steel"), + GTCEu.id("block/machine/part/computer_monitor"))) + .register(); + public static void init() { GTMultiMachines.init(); GCYMMachines.init(); diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeTypes.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeTypes.java index 4ddda5bc642..9faa844071d 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeTypes.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeTypes.java @@ -461,6 +461,10 @@ public class GTRecipeTypes { public final static GTRecipeType ROCK_BREAKER_RECIPES = register("rock_breaker", ELECTRIC).setMaxIOSize(1, 4, 0, 0) .setEUIO(IO.IN) .UI(builder -> builder.setProgressBar(GTGuiTextures.PROGRESS_MACERATE) + .setMachineLayoutGridBuilder(ItemRecipeCapability.CAP, IO.OUT, (machine, layout) -> { + + return GTMuiWidgets.createGrid(4, 2, true, 's'); + }) .setItemSlotOverlay(IO.IN, 0, GTGuiTextures.DUST_OVERLAY) .setItemSlotOverlay(IO.OUT, 0, GTGuiTextures.CRUSHED_ORE_OVERLAY)) .setIconSupplier(() -> GTMachines.ROCK_CRUSHER[GTValues.LV].asStack()) diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/mui/TestMuiMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/mui/TestMuiMachine.java new file mode 100644 index 00000000000..e590f0b74aa --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/mui/TestMuiMachine.java @@ -0,0 +1,741 @@ +package com.gregtechceu.gtceu.common.machine.mui; + +import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; +import com.gregtechceu.gtceu.api.machine.MetaMachine; +import com.gregtechceu.gtceu.api.machine.TickableSubscription; +import com.gregtechceu.gtceu.api.machine.feature.IMuiMachine; +import com.gregtechceu.gtceu.common.data.GTMaterials; +import com.gregtechceu.gtceu.common.mui.GTGuiTextures; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.animal.Fox; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.block.Blocks; +import net.minecraftforge.common.capabilities.ForgeCapabilities; +import net.minecraftforge.fluids.capability.templates.FluidTank; +import net.minecraftforge.items.IItemHandlerModifiable; +import net.minecraftforge.items.ItemStackHandler; +import net.minecraftforge.registries.ForgeRegistries; + +import brachy.modularui.api.IPanelHandler; +import brachy.modularui.api.drawable.Text; +import brachy.modularui.api.widget.IWidget; +import brachy.modularui.client.schemarenderer.BlockHighlight; +import brachy.modularui.drawable.*; +import brachy.modularui.factory.GuiData; +import brachy.modularui.factory.PosGuiData; +import brachy.modularui.schema.ArraySchema; +import brachy.modularui.screen.ModularPanel; +import brachy.modularui.screen.RichTooltip; +import brachy.modularui.screen.UISettings; +import brachy.modularui.screen.viewport.ModularGuiContext; +import brachy.modularui.utils.Alignment; +import brachy.modularui.utils.Color; +import brachy.modularui.utils.Interpolation; +import brachy.modularui.value.BoolValue; +import brachy.modularui.value.IntValue; +import brachy.modularui.value.StringValue; +import brachy.modularui.value.sync.*; +import brachy.modularui.value.sync.ItemSlotSyncHandler; +import brachy.modularui.widget.EmptyWidget; +import brachy.modularui.widget.ParentWidget; +import brachy.modularui.widgets.*; +import brachy.modularui.widgets.layout.Flow; +import brachy.modularui.widgets.slot.*; +import brachy.modularui.widgets.textfield.TextFieldWidget; +import it.unimi.dsi.fastutil.objects.Object2IntMap; +import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import org.jetbrains.annotations.NotNull; + +import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicReference; +import java.util.function.DoubleUnaryOperator; + +import static brachy.modularui.drawable.GuiTextures.MUI_LOGO; + +public class TestMuiMachine extends MetaMachine implements IMuiMachine { + + private static final Object2IntMap handlerSizeMap = new Object2IntOpenHashMap<>() { + + { + put(Items.DIAMOND, 9); + put(Items.EMERALD, 9); + put(Items.GOLD_INGOT, 7); + put(Items.IRON_INGOT, 6); + put(Items.CLAY_BALL, 2); + defaultReturnValue(3); + } + }; + + private final FluidTank fluidTank = new FluidTank(10000); + private final FluidTank fluidTankPhantom = new FluidTank(500000); + private long time = 0; + private int val, val2 = 0; + private String value = ""; + private int intValue = 1234567; + private double doubleValue = 1; + private final int duration = 80; + private int progress = 0; + private int cycleState = 0; + private List serverInts = new ArrayList<>(); + private ItemStack displayItem = new ItemStack(Items.DIAMOND); + private final IItemHandlerModifiable inventory = new ItemStackHandler(2) { + + @Override + public int getSlotLimit(int slot) { + return slot == 0 ? Integer.MAX_VALUE : 64; + } + }; + private final ItemStackHandler bigInventory = new ItemStackHandler(9); + + private final ItemStackHandler mixerItems = new ItemStackHandler(4); + private final ItemStackHandler smallInv = new ItemStackHandler(4); + private final FluidTank mixerFluids1 = new FluidTank(16000); + private final FluidTank mixerFluids2 = new FluidTank(16000); + private final ItemStackHandler craftingInventory = new ItemStackHandler(10); + private final ItemStackHandler storageInventory0 = new ItemStackHandler(1); + private final Map stackHandlerMap = new Object2ObjectOpenHashMap<>(); + + private int num = 2; + + private TickableSubscription sub; + + public TestMuiMachine(BlockEntityCreationInfo info) { + super(info); + sub = subscribeServerTick(this::tick); + } + + @Override + public ModularPanel buildUI(PosGuiData guiData, PanelSyncManager syncManager, UISettings settings) { + // settings.customContainer(() -> new CraftingModularContainer(3, 3, this.craftingInventory)); + // settings.customGui(() -> TestGuiContainer::new); + + syncManager.registerSlotGroup("item_inv", 3); + syncManager.registerSlotGroup("mixer_items", 2); + + syncManager.syncValue("mixer_fluids", 0, SyncHandlers.fluidSlot(this.mixerFluids1)); + syncManager.syncValue("mixer_fluids", 1, SyncHandlers.fluidSlot(this.mixerFluids2)); + IntSyncValue cycleStateValue = new IntSyncValue(() -> this.cycleState, val -> this.cycleState = val); + syncManager.getHyperVisor().syncValue("cycle_state", cycleStateValue); + syncManager.syncValue("display_item", GenericSyncValue.forItem(() -> this.displayItem, null)); + GenericListSyncHandler numberListSyncHandler = GenericListSyncHandler.builder() + .getter(() -> this.serverInts) + .setter(v -> this.serverInts = v) + .serializer(FriendlyByteBuf::writeInt) + .deserializer(FriendlyByteBuf::readInt) + .immutableCopy() + .build(); + syncManager.syncValue("number_list", numberListSyncHandler); + syncManager.bindPlayerInventory(guiData.getPlayer()); + + DynamicSyncHandler dynamicSyncHandler = new DynamicSyncHandler() + .widgetProvider((syncManager1, packet) -> { + ItemStack itemStack = packet.readItem(); + if (itemStack.isEmpty()) return new EmptyWidget(); + Item item = itemStack.getItem(); + ItemStackHandler handler = stackHandlerMap.computeIfAbsent(item, + k -> new ItemStackHandler(handlerSizeMap.getInt(k))); + String name = item.getName(itemStack).toString(); + Flow flow = Flow.row(); + for (int i = 0; i < handler.getSlots(); i++) { + int finalI = i; + flow.child(new ItemSlot() + .syncHandler(syncManager1.getOrCreateSyncHandler(name, i, ItemSlotSyncHandler.class, + () -> new ItemSlotSyncHandler(new ModularSlot(handler, finalI))))); + } + return flow; + }); + + DynamicLinkedSyncHandler> dynamicLinkedSyncHandler = new DynamicLinkedSyncHandler<>( + numberListSyncHandler) + .widgetProvider((syncManager1, value1) -> { + List vals = value1.getValue(); + return Flow.col() + .widthRel(1f) + .coverChildrenHeight() + .children(vals.size(), i -> Text.str(String.valueOf(vals.get(i))).asWidget().padding(2)) + .name("synced number col"); + }); + + // disable spotless on the menu layout code so it won't insert random line breaks + // spotless:off + Rectangle colorPickerBackground = new Rectangle().color(Color.RED.main); + ModularPanel panel = new ModularPanel<>("test_tile"); + IPanelHandler panelSyncHandler = syncManager.syncedPanel("other_panel", true, this::openSecondWindow); + IPanelHandler colorPicker = IPanelHandler.simple(panel, + (mainPanel, player) -> new ColorPickerDialog("color_picker", colorPickerBackground.getColor(), true) + .draggable(true) + .relative(panel) + .top(0) + .rightRel(1f), + true); + PagedWidget.Controller tabController = new PagedWidget.Controller(); + panel.resizer() // returns object which is responsible for sizing + .size(176, 220); // set a static size for the main panel + + DoubleSyncValue progressPercent = syncManager.getOrCreateSyncHandler("progressPercent", DoubleSyncValue.class, () -> + new DoubleSyncValue(() -> (this.progress / (double) this.duration))); + + var babyFop = new Fox(EntityType.FOX, guiData.getLevel()); + babyFop.setAge(-1); + panel.child(Flow.row() + .name("Tab row") + .coverChildren() + .topRel(0f, 4, 1f) + .child(new PageButton(0, tabController) + .tab(GuiTextures.TAB_TOP, -1) + .overlay(new EntityDrawable<>(babyFop).followMouse().asIcon().size(8))) + .child(new PageButton(1, tabController) + .tab(GuiTextures.TAB_TOP, 0) + .overlay(new ItemDrawable(Items.OAK_SAPLING).asIcon())) + .child(new PageButton(2, tabController) + .tab(GuiTextures.TAB_TOP, 0) + .overlay(new ItemDrawable(Items.COMPASS).asIcon())) + .child(new PageButton(3, tabController) + .tab(GuiTextures.TAB_TOP, 0) + .overlay(new ItemDrawable(Blocks.CHEST).asIcon())) + .child(new PageButton(4, tabController) + .tab(GuiTextures.TAB_TOP, 0) + .overlay(new ItemDrawable(Items.ENDER_EYE).asIcon()))) + + .child(new Expandable() + .name("expandable") + .top(0) + .leftRelOffset(1f, 1) + .background(GTGuiTextures.BACKGROUND) + .excludeAreaInRecipeViewer() + .stencilTransform((r, expanded) -> { + r.width = Math.max(20, r.width - 5); + r.height = Math.max(20, r.height - 5); + }) + .animationDuration(500) + .interpolation(Interpolation.BOUNCE_OUT) + .collapsedView(new ItemDrawable(Blocks.CRAFTING_TABLE).asIcon().asWidget().size(20).pos(0, 0)) + .expandedView(new ParentWidget<>() + .name("crafting tab") + .coverChildren() + .child(new ItemDrawable(Blocks.CRAFTING_TABLE).asIcon().asWidget().size(20).pos(0, 0)) + .child(SlotGroupWidget.builder() + .row("III D") + .row("III O") + .row("III ") + .key('I', i -> new ItemSlot().slot(new ModularSlot(this.craftingInventory, i)) + .addTooltipLine("This slot is empty")) + .key('O', new ItemSlot().slot(new ModularCraftingSlot(this.craftingInventory, 9))) + .key('D', new ItemDisplayWidget().syncHandler("display_item")) + .build() + .margin(5, 5, 20, 5).name("crafting")))) + + .child(Flow.column() + .name("main col") + .sizeRel(1f) + .paddingBottom(7) + .child(new ParentWidget<>() + .expanded() + .widthRel(1f) + .child(new PagedWidget<>() + .name("root parent") + .sizeRel(1f) + .controller(tabController) + .addPage(new ParentWidget<>() + .name("page 1 parent") + .sizeRel(1f, 1f) + .padding(7, 0) + .child(Flow.row() + .name("buttons, slots and more tests") + .height(137) + .coverChildrenWidth() + .posRel(Alignment.CenterLeft) + // .padding(7) + .child(Flow.col() + .name("buttons and slots test") + .coverChildren() + .marginRight(8) + // .flex(flex -> flex.height(0.5f)) + // .widthRel(0.5f) + .crossAxisAlignment(Alignment.CrossAxis.CENTER) + .child(new ButtonWidget<>() + .size(60, 18) + .overlay(Text.dynamic(() -> Component.literal("Button " + this.val)))) + .child(new FluidSlot() + .margin(2) + .syncHandler(SyncHandlers.fluidSlot(this.fluidTank))) + .child(new ButtonWidget<>() + .size(60, 18) + .tooltip(tooltip -> { + tooltip.showUpTimer(10); + tooltip.addLine(Text.str("Test Line g")); + tooltip.addLine(Text.str("An image inside of a tooltip:")); + tooltip.addDrawableLine(MUI_LOGO + .asIcon().size(50) + .alignment(Alignment.TopCenter)); + tooltip.addLine(Text.str("And here a circle:")); + tooltip.addDrawableLine(new Circle() + .setColor(Color.RED.darker(2), Color.RED.brighter(2)) + .asIcon() + .size(20)) + .addDrawableLine(new ItemDrawable(Items.DIAMOND).asIcon()) + .pos(RichTooltip.Pos.LEFT); + }) + .onMousePressed((context, mouseButton) -> { + // panel.getScreen().close(true); + // panel.getScreen().openDialog("dialog", + // this::buildDialog, + // ModularUI.LOGGER::info); + // openSecondWindow(context).openIn(panel.getScreen()); + panelSyncHandler.openPanel(); + return true; + }) + // .flex(flex -> flex.left(3)) // ? + .overlay(Text.str("Button 2"))) + .child(new TextFieldWidget() + .size(60, 18) + .setTextAlignment(Alignment.CenterRight) + .value(SyncHandlers.string(() -> this.value, + val -> this.value = val)) + .margin(0, 2) + .hintText(Component.literal("hint"))) + .child(new TextFieldWidget() + .size(60, 18) + .paddingTop(1) + .value(SyncHandlers.doubleNumber( + () -> this.doubleValue, + val -> this.doubleValue = val)) + .setNumbersDouble(DoubleUnaryOperator.identity()) + .hintText(Component.literal("number"))) + // .child(Text.str("Test + // string").asWidget().padding(2).name("test + // string")) + .child(new ScrollingTextWidget( + Text.str("Very very long test string")) + .widthRel(1f).height(16)) + // .child(Text.EMPTY.asWidget().name("Empty Text")) + ) + .child(Flow.col() + .name("button and slots test 2") + .coverChildren() + // .widthRel(0.5f) + .crossAxisAlignment(Alignment.CrossAxis.CENTER) + .child(new ProgressWidget() + .value(progressPercent) + .texture(GTGuiTextures.PROGRESS_ARROW.main(), 20)) + .child(new ProgressWidget() + .value(progressPercent) + .texture(GTGuiTextures.PROGRESS_MIXER.main(), 20) + .direction( + ProgressWidget.Direction.CIRCULAR_CW)) + .child(Flow.row().coverChildrenWidth().height(22) + .child(new ToggleButton() + .value(new BoolValue.Dynamic( + () -> cycleStateValue.getIntValue() == 0, + val -> cycleStateValue.setIntValue(0))) + .overlay(GTGuiTextures.CYCLE_BUTTON + .getSubArea(0, 0, 1, 1 / 3f))) + .child(new ToggleButton() + .value(new BoolValue.Dynamic( + () -> cycleStateValue.getIntValue() == 1, + val -> cycleStateValue.setIntValue(1))) + .overlay(GTGuiTextures.CYCLE_BUTTON + .getSubArea(0, 1 / 3f, 1, + 2 / 3f))) + .child(new ToggleButton() + .value(new BoolValue.Dynamic( + () -> cycleStateValue.getIntValue() == 2, + val -> cycleStateValue.setIntValue(2))) + .overlay(GTGuiTextures.CYCLE_BUTTON + .getSubArea(0, 2 / 3f, 1, 1)))) + /* + * .child(new CycleButtonWidget() + * .length(3) + * .texture(GTGuiTextures.CYCLE_BUTTON) + * .addTooltip(0, "State 1") + * .addTooltip(1, "State 2") + * .addTooltip(2, "State 3") + * .background(GTGuiTextures.BUTTON) + * .value(SyncHandlers.intNumber(() -> this.cycleState, + * val -> this.cycleState = val))) + */ + .child(new ItemSlot() + .slot(SyncHandlers.itemSlot(this.inventory, 0) + .ignoreMaxStackSize(true) + .singletonSlotGroup())) + .child(new FluidSlot() + .margin(2) + .width(30) + .alwaysShowFull(false) + .syncHandler(SyncHandlers + .fluidSlot(this.fluidTankPhantom) + .phantom(true))) + .child(Flow.col() + .name("button and slots test 3") + .coverChildren() + .child(new TextFieldWidget() + .size(60, 20) + .value(SyncHandlers.intNumber( + () -> this.intValue, + val -> this.intValue = val)) + .setNumbers(0, 9999999) + .hintText(Component + .literal("integer"))))))) + .addPage(Flow.col() + .name("Slots test page") + .coverChildren() + // .height(120) + .padding(7) + .leftRel(0.5f) + .mainAxisAlignment(Alignment.MainAxis.START) + .childPadding(2) + // .child(SlotGroupWidget.playerInventory().left(0)) + .child(SlotGroupWidget.builder() + .matrix("III", "III", "III") + .key('I', index -> { + // 4 is the middle slot with a negative priority -> shift + // click prioritises middle slot + if (index == 4) { + return new ItemSlot().slot( + SyncHandlers.itemSlot(this.bigInventory, index) + .singletonSlotGroup(-100)); + } + return new ItemSlot().slot( + SyncHandlers.itemSlot(this.bigInventory, index) + .slotGroup("item_inv")); + }) + .build().name("9 slot inv") + .placeSortButtonsTopRightVertical() + // .marginBottom(2) + ) + .child(SlotGroupWidget.builder() + .row("FII") + .row("FII") + .key('F', + index -> new FluidSlot().syncHandler("mixer_fluids", + index)) + .key('I', + index -> ItemSlot.create(index >= 2) + .slot(new ModularSlot(this.mixerItems, index) + .slotGroup("mixer_items") + .filter(stack -> !stack.getCapability( + ForgeCapabilities.ITEM_HANDLER) + .isPresent()))) + .build().name("mixer inv") + .disableSortButtons()) + .child(Flow.row() + .coverChildrenHeight() + .child(new CycleButtonWidget() + .size(20, 20) + .stateCount(3) + .stateOverlay(GTGuiTextures.CYCLE_BUTTON) + .value(new IntSyncValue(() -> this.val2, val -> this.val2 = val)) + .margin(8, 0)) + .child(Text.str("Hello World").asWidget().height(18))) + /*.child(*//*new SpecialButton( + Text.str("A very long string that looks cool when animated") + *//**//*.withAnimation()*//**//*) + .height(14) + .widthRel(1f)*//*)*/ + /* + * GuiTextures.LOGO.asIcon() + * .size(80, 80) + * .asWidget() + * .flex(flex -> flex.width(1f).height(1f)) + */) + .addPage(new ParentWidget<>() + .name("page 3 parent") + .sizeRel(1f, 1f) + .padding(7) + // .child(SlotGroupWidget.playerInventory()) + .child(new SliderWidget() + .widthRel(1f).bottom(50).height(16) // test overwriting of units + .top(7) + .stopper(0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100) + .background(GTGuiTextures.FLUID_SLOT)) + .child(new ButtonWidget<>() + .name("color picker button") + .top(25) + .background(colorPickerBackground) + .disableHoverBackground() + .onMousePressed((context, mouseButton) -> { + colorPicker.openPanel(); + return true; + })) + .child(new ListWidget<>() + .name("test config list") + .widthRel(1f).top(50).bottom(2) + /* + * .child(new Rectangle().setColor(0xFF606060).asWidget() + * .top(1) + * .left(32) + * .size(1, 40)) + */ + .child(Flow.row() + .name("test config 1") + .widthRel(1f).coverChildrenHeight() + .crossAxisAlignment(Alignment.CrossAxis.CENTER) + .childPadding(2) + .child(new CycleButtonWidget() + .value(new BoolValue(false)) + .stateOverlay(GuiTextures.CHECK_BOX) + .size(14, 14) + .margin(8, 4)) + .child(Text.str("Boolean config").asWidget().height(14))) + .child(Flow.row() + .name("test config 2") + .widthRel(1f).height(14) + .childPadding(2) + .child(new TextFieldWidget() + .value(new IntValue.Dynamic(() -> this.num, val -> this.num = val)) + .disableHoverBackground() + .setNumbers(1, Short.MAX_VALUE) + .setTextAlignment(Alignment.Center) + .background(new Rectangle().color(0xFFb1b1b1)) + .setTextColor(Text.TEXT_COLOR) + .size(20, 14)) + .child(Text.str("Number config").asWidget() + .height(14))) + .child(Text.str("Config title").asWidget() + .color(0xFF404040) + .alignment(Alignment.CenterLeft) + .left(5).height(14) + .tooltip(tooltip -> tooltip.showUpTimer(10) + .addLine(Text.str("Config title tooltip")))) + .child(Flow.row() + .name("test config 3") + .widthRel(1f).height(14) + .childPadding(2) + .child(new CycleButtonWidget() + .value(new BoolValue(false)) + .stateOverlay(GuiTextures.CHECK_BOX) + .size(14, 14)) + .child(Text.str("Boolean config 3").asWidget().height(14))))) + .addPage(new ParentWidget<>() + .name("page 4 storage") + .sizeRel(1f) + .child(Flow.col() + .name("page 4 col, dynamic widgets") + .padding(7) + .child(new ItemSlot() + .slot(new ModularSlot(this.storageInventory0, 0) + .changeListener(((newItem, onlyAmountChanged, client, init) -> { + if (client && !onlyAmountChanged) { + dynamicSyncHandler.notifyUpdate( + packet -> packet.writeItem(newItem)); + } + })))) + .child(new DynamicSyncedWidget<>() + .widthRel(1f) + .syncHandler(dynamicSyncHandler)) + /*.child(new DynamicSyncedWidget<>() + .widthRel(1f) + .coverChildrenHeight() + .syncHandler(dynamicLinkedSyncHandler))*/)) + .addPage(createSchemaPage(guiData)))) + .child(SlotGroupWidget.playerInventory(false))); + /* + * panel.child(new ButtonWidget<>() + * .flex(flex -> flex.size(60, 20) + * .top(7) + * .left(0.5f)) + * .background(GuiTextures.BUTTON, Text.dynamic(() -> "Button " + this.val))) + * .child(SlotGroup.playerInventory()) + * .child(new FluidSlot().flex(flex -> flex + * .top(30) + * .left(0.5f)) + * .setSynced("fluid_slot")); + */ + // spotless:on + + return panel; + } + + private IWidget createSchemaPage(GuiData data) { + ParentWidget page = new ParentWidget<>(); + page.name("Page 5 schema"); + page.sizeRel(1f); + page.child(Text.str("Schema").asWidget()); + + if (getLevel().isClientSide()) { + page.child(new SchemaWidget( + new SchemaRenderer(ArraySchema.of(data.getPlayer(), 20)) + .highlightRenderer( + new BlockHighlight(Color.withAlpha(Color.GREEN.brighter(1), 0.9f), 1 / 32f)) + /* .isometric(true) */) + .pos(20, 20) + .size(100, 100)); + } + + return page; + } + + public ModularPanel openSecondWindow(PanelSyncManager syncManager, IPanelHandler syncHandler) { + ModularPanel panel = new Dialog<>("second_window") + .disablePanelsBelow(false) + .closeOnOutOfBoundsClick(false) + .draggable(true) + .size(100, 100) + .resizeableOnDrag(true); + SlotGroup slotGroup = new SlotGroup("small_inv", 2); + IntSyncValue timeSync = new IntSyncValue(() -> (int) java.lang.System.currentTimeMillis()); + syncManager.syncValue(123456, timeSync); + syncManager.registerSlotGroup(slotGroup); + AtomicInteger number = new AtomicInteger(0); + syncManager.syncValue("int_value", new IntSyncValue(number::get, number::set)); + IPanelHandler panelSyncHandler = syncManager.syncedPanel("other_panel_2", true, + (syncManager1, syncHandler1) -> openThirdWindow(syncManager1, syncHandler1, number)); + IntSyncValue num = syncManager.getHyperVisor().findSyncHandler("cycle_state", IntSyncValue.class); + panel.child(ButtonWidget.panelCloseButton()) + .child(new ButtonWidget<>() + .size(10).top(14).right(4) + .overlay((new FluidDrawable().setFluid(GTMaterials.Iron.getFluid(200))), Text.str("3")) + .size(50, 50) + .onMousePressed((context, mouseButton) -> { + panelSyncHandler.openPanel(); + return true; + })) + .child(Text.str("2nd Panel") + .asWidget() + .pos(5, 5)) + .child(SlotGroupWidget.builder() + .row("II") + .row("II") + .key('I', i -> new ItemSlot().slot(new ModularSlot(smallInv, i).slotGroup(slotGroup))) + .build() + .center()) + .child(new CycleButtonWidget() + .size(16).pos(5, 5 + 11) + .value(num) + .stateOverlay(0, Text.str("1")) + .stateOverlay(1, Text.str("2")) + .stateOverlay(2, Text.str("3")) + .addTooltipLine(Text.str("Hyper Visor test"))) + .child(new ButtonWidget<>() + .bottom(5) + .right(5) + .tooltip(richTooltip -> richTooltip.textColor(Color.RED.main).add("WARNING! Very Dangerous")) + .onMousePressed((context, mouseButton) -> { + if (!panelSyncHandler.isPanelOpen()) { + panelSyncHandler.deleteCachedPanel(); + number.incrementAndGet(); + } + return true; + })); + return panel; + } + + public ModularPanel openThirdWindow(PanelSyncManager syncManager, IPanelHandler syncHandler, + AtomicInteger integer) { + ModularPanel panel = new Dialog<>("third_window") + .disablePanelsBelow(false) + .closeOnOutOfBoundsClick(false) + .draggable(true) + .size(50, 50); + panel.child(ButtonWidget.panelCloseButton()) + .child(Text.str("3rd Panel: " + integer.get()) + .asWidget() + .pos(5, 17)); + return panel; + } + + public void buildDialog(Dialog dialog) { + AtomicReference value = new AtomicReference<>(""); + dialog.draggable(true); + dialog.child(new TextFieldWidget() + .resizer(flex -> flex.size(100, 20).center()) + .value(new StringValue.Dynamic(value::get, value::set))) + .child(new ButtonWidget<>() + .resizer(flex -> flex.size(8, 8).top(5).right(5)) + .overlay(Text.str("x")) + .onMousePressed((context, mouseButton) -> { + dialog.closeWith(value.get()); + return true; + })); + } + + @Override + public void clientTick() { + if (this.time++ % 20 == 0) { + this.val++; + } + if (++this.progress == this.duration) { + this.progress = 0; + } + } + + public @NotNull ModularPanel buildSearchTest(ModularGuiContext context) { + List items = Arrays.asList("Chicken", "Jockey", "Flint", "Steel", "Steve", "Diamond", "Ingot", "Iron", + "Armor", "Greg"); + StringValue searchValue = new StringValue(""); + return ModularPanel.defaultPanel("search", 100, 150) + .child(Flow.column() + .padding(5) + .child(new TextFieldWidget() + .value(searchValue) + .height(16) + .widthRel(1f)) + .child(new ListWidget<>() + .collapseDisabledChildren() + .expanded() + .widthRel(1f) + .children(items.size(), i -> new TextWidget<>(Text.str(items.get(i))) + .alignment(Alignment.Center) + .color(Color.WHITE.main) + .widthRel(1f) + .height(16) + .background(GuiTextures.MC_BUTTON) + .setEnabledIf(w -> items.get(i).toLowerCase() + .contains(searchValue.getStringValue()))))); + } + + public void tick() { + if (this.time++ % 20 == 0) { + if (++this.val2 == 3) this.val2 = 0; + Collection vals = ForgeRegistries.ITEMS.getValues(); + Item item = vals.stream().skip(new Random().nextInt(vals.size())).findFirst().orElse(Items.DIAMOND); + this.displayItem = new ItemStack(item, 26735987); + + Random rnd = new Random(); + this.serverInts.clear(); + for (int i = 0; i < 5; i++) { + this.serverInts.add(rnd.nextInt(100)); + } + } + if (++this.progress == this.duration) { + this.progress = 0; + } + } + + /* + * private static class SpecialButton extends ButtonWidget { + * + * private final AnimatedText animatedKey; + * + * private SpecialButton(AnimatedText animatedKey) { + * this.animatedKey = animatedKey.stopAnimation().forward(true); + * this.animatedKey.reset(); + * } + * + * @Override + * public void draw(ModularGuiContext context, WidgetThemeEntry widgetTheme) { + * this.animatedKey.draw(context, 0, 0, getArea().w(), getArea().h(), + * getActiveWidgetTheme(widgetTheme, isHovering())); + * } + * + * @Override + * public void onMouseStartHover() { + * super.onMouseStartHover(); + * this.animatedKey.startAnimation().forward(true); + * } + * + * @Override + * public void onMouseEndHover() { + * super.onMouseEndHover(); + * this.animatedKey.forward(false); + * } + * } + */ +} diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamSolarBoiler.java b/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamSolarBoiler.java index 1149d7b5368..d7a6a4a5175 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamSolarBoiler.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamSolarBoiler.java @@ -84,6 +84,8 @@ public void buildMainUI(ParentWidget mainWidget, PosGuiData guiData, PanelSyn })); mainWidget.child(new ProgressWidget() + .right(20) + .top(30) .size(18) .texture(progressTexture, 20) .value(canSeeSun)); diff --git a/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java b/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java index 00de1e82a8b..74a8d380f1d 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java +++ b/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java @@ -688,9 +688,13 @@ public Flow build() { } } - if (this.lang != null) - row.child(Text.of(lang).asWidget().posRel(Alignment.CenterRight).height(18)); - + if (this.lang != null) { + row.child(Text.of(lang) + .asWidget() + .verticalCenter() + .rightRel(0.f) + .height(18)); + } return row; } } diff --git a/src/main/resources/assets/gtceu/textures/gui/progress_bar/progress_bar_hammer_base_bronze.png b/src/main/resources/assets/gtceu/textures/gui/progress_bar/progress_bar_hammer_base_bronze.png index c485d0c6f7b892e140f99cd65593aa16949a1995..231047daecceddb907c034a2c1711fdc74240f4c 100644 GIT binary patch literal 542 zcmV+(0^$9MP)4Tx04UFukvT{MK^TR<#9KTHQ;1k>5p7fu6|vMPh@cQ+gm@J0ZcG%iYuJt0 zSPHg+g-7F6*jQ_8VJirN2Z)`Wm7V?+m&)RQqdvLdnh?;02hFUL6P_3DU(IC| z?+Ay?MLj8eD%|PF1%>aGZshqzaoXpg$_zR2*syR&SW6eNQN-q=V+r>Ohm)2q`N2e< zlZw|ATbUK}=bq|?bqn^?q|#-!GRhbeMA0xba g`#;F3)By|(0IXXTQAXhJ!TEX>4Tx04R}tkv&MmKpe$iQ?)8p2Q!E`WT-A$5EXIMDionYs1;guFdzMbCJjl7 zi=*ILaPVWX>fqw6tAnc`2!4RLxj8AiNQwVT3N2zhIPS;0dyl(!09Pw1n${^GZQdiO-40Ou8WPBhzJ%-x%jz=2#|grjql-Jh6~(VY!8sf~gTt5l2)_r+hB$ zvC4Rhu~w=mjeD{ehO_$0GSg`eA&x~XL4*Jq6%<@l-Yvm>k6|FR3)HKQ^L^|%^%EfY3|#3=f4K(Ce3D*m zYLO$LZyUI{Zff!#aJd5vJQeSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{002x$L_t(I%VT6f0_M7M{~5>tCoex@MCLR8ztBmRLD)dg z!b1$D{aYDXU>s_IHG3{IFfcGMFfq^o(8N%do`r|t&K?D$U=)l3N&o;BN)uzc6Tnme O0000i6*g diff --git a/src/main/resources/assets/gtceu/textures/gui/progress_bar/progress_bar_hammer_base_steel.png b/src/main/resources/assets/gtceu/textures/gui/progress_bar/progress_bar_hammer_base_steel.png index c7634f5aa86dbe6145d31a7eab60ffc69c402445..171fe4625287959cbff69d950b355e93b3994f6e 100644 GIT binary patch literal 542 zcmV+(0^$9MP)4Tx04UFukvT{MK^TR<#9KTHQ;1k>5p7fu6|vMPh@cQ+gm@J0ZcG%iYuJt0 zSPHg+g-7F6*jQ_8VJirN2Z)`Wm7V?+m&)RQqdvLdnh?;02hFUL6P_3DU(IC| z?+Ay?MLj8eD%|PF1%>aGZshqzaoXpg$_zR2*syR&SW6eNQN-q=V+r>Ohm)2q`N2e< zlZw|ATbUK}=bq|?bqn^?q|#-!GRhbeMA0xHr1?0Bmg(fX{FTo&W#<07*qoM6N<$f)H};GXMYp literal 627 zcmV-(0*w8MP)EX>4Tx04R}tkv&MmKpe$iQ?)8p2Q!E`WT-A$5EXIMDionYs1;guFdzMbCJjl7 zi=*ILaPVWX>fqw6tAnc`2!4RLxj8AiNQwVT3N2zhIPS;0dyl(!09Pw1n${^GZQdiO-40Ou8WPBhzJ%-x%jz=2#|grjql-Jh6~(VY!8sf~gTt5l2)_r+hB$ zvC4Rhu~w=mjeD{ehO_$0GSg`eA&x~XL4*Jq6%<@l-Yvm>k6|FR3)HKQ^L^|%^%EfY3|#3=f4K(Ce3D*m zYLO$LZyUI{Zff!#aJd5vJQeSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{002u#L_t(I%k9pw5x^h}Ls6My3=iwMJb*^<1l}X5!ckB` z=={3h=p>k^>VplLDRYaNZ4IrEgu6@s;tvr40BE@2%4jD!ZkJNZi5C^%6t}ho;=%v` N002ovPDHLkV1gQr{o4Ql From fb7294b782afc0690868b4889ad3db55637bada3 Mon Sep 17 00:00:00 2001 From: YoungOnion <39562198+YoungOnionMC@users.noreply.github.com> Date: Sat, 16 May 2026 23:08:26 -0600 Subject: [PATCH 02/14] update to use progress drawables --- .../machine/mui/MachineUIPanelBuilder.java | 10 +++++ .../api/machine/steam/SteamBoilerMachine.java | 4 +- .../api/recipe/gui/GTRecipeTypeUILayout.java | 13 +++--- .../api/recipe/gui/ProgressBarTextureSet.java | 14 +++---- .../gtceu/common/data/GTRecipeTypes.java | 40 ++++++++++++++----- .../electric/BatteryBufferMachine.java | 4 +- .../machine/electric/FisherMachine.java | 3 +- .../common/machine/mui/TestMuiMachine.java | 15 ++++--- .../multiblock/primitive/CokeOvenMachine.java | 3 +- .../PrimitiveBlastFurnaceMachine.java | 3 +- .../steam/SteamLiquidBoilerMachine.java | 4 +- .../machine/steam/SteamSolarBoiler.java | 3 +- .../steam/SteamSolidBoilerMachine.java | 6 +-- .../gtceu/common/mui/GTGuiTextures.java | 18 ++++----- .../gtceu/common/mui/GTMuiWidgets.java | 4 +- 15 files changed, 91 insertions(+), 53 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/mui/MachineUIPanelBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/machine/mui/MachineUIPanelBuilder.java index 4fb2dd0f2ae..46e5e2e58e7 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/mui/MachineUIPanelBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/mui/MachineUIPanelBuilder.java @@ -11,10 +11,12 @@ import com.gregtechceu.gtceu.common.mui.GTGuiTextures; import com.gregtechceu.gtceu.common.mui.GTMuiWidgets; +import brachy.modularui.drawable.ItemDrawable; import brachy.modularui.drawable.UITexture; import brachy.modularui.screen.UISettings; import brachy.modularui.value.sync.PanelSyncManager; import brachy.modularui.widget.ParentWidget; +import brachy.modularui.widgets.ButtonWidget; import brachy.modularui.widgets.layout.Flow; import lombok.Setter; import lombok.experimental.Accessors; @@ -99,6 +101,14 @@ public MachineUIPanel build(PanelSyncManager syncManager, UISettings settings) { } } + for (var cover : machine.getCoverContainer().getCovers()) { + attachLeft.child(new ButtonWidget<>() + .overlay(new ItemDrawable(cover.getAttachItem())) + .onMousePressed((context, button) -> { + return true; + })); + } + return panel; } 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 722707ac062..57a97de0ca1 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 @@ -1,5 +1,6 @@ package com.gregtechceu.gtceu.api.machine.steam; +import brachy.modularui.drawable.progress.ProgressDrawable; import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; @@ -332,10 +333,9 @@ public void buildMainUI(ParentWidget mainWidget, PosGuiData guiData, PanelSyn .size(14, 54)) .child(new ProgressWidget() .texture(progressTexture, - GTGuiTextures.PROGRESS_BAR_BOILER_HEAT, 54) + GTGuiTextures.PROGRESS_BAR_BOILER_HEAT, ProgressDrawable.Direction.UP) .size(14, 54) .value(tempPercentage) - .direction(ProgressWidget.Direction.UP) .tooltipAutoUpdate(true) .tooltipBuilder((r) -> r.addLine(Text .lang("gtceu.fluid.temperature", getCurrentTemperature()))))); diff --git a/src/main/java/com/gregtechceu/gtceu/api/recipe/gui/GTRecipeTypeUILayout.java b/src/main/java/com/gregtechceu/gtceu/api/recipe/gui/GTRecipeTypeUILayout.java index f15bc22dd5c..7734c3e4757 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/recipe/gui/GTRecipeTypeUILayout.java +++ b/src/main/java/com/gregtechceu/gtceu/api/recipe/gui/GTRecipeTypeUILayout.java @@ -350,12 +350,13 @@ public Builder setCapabilityContentBuilder(RecipeCapability cap, CapabilityCo public GTRecipeTypeUILayout build() { var progressWidgetSupplier = this.progressWidgetSupplier; - if (progressWidgetSupplier == null) progressWidgetSupplier = (l, v, m) -> new ProgressWidget() - .value(v) - .name("progressBar") - .texture(progressBar.get(m), progressBar.progressSize()) - .size(progressBar.progressSize()) - .direction(progressBar.fillDirection()); + if (progressWidgetSupplier == null) { + progressWidgetSupplier = (l, v, m) -> new ProgressWidget() + .value(v) + .name("progressBar") + .texture(progressBar.get(m), progressBar.fillDirection()) + .size(progressBar.progressSize()); + } var layout = new GTRecipeTypeUILayout(recipeType, capabilityInfo, recipeUIModifiers, progressWidgetSupplier, customUIBuilder); diff --git a/src/main/java/com/gregtechceu/gtceu/api/recipe/gui/ProgressBarTextureSet.java b/src/main/java/com/gregtechceu/gtceu/api/recipe/gui/ProgressBarTextureSet.java index 5baf8168699..767922e6f49 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/recipe/gui/ProgressBarTextureSet.java +++ b/src/main/java/com/gregtechceu/gtceu/api/recipe/gui/ProgressBarTextureSet.java @@ -3,7 +3,7 @@ import com.gregtechceu.gtceu.api.mui.SteamTextureSet; import brachy.modularui.drawable.UITexture; -import brachy.modularui.widgets.ProgressWidget; +import brachy.modularui.drawable.progress.ProgressDrawable; import lombok.Getter; import lombok.experimental.Accessors; import org.jetbrains.annotations.Nullable; @@ -13,9 +13,9 @@ public class ProgressBarTextureSet extends SteamTextureSet { private final int progressSize; - private final ProgressWidget.Direction fillDirection; + private final ProgressDrawable.Direction fillDirection; - public ProgressBarTextureSet(int progressSize, ProgressWidget.Direction fillDirection, UITexture main, + public ProgressBarTextureSet(int progressSize, ProgressDrawable.Direction fillDirection, UITexture main, @Nullable UITexture bronze, @Nullable UITexture steel) { super(main, bronze, steel); this.progressSize = progressSize; @@ -23,14 +23,14 @@ public ProgressBarTextureSet(int progressSize, ProgressWidget.Direction fillDire } public ProgressBarTextureSet(UITexture main, UITexture bronze, UITexture steel) { - this(20, ProgressWidget.Direction.RIGHT, main, bronze, steel); + this(20, ProgressDrawable.Direction.RIGHT, main, bronze, steel); } public ProgressBarTextureSet(UITexture main) { - this(20, ProgressWidget.Direction.RIGHT, main); + this(20, ProgressDrawable.Direction.RIGHT, main); } - public ProgressBarTextureSet(int progressSize, ProgressWidget.Direction fillDirection, UITexture main) { - this(20, fillDirection, main, null, null); + public ProgressBarTextureSet(int progressSize, ProgressDrawable.Direction fillDirection, UITexture main) { + this(progressSize, fillDirection, main, null, null); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeTypes.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeTypes.java index 9faa844071d..7ab4ff0f2c6 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeTypes.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeTypes.java @@ -32,6 +32,8 @@ import net.minecraftforge.fml.ModLoader; import brachy.modularui.api.drawable.Text; +import brachy.modularui.drawable.progress.CircularProgressDrawable; +import brachy.modularui.drawable.progress.ProgressDrawable; import brachy.modularui.widgets.ProgressWidget; import brachy.modularui.widgets.layout.Flow; @@ -180,7 +182,14 @@ public class GTRecipeTypes { .setMaxIOSize(1, 6, 1, 1).setEUIO(IO.IN) .prepareBuilder(recipeBuilder -> recipeBuilder.EUt(GTValues.VA[GTValues.LV])) .UI(builder -> builder - .setProgressBar(GTGuiTextures.PROGRESS_MIXER) + .setProgressBarSupplier((l, v, m) -> { + return new CircularProgressDrawable() + .emptyTexture(GTGuiTextures.PROGRESS_BATH[0]) + .filledTexture(GTGuiTextures.PROGRESS_BATH[1]) + .clockwise() + .asWidget() + .value(v); + }) .setItemSlotOverlay(IO.IN, 0, GTGuiTextures.BREWER_OVERLAY) .setItemSlotsOverlay(IO.OUT, 0, 5, GTGuiTextures.DUST_OVERLAY) .setFluidSlotOverlay(IO.IN, 0, GTGuiTextures.CENTRIFUGE_OVERLAY)) @@ -323,10 +332,8 @@ public class GTRecipeTypes { .texture( GTGuiTextures.PROGRESS_HAMMER .get(machine), - 20) - .size(20) - .direction( - ProgressWidget.Direction.DOWN)) + ProgressDrawable.Direction.DOWN) + .size(20)) .child(GTGuiTextures.PROGRESS_HAMMER_BASE .get(machine) .asWidget() @@ -355,15 +362,21 @@ public class GTRecipeTypes { .child(new ProgressWidget() .value(value) .name("progressBar") - .texture(GTGuiTextures.PROGRESS_BAR_LATHE, 20) - .size(20) - .direction(ProgressWidget.Direction.RIGHT)) + .texture(GTGuiTextures.PROGRESS_BAR_LATHE, ProgressDrawable.Direction.RIGHT) + .size(20)) .child(GTGuiTextures.PROGRESS_BAR_LATHE_BASE.asWidget().width(5)))) .setSound(GTSoundEntries.CUT); public final static GTRecipeType MIXER_RECIPES = register("mixer", ELECTRIC).setMaxIOSize(6, 1, 2, 1).setEUIO(IO.IN) .UI(builder -> builder - .setProgressBar(GTGuiTextures.PROGRESS_MIXER) + .setProgressBarSupplier((l, v, m) -> { + return new CircularProgressDrawable() + .emptyTexture(GTGuiTextures.PROGRESS_MIXER[0]) + .filledTexture(GTGuiTextures.PROGRESS_MIXER[1]) + .clockwise() + .asWidget() + .value(v); + }) .setItemSlotsOverlay(IO.IN, 0, 5, GTGuiTextures.DUST_OVERLAY) .setItemSlotOverlay(IO.OUT, 0, GTGuiTextures.DUST_OVERLAY)) .setSound(GTSoundEntries.MIXER); @@ -372,7 +385,14 @@ public class GTRecipeTypes { .setEUIO(IO.IN) .prepareBuilder(recipeBuilder -> recipeBuilder.duration(400).EUt(16)) .UI(builder -> builder - .setProgressBar(GTGuiTextures.PROGRESS_BATH) + .setProgressBarSupplier((l, v, m) -> { + return new CircularProgressDrawable() + .emptyTexture(GTGuiTextures.PROGRESS_BATH[0]) + .filledTexture(GTGuiTextures.PROGRESS_BATH[1]) + .clockwise() + .asWidget() + .value(v); + }) .setItemSlotOverlay(IO.IN, 0, GTGuiTextures.CRUSHED_ORE_OVERLAY) .setItemSlotOverlay(IO.OUT, 0, GTGuiTextures.DUST_OVERLAY)) .setSound(GTSoundEntries.BATH); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BatteryBufferMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BatteryBufferMachine.java index 6b7f09218a8..7b95e44198b 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BatteryBufferMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BatteryBufferMachine.java @@ -1,5 +1,6 @@ package com.gregtechceu.gtceu.common.machine.electric; +import brachy.modularui.drawable.progress.ProgressDrawable; import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; @@ -147,8 +148,7 @@ public void buildMainUI(ParentWidget mainWidget, PosGuiData guiData, PanelSyn flow.child(new ProgressWidget() .texture(GTGuiTextures.PROGRESS_BAR_BOILER_EMPTY_STEEL, - GTGuiTextures.PROGRESS_BAR_BOILER_HEAT, 60) - .direction(ProgressWidget.Direction.UP) + GTGuiTextures.PROGRESS_BAR_BOILER_HEAT, ProgressDrawable.Direction.UP) .value(energyPercentage) .marginLeft(5) .size(18, 60) diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/FisherMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/FisherMachine.java index c5173eaaeaa..30ee10ca498 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/FisherMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/FisherMachine.java @@ -1,5 +1,6 @@ package com.gregtechceu.gtceu.common.machine.electric; +import brachy.modularui.drawable.progress.ProgressDrawable; import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; @@ -317,7 +318,7 @@ public void buildMainUI(ParentWidget mainWidget, PosGuiData guiData, PanelSyn .child(new ItemSlot().slot(new ModularSlot(baitHandler, 0)) .background(GTGuiTextures.SLOT, GTGuiTextures.STRING_SLOT_OVERLAY).marginRight(2)) .child(new ProgressWidget() - .texture(GTGuiTextures.PROGRESS_ARROW.main(), 16) + .texture(GTGuiTextures.PROGRESS_ARROW.main(), ProgressDrawable.Direction.RIGHT) .value(progressPercent)) .child(GTMuiMachineUtil.createSlotGroupFromInventory(cache, "output_item_inv", cache.getSize(), 'i', diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/mui/TestMuiMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/mui/TestMuiMachine.java index e590f0b74aa..9f682f3676c 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/mui/TestMuiMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/mui/TestMuiMachine.java @@ -1,5 +1,7 @@ package com.gregtechceu.gtceu.common.machine.mui; +import brachy.modularui.drawable.progress.CircularProgressDrawable; +import brachy.modularui.drawable.progress.ProgressDrawable; import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.TickableSubscription; @@ -324,12 +326,13 @@ public ModularPanel buildUI(PosGuiData guiData, PanelSyncManager syncManager, .crossAxisAlignment(Alignment.CrossAxis.CENTER) .child(new ProgressWidget() .value(progressPercent) - .texture(GTGuiTextures.PROGRESS_ARROW.main(), 20)) - .child(new ProgressWidget() - .value(progressPercent) - .texture(GTGuiTextures.PROGRESS_MIXER.main(), 20) - .direction( - ProgressWidget.Direction.CIRCULAR_CW)) + .texture(GTGuiTextures.PROGRESS_ARROW.main(), ProgressDrawable.Direction.RIGHT)) + .child(new CircularProgressDrawable() + .emptyTexture(GTGuiTextures.PROGRESS_MIXER[0]) + .filledTexture(GTGuiTextures.PROGRESS_MIXER[1]) + .clockwise() + .asWidget() + .value(progressPercent)) .child(Flow.row().coverChildrenWidth().height(22) .child(new ToggleButton() .value(new BoolValue.Dynamic( diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/CokeOvenMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/CokeOvenMachine.java index c7700cb8c84..52eb0caf725 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/CokeOvenMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/CokeOvenMachine.java @@ -1,5 +1,6 @@ package com.gregtechceu.gtceu.common.machine.multiblock.primitive; +import brachy.modularui.drawable.progress.ProgressDrawable; import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.machine.feature.IMuiMachine; @@ -70,7 +71,7 @@ public void buildMainUI(ParentWidget mainWidget, PosGuiData guiData, PanelSyn .child(new ProgressWidget() .value(progressPercent) .size(20, 15) - .texture(GTGuiTextures.PRIMITIVE_BLAST_FURNACE_PROGRESS_BAR, 18) + .texture(GTGuiTextures.PRIMITIVE_BLAST_FURNACE_PROGRESS_BAR, ProgressDrawable.Direction.RIGHT) .margin(4, 0)) .child(new ItemSlot().syncHandler(new ItemSlotSyncHandler( diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveBlastFurnaceMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveBlastFurnaceMachine.java index 24301ea7dba..fa4c3f18e40 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveBlastFurnaceMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveBlastFurnaceMachine.java @@ -1,5 +1,6 @@ package com.gregtechceu.gtceu.common.machine.multiblock.primitive; +import brachy.modularui.drawable.progress.ProgressDrawable; import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; @@ -158,7 +159,7 @@ public void buildMainUI(ParentWidget mainWidget, PosGuiData guiData, PanelSyn .child(new ProgressWidget() .value(progressPercent) .size(20, 15) - .texture(GTGuiTextures.PRIMITIVE_BLAST_FURNACE_PROGRESS_BAR, 0) + .texture(GTGuiTextures.PRIMITIVE_BLAST_FURNACE_PROGRESS_BAR, ProgressDrawable.Direction.RIGHT) .margin(5, 5, 0, 0)) .child(createExportItemSlot(syncManager, theme)); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamLiquidBoilerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamLiquidBoilerMachine.java index b47eb32a336..6e602176505 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamLiquidBoilerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamLiquidBoilerMachine.java @@ -1,5 +1,6 @@ package com.gregtechceu.gtceu.common.machine.steam; +import brachy.modularui.drawable.progress.ProgressDrawable; import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.FluidRecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.IO; @@ -94,9 +95,8 @@ public void buildMainUI(ParentWidget mainWidget, PosGuiData guiData, PanelSyn .crossAxisAlignment(Alignment.CrossAxis.CENTER) .child(new ProgressWidget() .size(18) - .texture(progressTexture, 18) + .texture(progressTexture, ProgressDrawable.Direction.UP) .value(progressPercent) - .direction(ProgressWidget.Direction.UP) .setEnabledIf((w) -> progressPercent.getFloatValue() > -1f)) .child(new FluidSlot() .syncHandler(new FluidSlotSyncHandler(fuelTank.getStorages()[0]) diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamSolarBoiler.java b/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamSolarBoiler.java index d7a6a4a5175..147cec0985a 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamSolarBoiler.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamSolarBoiler.java @@ -1,5 +1,6 @@ package com.gregtechceu.gtceu.common.machine.steam; +import brachy.modularui.drawable.progress.ProgressDrawable; import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.machine.steam.SteamBoilerMachine; import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; @@ -87,7 +88,7 @@ public void buildMainUI(ParentWidget mainWidget, PosGuiData guiData, PanelSyn .right(20) .top(30) .size(18) - .texture(progressTexture, 20) + .texture(progressTexture, ProgressDrawable.Direction.UP) .value(canSeeSun)); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamSolidBoilerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamSolidBoilerMachine.java index 5894bf8ff96..f8fac91650d 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamSolidBoilerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamSolidBoilerMachine.java @@ -1,5 +1,6 @@ package com.gregtechceu.gtceu.common.machine.steam; +import brachy.modularui.drawable.progress.ProgressDrawable; import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; @@ -139,9 +140,8 @@ public void buildMainUI(ParentWidget mainWidget, PosGuiData guiData, PanelSyn .slot(new ModularSlot(this.fuelHandler, 0))) .child(new ProgressWidget() .size(18) - .texture(progressTexture, 18) - .value(progressPercent) - .direction(ProgressWidget.Direction.UP)) + .texture(progressTexture, ProgressDrawable.Direction.UP) + .value(progressPercent)) .child(new ItemSlot() .slot(new ModularSlot(this.ashHandler, 0)))); } 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 fe3fc3b8988..85206c3b643 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/mui/GTGuiTextures.java +++ b/src/main/java/com/gregtechceu/gtceu/common/mui/GTGuiTextures.java @@ -11,7 +11,7 @@ import brachy.modularui.drawable.ColorType; import brachy.modularui.drawable.TabTexture; import brachy.modularui.drawable.UITexture; -import brachy.modularui.widgets.ProgressWidget; +import brachy.modularui.drawable.progress.ProgressDrawable; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; @@ -475,8 +475,8 @@ interface IDs { ProgressBarTextureSet PROGRESS_ASSEMBLER = new ProgressBarTextureSet( progressBar("textures/gui/progress_bar/progress_bar_assembler.png", ColorType.DEFAULT)); - ProgressBarTextureSet PROGRESS_BATH = new ProgressBarTextureSet(20, ProgressWidget.Direction.CIRCULAR_CW, - progressBar("textures/gui/progress_bar/progress_bar_bath.png", ColorType.DEFAULT)); + UITexture[] PROGRESS_BATH = slice("textures/gui/progress_bar/progress_bar_bath.png", + 20, 40, 20, 20, ColorType.DEFAULT); ProgressBarTextureSet PROGRESS_BENDING = new ProgressBarTextureSet( progressBar("textures/gui/progress_bar/progress_bar_bending.png", ColorType.DEFAULT)); @@ -512,7 +512,7 @@ interface IDs { ProgressBarTextureSet PROGRESS_GAS_COLLECTOR = new ProgressBarTextureSet( progressBar("textures/gui/progress_bar/progress_bar_gas_collector.png", ColorType.DEFAULT)); - ProgressBarTextureSet PROGRESS_HAMMER = new ProgressBarTextureSet(20, ProgressWidget.Direction.DOWN, + ProgressBarTextureSet PROGRESS_HAMMER = new ProgressBarTextureSet(20, ProgressDrawable.Direction.DOWN, progressBar("textures/gui/progress_bar/progress_bar_hammer.png", ColorType.DEFAULT), progressBar("textures/gui/progress_bar/progress_bar_hammer_bronze.png"), progressBar("textures/gui/progress_bar/progress_bar_hammer_steel.png")); @@ -522,7 +522,7 @@ interface IDs { fullImage("textures/gui/progress_bar/progress_bar_hammer_base_bronze.png"), fullImage("textures/gui/progress_bar/progress_bar_hammer_base_steel.png")); - ProgressBarTextureSet PROGRESS_MACERATE = new ProgressBarTextureSet(20, ProgressWidget.Direction.RIGHT, + ProgressBarTextureSet PROGRESS_MACERATE = new ProgressBarTextureSet(20, ProgressDrawable.Direction.RIGHT, progressBar("textures/gui/progress_bar/progress_bar_macerate.png", ColorType.DEFAULT), progressBar("textures/gui/progress_bar/progress_bar_macerate_bronze.png"), progressBar("textures/gui/progress_bar/progress_bar_macerate_steel.png")); @@ -530,10 +530,10 @@ interface IDs { ProgressBarTextureSet PROGRESS_MAGNET = new ProgressBarTextureSet( progressBar("textures/gui/progress_bar/progress_bar_magnet.png", ColorType.DEFAULT)); - ProgressBarTextureSet PROGRESS_MIXER = new ProgressBarTextureSet(20, ProgressWidget.Direction.CIRCULAR_CW, - progressBar("textures/gui/progress_bar/progress_bar_mixer.png", ColorType.DEFAULT)); + UITexture[] PROGRESS_MIXER = slice("textures/gui/progress_bar/progress_bar_mixer.png", + 20, 40, 20, 20, ColorType.DEFAULT); - ProgressBarTextureSet PROGRESS_SIFTER = new ProgressBarTextureSet(20, ProgressWidget.Direction.DOWN, + ProgressBarTextureSet PROGRESS_SIFTER = new ProgressBarTextureSet(20, ProgressDrawable.Direction.DOWN, progressBar("textures/gui/progress_bar/progress_bar_sift.png", ColorType.DEFAULT)); ProgressBarTextureSet PROGRESS_CUTTER = new ProgressBarTextureSet( @@ -590,7 +590,7 @@ interface IDs { UITexture PROGRESS_BAR_BOILER_FUEL_STEEL = progressBar( "textures/gui/progress_bar/progress_bar_boiler_fuel_steel.png", 18, 36); - ProgressBarTextureSet PROGRESS_BOILER_FUEL_STEEL = new ProgressBarTextureSet(18, ProgressWidget.Direction.UP, + ProgressBarTextureSet PROGRESS_BOILER_FUEL_STEEL = new ProgressBarTextureSet(18, ProgressDrawable.Direction.UP, PROGRESS_BAR_BOILER_FUEL_STEEL); UITexture PROGRESS_BAR_CRACKING_INPUT = progressBar("textures/gui/progress_bar/progress_bar_cracking_2.png", 21, 38, diff --git a/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java b/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java index 74a8d380f1d..e30ed61dc96 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java +++ b/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java @@ -147,7 +147,7 @@ public static ToggleButton createPowerButton(IControllable workable) { "behaviour.soft_hammer"); } - public static ProgressWidget createProgressBar(IRecipeLogicMachine workableMachine, PanelSyncManager syncManager, + /*public static ProgressWidget createProgressBar(IRecipeLogicMachine workableMachine, PanelSyncManager syncManager, UITexture texture, int size) { DoubleSyncValue progressPercent = syncManager.getOrCreateSyncHandler("progressPercent", DoubleSyncValue.class, () -> new DoubleSyncValue(() -> { @@ -158,7 +158,7 @@ public static ProgressWidget createProgressBar(IRecipeLogicMachine workableMachi return new ProgressWidget() .texture(texture, size) .value(progressPercent); - } + }*/ public static FluidSlot createTankWidget() { return new FluidSlot().size(20, 58).alwaysShowFull(false); From d959ad47a1b78afde6871bdcf9f4d1a4fee033f0 Mon Sep 17 00:00:00 2001 From: Spicierspace153 <21964509+Spicierspace153@users.noreply.github.com> Date: Sat, 16 May 2026 23:25:11 -0600 Subject: [PATCH 03/14] magnet cts fixes and button sizing --- .../common/item/behavior/ItemMagnetBehavior.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/ItemMagnetBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/ItemMagnetBehavior.java index 13e1d3970b2..5ac8f6bb0a2 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/ItemMagnetBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/ItemMagnetBehavior.java @@ -94,7 +94,7 @@ public ModularPanel buildUI(PlayerInventoryGuiData data, PanelSyncManager EnumSyncValue filterSync = new EnumSyncValue<>(Filter.class, () -> Filter.get(data.getUsedItemStack().getOrCreateTag().getInt(FILTER_ORDINAL_TAG)), - filter -> data.getUsedItemStack().getOrCreateTag().putInt(FILTER_ORDINAL_TAG, filter.ordinal())); + filter -> data.getUsedItemStack().getOrCreateTag().putInt(FILTER_ORDINAL_TAG, filter.ordinal())).allowC2S(); PagedWidget pages = new PagedWidget<>() .left((176 - 80) / 2) @@ -130,8 +130,8 @@ public ModularPanel buildUI(PlayerInventoryGuiData data, PanelSyncManager .size(20) .value(filterSync) .stateCount(Filter.values().length) - .stateOverlay(Filter.SIMPLE, new ItemDrawable(GTItems.ITEM_FILTER.asItem())) - .stateOverlay(Filter.TAG, new ItemDrawable(GTItems.TAG_FILTER.asItem())) + .stateOverlay(Filter.SIMPLE, new ItemDrawable(GTItems.ITEM_FILTER.asItem()).asIcon().size(16)) + .stateOverlay(Filter.TAG, new ItemDrawable(GTItems.TAG_FILTER.asItem()).asIcon().size(16)) .tooltipBuilder(r -> r.addLine(Text.dynamic( () -> Component.translatable(filterSync.getValue().getTooltip()))))) .child(pages) @@ -149,9 +149,9 @@ private ParentWidget createSimpleFilterPage(SimpleItemFilter filter) { .changeListener((stack, amount, client, init) -> handler.setStackInSlot(i, stack)) .ignoreMaxStackSize(true).accessibility(true, false)))); - BooleanSyncValue blacklist = new BooleanSyncValue(filter::isBlackList, filter::setBlackList); + BooleanSyncValue blacklist = new BooleanSyncValue(filter::isBlackList, filter::setBlackList).allowC2S(); - BooleanSyncValue ignoreNBT = new BooleanSyncValue(filter::isIgnoreNbt, filter::setIgnoreNbt); + BooleanSyncValue ignoreNBT = new BooleanSyncValue(filter::isIgnoreNbt, filter::setIgnoreNbt).allowC2S(); Flow filterButtons = Flow.col() .coverChildren() @@ -165,7 +165,7 @@ private ParentWidget createSimpleFilterPage(SimpleItemFilter filter) { } private ParentWidget createTagFilterPage(TagItemFilter filter) { - StringSyncValue filterString = new StringSyncValue(filter::getFilterString, filter::setFilterString); + StringSyncValue filterString = new StringSyncValue(filter::getFilterString, filter::setFilterString).allowC2S(); RichTooltip infoTooltip = new RichTooltip().add("cover.tag_filter.info"); return new ParentWidget<>() From 02f4dd223aec6878c69b32b8ed6380a4f533b3e7 Mon Sep 17 00:00:00 2001 From: YoungOnion <39562198+YoungOnionMC@users.noreply.github.com> Date: Sat, 16 May 2026 23:25:43 -0600 Subject: [PATCH 04/14] small padding + datagen --- .../gtceu/blockstates/test_mui_new.json | 28 ------------- .../resources/assets/gtceu/lang/en_ud.json | 18 -------- .../resources/assets/gtceu/lang/en_us.json | 18 -------- .../models/block/machine/test_mui_new.json | 42 ------------------- .../gtceu/models/item/test_mui_new.json | 3 -- .../gtceu/api/machine/mui/MachineUIPanel.java | 1 + .../api/machine/steam/SteamBoilerMachine.java | 2 +- .../electric/BatteryBufferMachine.java | 2 +- .../machine/electric/FisherMachine.java | 2 +- .../common/machine/mui/TestMuiMachine.java | 4 +- .../multiblock/primitive/CokeOvenMachine.java | 2 +- .../PrimitiveBlastFurnaceMachine.java | 2 +- .../steam/SteamLiquidBoilerMachine.java | 2 +- .../machine/steam/SteamSolarBoiler.java | 2 +- .../steam/SteamSolidBoilerMachine.java | 2 +- .../gtceu/common/mui/GTMuiWidgets.java | 26 ++++++------ 16 files changed, 25 insertions(+), 131 deletions(-) delete mode 100644 src/generated/resources/assets/gtceu/blockstates/test_mui_new.json delete mode 100644 src/generated/resources/assets/gtceu/models/block/machine/test_mui_new.json delete mode 100644 src/generated/resources/assets/gtceu/models/item/test_mui_new.json diff --git a/src/generated/resources/assets/gtceu/blockstates/test_mui_new.json b/src/generated/resources/assets/gtceu/blockstates/test_mui_new.json deleted file mode 100644 index 41ab9b075f2..00000000000 --- a/src/generated/resources/assets/gtceu/blockstates/test_mui_new.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "variants": { - "facing=down": { - "model": "gtceu:block/machine/test_mui_new", - "x": 90 - }, - "facing=east": { - "model": "gtceu:block/machine/test_mui_new", - "y": 90 - }, - "facing=north": { - "model": "gtceu:block/machine/test_mui_new" - }, - "facing=south": { - "model": "gtceu:block/machine/test_mui_new", - "y": 180 - }, - "facing=up": { - "gtceu:z": 180, - "model": "gtceu:block/machine/test_mui_new", - "x": 270 - }, - "facing=west": { - "model": "gtceu:block/machine/test_mui_new", - "y": 270 - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/lang/en_ud.json b/src/generated/resources/assets/gtceu/lang/en_ud.json index 1473ccf0ee7..053171bd481 100644 --- a/src/generated/resources/assets/gtceu/lang/en_ud.json +++ b/src/generated/resources/assets/gtceu/lang/en_ud.json @@ -1140,7 +1140,6 @@ "block.gtceu.superconducting_coil": "ʞɔoןᗺ ןıoƆ buıʇɔnpuoɔɹǝdnS", "block.gtceu.tempered_glass": "ssɐן⅁ pǝɹǝdɯǝ⟘", "block.gtceu.test_mui": "ınW ʇsǝ⟘", - "block.gtceu.test_mui_new": "ʍǝN ınW ʇsǝ⟘", "block.gtceu.the_end_marker": "puƎ ǝɥ⟘", "block.gtceu.the_nether_marker": "ɹǝɥʇǝN ǝɥ⟘", "block.gtceu.titanium_crate": "ǝʇɐɹƆ ɯnıuɐʇı⟘", @@ -1785,9 +1784,7 @@ "config.gtceu.option.coloredWireOutline": "ǝuıןʇnOǝɹıMpǝɹoןoɔ", "config.gtceu.option.compat": "ʇɐdɯoɔ", "config.gtceu.option.createCompat": "ʇɐdɯoƆǝʇɐǝɹɔ", - "config.gtceu.option.cursorColor": "ɹoןoƆɹosɹnɔ", "config.gtceu.option.debug": "bnqǝp", - "config.gtceu.option.debugUI": "I∩bnqǝp", "config.gtceu.option.debugWorldgen": "uǝbpןɹoMbnqǝp", "config.gtceu.option.defaultPaintingColor": "ɹoןoƆbuıʇuıɐԀʇןnɐɟǝp", "config.gtceu.option.defaultUIColor": "ɹoןoƆI∩ʇןnɐɟǝp", @@ -1867,7 +1864,6 @@ "config.gtceu.option.meHatchEnergyUsage": "ǝbɐs∩ʎbɹǝuƎɥɔʇɐHǝɯ", "config.gtceu.option.minerSpeed": "pǝǝdSɹǝuıɯ", "config.gtceu.option.minimap": "dɐɯıuıɯ", - "config.gtceu.option.mui": "ınɯ", "config.gtceu.option.nanoSaber": "ɹǝqɐSouɐu", "config.gtceu.option.nanoSaberBaseDamage": "ǝbɐɯɐᗡǝsɐᗺɹǝqɐSouɐu", "config.gtceu.option.nanoSaberDamageBoost": "ʇsooᗺǝbɐɯɐᗡɹǝqɐSouɐu", @@ -1888,7 +1884,6 @@ "config.gtceu.option.oreVeinGridSize": "ǝzıSpıɹ⅁uıǝΛǝɹo", "config.gtceu.option.oreVeinRandomOffset": "ʇǝsɟɟOɯopuɐᴚuıǝΛǝɹo", "config.gtceu.option.oreVeins": "suıǝΛǝɹo", - "config.gtceu.option.outlineColor": "ɹoןoƆǝuıןʇno", "config.gtceu.option.ownerOPBypass": "ssɐdʎᗺԀOɹǝuʍo", "config.gtceu.option.prospectorEnergyUseMultiplier": "ɹǝıןdıʇןnWǝs∩ʎbɹǝuƎɹoʇɔǝdsoɹd", "config.gtceu.option.quantumTank": "ʞuɐ⟘ɯnʇuɐnb", @@ -1908,20 +1903,8 @@ "config.gtceu.option.rngDamageElectricTools": "sןoo⟘ɔıɹʇɔǝןƎǝbɐɯɐᗡbuɹ", "config.gtceu.option.rubberTreeSpawnChance": "ǝɔuɐɥƆuʍɐdSǝǝɹ⟘ɹǝqqnɹ", "config.gtceu.option.sandOresFall": "ןןɐℲsǝɹOpuɐs", - "config.gtceu.option.scale": "ǝןɐɔs", "config.gtceu.option.shouldWeatherOrTerrainExplosion": "uoısoןdxƎuıɐɹɹǝ⟘ɹOɹǝɥʇɐǝMpןnoɥs", "config.gtceu.option.showDimensionTier": "ɹǝı⟘uoısuǝɯıᗡʍoɥs", - "config.gtceu.option.showExtra": "ɐɹʇxƎʍoɥs", - "config.gtceu.option.showHovered": "pǝɹǝʌoHʍoɥs", - "config.gtceu.option.showOutline": "ǝuıןʇnOʍoɥs", - "config.gtceu.option.showParent": "ʇuǝɹɐԀʍoɥs", - "config.gtceu.option.showParentOutline": "ǝuıןʇnOʇuǝɹɐԀʍoɥs", - "config.gtceu.option.showParentPos": "soԀʇuǝɹɐԀʍoɥs", - "config.gtceu.option.showParentSize": "ǝzıSʇuǝɹɐԀʍoɥs", - "config.gtceu.option.showParentWidgetTheme": "ǝɯǝɥ⟘ʇǝbpıMʇuǝɹɐԀʍoɥs", - "config.gtceu.option.showPos": "soԀʍoɥs", - "config.gtceu.option.showSize": "ǝzıSʍoɥs", - "config.gtceu.option.showWidgetTheme": "ǝɯǝɥ⟘ʇǝbpıMʍoɥs", "config.gtceu.option.smallBoilers": "sɹǝןıoᗺןןɐɯs", "config.gtceu.option.smoothProgressBar": "ɹɐᗺssǝɹboɹԀɥʇooɯs", "config.gtceu.option.solarBoilerBaseOutput": "ʇndʇnOǝsɐᗺɹǝןıoᗺɹɐןos", @@ -1935,7 +1918,6 @@ "config.gtceu.option.surfaceRockProspectRange": "ǝbuɐᴚʇɔǝdsoɹԀʞɔoᴚǝɔɐɟɹns", "config.gtceu.option.tankItemFluidPreview": "ʍǝıʌǝɹԀpınןℲɯǝʇIʞuɐʇ", "config.gtceu.option.temperaturesInCelsius": "snısןǝƆuIsǝɹnʇɐɹǝdɯǝʇ", - "config.gtceu.option.textColor": "ɹoןoƆʇxǝʇ", "config.gtceu.option.titaniumBoilerHeatSpeed": "pǝǝdSʇɐǝHɹǝןıoᗺɯnıuɐʇıʇ", "config.gtceu.option.titaniumBoilerMaxTemperature": "ǝɹnʇɐɹǝdɯǝ⟘xɐWɹǝןıoᗺɯnıuɐʇıʇ", "config.gtceu.option.toggle": "ǝןbboʇ", diff --git a/src/generated/resources/assets/gtceu/lang/en_us.json b/src/generated/resources/assets/gtceu/lang/en_us.json index 6233a2e9bec..0dd3b015484 100644 --- a/src/generated/resources/assets/gtceu/lang/en_us.json +++ b/src/generated/resources/assets/gtceu/lang/en_us.json @@ -1140,7 +1140,6 @@ "block.gtceu.superconducting_coil": "Superconducting Coil Block", "block.gtceu.tempered_glass": "Tempered Glass", "block.gtceu.test_mui": "Test Mui", - "block.gtceu.test_mui_new": "Test Mui New", "block.gtceu.the_end_marker": "The End", "block.gtceu.the_nether_marker": "The Nether", "block.gtceu.titanium_crate": "Titanium Crate", @@ -1785,9 +1784,7 @@ "config.gtceu.option.coloredWireOutline": "coloredWireOutline", "config.gtceu.option.compat": "compat", "config.gtceu.option.createCompat": "createCompat", - "config.gtceu.option.cursorColor": "cursorColor", "config.gtceu.option.debug": "debug", - "config.gtceu.option.debugUI": "debugUI", "config.gtceu.option.debugWorldgen": "debugWorldgen", "config.gtceu.option.defaultPaintingColor": "defaultPaintingColor", "config.gtceu.option.defaultUIColor": "defaultUIColor", @@ -1867,7 +1864,6 @@ "config.gtceu.option.meHatchEnergyUsage": "meHatchEnergyUsage", "config.gtceu.option.minerSpeed": "minerSpeed", "config.gtceu.option.minimap": "minimap", - "config.gtceu.option.mui": "mui", "config.gtceu.option.nanoSaber": "nanoSaber", "config.gtceu.option.nanoSaberBaseDamage": "nanoSaberBaseDamage", "config.gtceu.option.nanoSaberDamageBoost": "nanoSaberDamageBoost", @@ -1888,7 +1884,6 @@ "config.gtceu.option.oreVeinGridSize": "oreVeinGridSize", "config.gtceu.option.oreVeinRandomOffset": "oreVeinRandomOffset", "config.gtceu.option.oreVeins": "oreVeins", - "config.gtceu.option.outlineColor": "outlineColor", "config.gtceu.option.ownerOPBypass": "ownerOPBypass", "config.gtceu.option.prospectorEnergyUseMultiplier": "prospectorEnergyUseMultiplier", "config.gtceu.option.quantumTank": "quantumTank", @@ -1908,20 +1903,8 @@ "config.gtceu.option.rngDamageElectricTools": "rngDamageElectricTools", "config.gtceu.option.rubberTreeSpawnChance": "rubberTreeSpawnChance", "config.gtceu.option.sandOresFall": "sandOresFall", - "config.gtceu.option.scale": "scale", "config.gtceu.option.shouldWeatherOrTerrainExplosion": "shouldWeatherOrTerrainExplosion", "config.gtceu.option.showDimensionTier": "showDimensionTier", - "config.gtceu.option.showExtra": "showExtra", - "config.gtceu.option.showHovered": "showHovered", - "config.gtceu.option.showOutline": "showOutline", - "config.gtceu.option.showParent": "showParent", - "config.gtceu.option.showParentOutline": "showParentOutline", - "config.gtceu.option.showParentPos": "showParentPos", - "config.gtceu.option.showParentSize": "showParentSize", - "config.gtceu.option.showParentWidgetTheme": "showParentWidgetTheme", - "config.gtceu.option.showPos": "showPos", - "config.gtceu.option.showSize": "showSize", - "config.gtceu.option.showWidgetTheme": "showWidgetTheme", "config.gtceu.option.smallBoilers": "smallBoilers", "config.gtceu.option.smoothProgressBar": "smoothProgressBar", "config.gtceu.option.solarBoilerBaseOutput": "solarBoilerBaseOutput", @@ -1935,7 +1918,6 @@ "config.gtceu.option.surfaceRockProspectRange": "surfaceRockProspectRange", "config.gtceu.option.tankItemFluidPreview": "tankItemFluidPreview", "config.gtceu.option.temperaturesInCelsius": "temperaturesInCelsius", - "config.gtceu.option.textColor": "textColor", "config.gtceu.option.titaniumBoilerHeatSpeed": "titaniumBoilerHeatSpeed", "config.gtceu.option.titaniumBoilerMaxTemperature": "titaniumBoilerMaxTemperature", "config.gtceu.option.toggle": "toggle", diff --git a/src/generated/resources/assets/gtceu/models/block/machine/test_mui_new.json b/src/generated/resources/assets/gtceu/models/block/machine/test_mui_new.json deleted file mode 100644 index 12fd1d59a84..00000000000 --- a/src/generated/resources/assets/gtceu/models/block/machine/test_mui_new.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "parent": "minecraft:block/block", - "loader": "gtceu:machine", - "machine": "gtceu:test_mui_new", - "replaceable_textures": [ - "all" - ], - "variants": { - "recipe_logic_status=idle": { - "model": { - "parent": "gtceu:block/machine/part/computer_monitor", - "textures": { - "all": "gtceu:block/casings/solid/machine_casing_clean_stainless_steel" - } - } - }, - "recipe_logic_status=suspend": { - "model": { - "parent": "gtceu:block/machine/part/computer_monitor", - "textures": { - "all": "gtceu:block/casings/solid/machine_casing_clean_stainless_steel" - } - } - }, - "recipe_logic_status=waiting": { - "model": { - "parent": "gtceu:block/machine/part/computer_monitor", - "textures": { - "all": "gtceu:block/casings/solid/machine_casing_clean_stainless_steel" - } - } - }, - "recipe_logic_status=working": { - "model": { - "parent": "gtceu:block/machine/part/computer_monitor", - "textures": { - "all": "gtceu:block/casings/solid/machine_casing_clean_stainless_steel" - } - } - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/models/item/test_mui_new.json b/src/generated/resources/assets/gtceu/models/item/test_mui_new.json deleted file mode 100644 index e741c72dc8d..00000000000 --- a/src/generated/resources/assets/gtceu/models/item/test_mui_new.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "gtceu:block/machine/test_mui_new" -} \ No newline at end of file diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/mui/MachineUIPanel.java b/src/main/java/com/gregtechceu/gtceu/api/machine/mui/MachineUIPanel.java index beb944f924a..fa8a105fe99 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/mui/MachineUIPanel.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/mui/MachineUIPanel.java @@ -65,6 +65,7 @@ public MachineUIPanel(MetaMachine machine, UISettings settings, boolean attachPl panelContents.child(mainContents); if (attachPlayerInventory) { + panelContents.childPadding(2); var inventory = SlotGroupWidget.playerInventory((index, slot) -> slot) .marginTop(1) .marginBottom(3); 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 57a97de0ca1..e5b181ff6e7 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 @@ -1,6 +1,5 @@ package com.gregtechceu.gtceu.api.machine.steam; -import brachy.modularui.drawable.progress.ProgressDrawable; import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; @@ -38,6 +37,7 @@ import brachy.modularui.api.drawable.Text; import brachy.modularui.drawable.UITexture; +import brachy.modularui.drawable.progress.ProgressDrawable; import brachy.modularui.factory.PosGuiData; import brachy.modularui.screen.UISettings; import brachy.modularui.value.sync.DoubleSyncValue; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BatteryBufferMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BatteryBufferMachine.java index 7b95e44198b..5c5f0c3f651 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BatteryBufferMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BatteryBufferMachine.java @@ -1,6 +1,5 @@ package com.gregtechceu.gtceu.common.machine.electric; -import brachy.modularui.drawable.progress.ProgressDrawable; import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; @@ -32,6 +31,7 @@ import brachy.modularui.api.drawable.IDrawable; import brachy.modularui.api.drawable.Text; +import brachy.modularui.drawable.progress.ProgressDrawable; import brachy.modularui.factory.PosGuiData; import brachy.modularui.screen.UISettings; import brachy.modularui.value.sync.DoubleSyncValue; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/FisherMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/FisherMachine.java index 30ee10ca498..1e46e31d432 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/FisherMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/FisherMachine.java @@ -1,6 +1,5 @@ package com.gregtechceu.gtceu.common.machine.electric; -import brachy.modularui.drawable.progress.ProgressDrawable; import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; @@ -39,6 +38,7 @@ import net.minecraft.world.phys.Vec3; import brachy.modularui.drawable.ItemDrawable; +import brachy.modularui.drawable.progress.ProgressDrawable; import brachy.modularui.factory.PosGuiData; import brachy.modularui.screen.UISettings; import brachy.modularui.utils.Alignment; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/mui/TestMuiMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/mui/TestMuiMachine.java index 9f682f3676c..31631c4479b 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/mui/TestMuiMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/mui/TestMuiMachine.java @@ -1,7 +1,5 @@ package com.gregtechceu.gtceu.common.machine.mui; -import brachy.modularui.drawable.progress.CircularProgressDrawable; -import brachy.modularui.drawable.progress.ProgressDrawable; import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.TickableSubscription; @@ -28,6 +26,8 @@ import brachy.modularui.api.widget.IWidget; import brachy.modularui.client.schemarenderer.BlockHighlight; import brachy.modularui.drawable.*; +import brachy.modularui.drawable.progress.CircularProgressDrawable; +import brachy.modularui.drawable.progress.ProgressDrawable; import brachy.modularui.factory.GuiData; import brachy.modularui.factory.PosGuiData; import brachy.modularui.schema.ArraySchema; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/CokeOvenMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/CokeOvenMachine.java index 52eb0caf725..44d4070ea4e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/CokeOvenMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/CokeOvenMachine.java @@ -1,6 +1,5 @@ package com.gregtechceu.gtceu.common.machine.multiblock.primitive; -import brachy.modularui.drawable.progress.ProgressDrawable; import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.machine.feature.IMuiMachine; @@ -20,6 +19,7 @@ import net.minecraftforge.fluids.FluidUtil; import brachy.modularui.api.ITheme; +import brachy.modularui.drawable.progress.ProgressDrawable; import brachy.modularui.factory.PosGuiData; import brachy.modularui.screen.UISettings; import brachy.modularui.theme.ThemeAPI; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveBlastFurnaceMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveBlastFurnaceMachine.java index fa4c3f18e40..01ebe663a37 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveBlastFurnaceMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveBlastFurnaceMachine.java @@ -1,6 +1,5 @@ package com.gregtechceu.gtceu.common.machine.multiblock.primitive; -import brachy.modularui.drawable.progress.ProgressDrawable; import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; @@ -31,6 +30,7 @@ import net.minecraftforge.api.distmarker.OnlyIn; import brachy.modularui.api.ITheme; +import brachy.modularui.drawable.progress.ProgressDrawable; import brachy.modularui.factory.PosGuiData; import brachy.modularui.screen.UISettings; import brachy.modularui.theme.ThemeAPI; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamLiquidBoilerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamLiquidBoilerMachine.java index 6e602176505..63fbae3a930 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamLiquidBoilerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamLiquidBoilerMachine.java @@ -1,6 +1,5 @@ package com.gregtechceu.gtceu.common.machine.steam; -import brachy.modularui.drawable.progress.ProgressDrawable; import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.FluidRecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.IO; @@ -20,6 +19,7 @@ import net.minecraftforge.fluids.FluidUtil; import brachy.modularui.drawable.UITexture; +import brachy.modularui.drawable.progress.ProgressDrawable; import brachy.modularui.factory.PosGuiData; import brachy.modularui.screen.UISettings; import brachy.modularui.utils.Alignment; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamSolarBoiler.java b/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamSolarBoiler.java index 147cec0985a..82fb6c3b668 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamSolarBoiler.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamSolarBoiler.java @@ -1,6 +1,5 @@ package com.gregtechceu.gtceu.common.machine.steam; -import brachy.modularui.drawable.progress.ProgressDrawable; import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.machine.steam.SteamBoilerMachine; import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; @@ -13,6 +12,7 @@ import net.minecraft.util.RandomSource; import brachy.modularui.drawable.UITexture; +import brachy.modularui.drawable.progress.ProgressDrawable; import brachy.modularui.factory.PosGuiData; import brachy.modularui.screen.UISettings; import brachy.modularui.value.sync.DoubleSyncValue; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamSolidBoilerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamSolidBoilerMachine.java index f8fac91650d..b7ea4f2f473 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamSolidBoilerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamSolidBoilerMachine.java @@ -1,6 +1,5 @@ package com.gregtechceu.gtceu.common.machine.steam; -import brachy.modularui.drawable.progress.ProgressDrawable; import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; @@ -20,6 +19,7 @@ import net.minecraftforge.fluids.FluidUtil; import brachy.modularui.drawable.UITexture; +import brachy.modularui.drawable.progress.ProgressDrawable; import brachy.modularui.factory.PosGuiData; import brachy.modularui.screen.UISettings; import brachy.modularui.value.sync.DoubleSyncValue; diff --git a/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java b/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java index e30ed61dc96..b7a45998e29 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java +++ b/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java @@ -147,18 +147,20 @@ public static ToggleButton createPowerButton(IControllable workable) { "behaviour.soft_hammer"); } - /*public static ProgressWidget createProgressBar(IRecipeLogicMachine workableMachine, PanelSyncManager syncManager, - UITexture texture, int size) { - DoubleSyncValue progressPercent = syncManager.getOrCreateSyncHandler("progressPercent", DoubleSyncValue.class, - () -> new DoubleSyncValue(() -> { - if (workableMachine.getMaxProgress() == 0.0f) return 0.0f; - return workableMachine.getProgress() / (double) workableMachine.getMaxProgress(); - })); - - return new ProgressWidget() - .texture(texture, size) - .value(progressPercent); - }*/ + /* + * public static ProgressWidget createProgressBar(IRecipeLogicMachine workableMachine, PanelSyncManager syncManager, + * UITexture texture, int size) { + * DoubleSyncValue progressPercent = syncManager.getOrCreateSyncHandler("progressPercent", DoubleSyncValue.class, + * () -> new DoubleSyncValue(() -> { + * if (workableMachine.getMaxProgress() == 0.0f) return 0.0f; + * return workableMachine.getProgress() / (double) workableMachine.getMaxProgress(); + * })); + * + * return new ProgressWidget() + * .texture(texture, size) + * .value(progressPercent); + * } + */ public static FluidSlot createTankWidget() { return new FluidSlot().size(20, 58).alwaysShowFull(false); From 3c732e3b9759805a212059a39157703c7d3eab82 Mon Sep 17 00:00:00 2001 From: Spicierspace153 <21964509+Spicierspace153@users.noreply.github.com> Date: Sat, 16 May 2026 23:42:24 -0600 Subject: [PATCH 05/14] enumrowbuilder fix --- .../java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java b/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java index e30ed61dc96..cc676566c58 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java +++ b/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java @@ -689,11 +689,13 @@ public Flow build() { } if (this.lang != null) { - row.child(Text.of(lang) + row.child( + Text.comp(lang) .asWidget() .verticalCenter() .rightRel(0.f) - .height(18)); + .height(18) + ); } return row; } From 932bf41ee6073317fe7c133e086c61fa88579745 Mon Sep 17 00:00:00 2001 From: YoungOnion <39562198+YoungOnionMC@users.noreply.github.com> Date: Sun, 17 May 2026 01:06:35 -0600 Subject: [PATCH 06/14] some more cover stuff --- .../gtceu/api/cover/filter/SimpleItemFilter.java | 4 ++-- .../gtceu/api/machine/MetaMachine.java | 7 +++++-- .../gtceu/common/cover/ItemFilterCover.java | 2 +- .../gtceu/common/cover/PumpCover.java | 1 + .../common/cover/detector/DetectorCover.java | 2 +- .../gtceu/common/mui/GTGuiTextures.java | 8 +++++--- .../gtceu/common/mui/GTMuiWidgets.java | 16 ++++++++++++---- 7 files changed, 27 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleItemFilter.java b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleItemFilter.java index 0c79718beca..5b9057c5670 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleItemFilter.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleItemFilter.java @@ -122,10 +122,10 @@ public ModularPanel getPanel(GuiData data, PanelSyncManager syncManager, UISe handler.setStackInSlot(i, stack); }).ignoreMaxStackSize(true).accessibility(true, false)))); - BooleanSyncValue blacklist = new BooleanSyncValue(this::isBlackList, this::setBlackList); + BooleanSyncValue blacklist = new BooleanSyncValue(this::isBlackList, this::setBlackList).allowC2S(); syncManager.syncValue("blacklist", blacklist); - BooleanSyncValue ignoreNBT = new BooleanSyncValue(this::isIgnoreNbt, this::setIgnoreNbt); + BooleanSyncValue ignoreNBT = new BooleanSyncValue(this::isIgnoreNbt, this::setIgnoreNbt).allowC2S(); syncManager.syncValue("ignoreNBT", ignoreNBT); Flow filterConfigButtons = Flow.col() diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java index f4b398b1222..76ab5393e0e 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java @@ -515,8 +515,11 @@ public InteractionResult onUseWithItem(ExtendedUseOnContext context) { */ public InteractionResult onUse(ExtendedUseOnContext context) { if (context.getPlayer().isShiftKeyDown()) { - var cover = coverContainer.getCoverAtSide(context.getClickedFace()); - if (cover != null) cover.onScrewdriverClick(context); + var cover = coverContainer.getCoverAtSide(context.getGridSide()); + if (cover != null) { + var result = cover.onScrewdriverClick(context); + if (result == InteractionResult.CONSUME) return result; + } } for (var trait : getAllTraits()) { diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/ItemFilterCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/ItemFilterCover.java index 5dfb4298478..0d51e8c870f 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/ItemFilterCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/ItemFilterCover.java @@ -129,7 +129,7 @@ public void createCoverUIRows(Flow column, SidedPosGuiData data, PanelSyncManage column.child(new GTMuiWidgets.EnumRowBuilder<>(ManualIOMode.class) .value(ioMode) .overlay(16, GTGuiTextures.MANUAL_IO_OVERLAY_IN) - .lang(Text.dynamic(() -> Component.translatable(getAllowFlow().name()))) + .lang(Text.dynamic(() -> Component.translatable(getAllowFlow().getTooltip()))) .build()); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/PumpCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/PumpCover.java index 031d4c3001c..a5f44665f43 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/PumpCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/PumpCover.java @@ -289,6 +289,7 @@ public void createCoverUIRows(Flow column, SidedPosGuiData data, PanelSyncManage .value(manualIOModeSync) .overlay(16, GTGuiTextures.MANUAL_IO_OVERLAY_IN) .lang(Text.dynamic(() -> Component.translatable(manualIOMode.localeName))) + .langTooltip(Text.comp(Component.translatable("cover.universal.manual_import_export.mode.description"))) .build()); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/detector/DetectorCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/detector/DetectorCover.java index b92624160d3..b6b442069ea 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/detector/DetectorCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/detector/DetectorCover.java @@ -84,7 +84,7 @@ public InteractionResult onScrewdriverClick(ExtendedUseOnContext context) { context.getPlayer().sendSystemMessage(Component.translatable(translationKey)); } - return InteractionResult.SUCCESS; + return InteractionResult.CONSUME; } @Override 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 85206c3b643..c4783be13d7 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/mui/GTGuiTextures.java +++ b/src/main/java/com/gregtechceu/gtceu/common/mui/GTGuiTextures.java @@ -228,9 +228,11 @@ interface IDs { UITexture[] BUTTON_VOID_MULTIBLOCK = slice("textures/gui/widget/button_void_multiblock.png", 16, 64, 16, 16, ColorType.DEFAULT); - UITexture[] FILTER_MODE_OVERLAY = slice( - "textures/gui/overlay/filter_mode_overlay.png", - 16, 48, 16, 16, ColorType.DEFAULT); + UITexture[] FILTER_MODE_OVERLAY = { + fullImage("textures/gui/icon/filter_mode/filter_insert.png"), + fullImage("textures/gui/icon/filter_mode/filter_extract.png"), + fullImage("textures/gui/icon/filter_mode/filter_both.png") + }; UITexture[] PRIVATE_MODE_BUTTON = slice( "textures/gui/widget/button_public_private.png", diff --git a/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java b/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java index 8b785907cea..803ed28e3fe 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java +++ b/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java @@ -618,6 +618,7 @@ public static class EnumRowBuilder> { private @Nullable EnumSyncValue syncValue; private final Class enumValue; private @Nullable Component lang; + private @Nullable Component langTooltip; private IDrawable @Nullable [] background; private @Nullable IDrawable selectedBackground; private IDrawable @Nullable [] overlay; @@ -636,6 +637,11 @@ public EnumRowBuilder lang(Component lang) { return this; } + public EnumRowBuilder langTooltip(Component tooltip) { + this.langTooltip = tooltip; + return this; + } + public EnumRowBuilder background(IDrawable... background) { this.background = background; return this; @@ -691,13 +697,15 @@ public Flow build() { } if (this.lang != null) { - row.child( - Text.comp(lang) + TextWidget text = Text.comp(lang) .asWidget() .verticalCenter() .rightRel(0.f) - .height(18) - ); + .height(18); + if(this.langTooltip != null) { + text.tooltip(r -> r.addLine(langTooltip)); + } + row.child(text); } return row; } From 3f0e5eac7af052c4df93c7915d830d99b403a2f2 Mon Sep 17 00:00:00 2001 From: Spicierspace153 <21964509+Spicierspace153@users.noreply.github.com> Date: Sun, 17 May 2026 22:06:05 -0600 Subject: [PATCH 07/14] b --- .../java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java b/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java index 803ed28e3fe..57f6844d258 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java +++ b/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java @@ -610,7 +610,10 @@ public boolean onMouseScrolled(double delta) { .right(0) .width(18) .value(bucketModeSyncValue) - .background(BucketMode.BUCKET.getIcon(), BucketMode.MILLI_BUCKET.getIcon())); + .background(GTGuiTextures.BUTTON) + .stateOverlay(0, BucketMode.BUCKET.icon.asIcon().size(16)) + .stateOverlay(1, BucketMode.MILLI_BUCKET.icon.asIcon().size(16)) + ); } public static class EnumRowBuilder> { From 011c4aec01ce7758dfeb4ea5358a6c79923ac413 Mon Sep 17 00:00:00 2001 From: Spicierspace153 <21964509+Spicierspace153@users.noreply.github.com> Date: Sun, 17 May 2026 22:14:25 -0600 Subject: [PATCH 08/14] title bar fix --- src/main/java/com/gregtechceu/gtceu/api/cover/IMuiCover.java | 2 +- .../gtceu/api/cover/filter/SimpleFluidFilter.java | 2 +- .../gregtechceu/gtceu/api/cover/filter/SimpleItemFilter.java | 2 +- .../gregtechceu/gtceu/api/cover/filter/SmartItemFilter.java | 2 +- .../com/gregtechceu/gtceu/api/cover/filter/TagFilter.java | 2 +- .../gtceu/common/cover/MachineControllerCover.java | 2 +- .../gtceu/common/cover/ender/AbstractEnderLinkCover.java | 2 +- .../java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java | 5 +++-- 8 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/IMuiCover.java b/src/main/java/com/gregtechceu/gtceu/api/cover/IMuiCover.java index e1eae3187b0..fc5a4bcf050 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/IMuiCover.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/IMuiCover.java @@ -47,7 +47,7 @@ default ModularScreen createScreen(SidedPosGuiData data, ModularPanel mainPan default ModularPanel buildUI(SidedPosGuiData data, PanelSyncManager syncManager, UISettings settings) { ModularPanel panel = ModularPanel.defaultPanel(this.self().coverDefinition.getId().getPath(), 176, 192 + 18); - panel.child(GTMuiWidgets.createTitleBar(this.self().getAttachItem(), 176, GTGuiTextures.BACKGROUND)); + panel.child(GTMuiWidgets.createTitleBar(() -> this.self().getAttachItem(), 176, GTGuiTextures.BACKGROUND)); Flow column = Flow.column() .top(7).margin(7, 0) diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleFluidFilter.java b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleFluidFilter.java index 083d95dd2d1..01ad02d3eb5 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleFluidFilter.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleFluidFilter.java @@ -143,7 +143,7 @@ public ModularPanel getPanel(GuiData data, PanelSyncManager syncManager, UISe .disablePanelsBelow(false) .draggable(true) .closeOnOutOfBoundsClick(true) - .child(GTMuiWidgets.createTitleBar(GTItems.FLUID_FILTER.asStack(), 176, GTGuiTextures.BACKGROUND)) + .child(GTMuiWidgets.createTitleBar(() -> GTItems.FLUID_FILTER.asStack(), 176, GTGuiTextures.BACKGROUND)) .child(Flow.row() .top(10) .coverChildrenHeight() diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleItemFilter.java b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleItemFilter.java index 5b9057c5670..24f62e151e1 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleItemFilter.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleItemFilter.java @@ -137,7 +137,7 @@ public ModularPanel getPanel(GuiData data, PanelSyncManager syncManager, UISe .disablePanelsBelow(false) .draggable(true) .closeOnOutOfBoundsClick(true) - .child(GTMuiWidgets.createTitleBar(GTItems.ITEM_FILTER.asStack(), 176, GTGuiTextures.BACKGROUND)) + .child(GTMuiWidgets.createTitleBar(() -> GTItems.ITEM_FILTER.asStack(), 176, GTGuiTextures.BACKGROUND)) .child(Flow.row() .top(10) .coverChildrenHeight() diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SmartItemFilter.java b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SmartItemFilter.java index 5d95bd47895..5ace2b3e025 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SmartItemFilter.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SmartItemFilter.java @@ -92,7 +92,7 @@ public ModularPanel getPanel(GuiData data, PanelSyncManager syncManager, UISe .disablePanelsBelow(false) .draggable(true) .closeOnOutOfBoundsClick(true) - .child(GTMuiWidgets.createTitleBar(GTItems.SMART_ITEM_FILTER.asStack(), 176, GTGuiTextures.BACKGROUND)) + .child(GTMuiWidgets.createTitleBar(() -> GTItems.SMART_ITEM_FILTER.asStack(), 176, GTGuiTextures.BACKGROUND)) .child(new GTMuiWidgets.EnumRowBuilder<>(SmartFilteringMode.class) .value(mode) .overlay(16, SmartFilteringMode.getTextures()) diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/TagFilter.java b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/TagFilter.java index 83aace338fa..c03d7bc91d0 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/TagFilter.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/TagFilter.java @@ -68,7 +68,7 @@ public ModularPanel getPanel(GuiData data, PanelSyncManager syncManager, UISe .disablePanelsBelow(false) .draggable(true) .closeOnOutOfBoundsClick(true) - .child(GTMuiWidgets.createTitleBar(getFilterItem(), 176, GTGuiTextures.BACKGROUND)) + .child(GTMuiWidgets.createTitleBar(() -> getFilterItem(), 176, GTGuiTextures.BACKGROUND)) .child(inputRow) .child(SlotGroupWidget.playerInventory(false).left(7).bottom(7)); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/MachineControllerCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/MachineControllerCover.java index 97d9344bb8a..80e531ab974 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/MachineControllerCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/MachineControllerCover.java @@ -203,7 +203,7 @@ public ModularPanel buildUI(SidedPosGuiData data, PanelSyncManager syncManage syncManager.syncValue("controllerMode", controllerModeValue); return ModularPanel.defaultPanel(coverDefinition.getId().getPath(), 176, 245) - .child(GTMuiWidgets.createTitleBar(this.self().getAttachItem(), 176, GTGuiTextures.BACKGROUND)) + .child(GTMuiWidgets.createTitleBar(() -> this.self().getAttachItem(), 176, GTGuiTextures.BACKGROUND)) .child(Flow.col().top(7).margin(7, 0) .childPadding(2) .widthRel(1.0f) diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/ender/AbstractEnderLinkCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/ender/AbstractEnderLinkCover.java index 35bcf2a5043..4bf27b5d4d7 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/ender/AbstractEnderLinkCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/ender/AbstractEnderLinkCover.java @@ -345,7 +345,7 @@ protected ModularPanel createChannelManagerPanel(GuiData data, PanelSyncManag .disablePanelsBelow(false) .draggable(true) .closeOnOutOfBoundsClick(true) - .child(GTMuiWidgets.createTitleBar(getAttachItem(), 176, GTGuiTextures.BACKGROUND)); + .child(GTMuiWidgets.createTitleBar(() -> getAttachItem(), 176, GTGuiTextures.BACKGROUND)); var entries = new GenericListSyncHandler.Builder() .getter(this::getVirtualEntries) diff --git a/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java b/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java index 57f6844d258..0fa183eb9d1 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java +++ b/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java @@ -68,10 +68,11 @@ public static Flow createTitleBar(MachineDefinition definition, int panelWidth) } public static Flow createTitleBar(MachineDefinition definition, int panelWidth, UITexture background) { - return createTitleBar(definition.asStack(), panelWidth, background); + return createTitleBar(() -> definition.asStack(), panelWidth, background); } - public static Flow createTitleBar(ItemStack stack, int panelWidth, UITexture background) { + public static Flow createTitleBar(Supplier stackSupplier, int panelWidth, UITexture background) { + ItemStack stack = stackSupplier.get(); var name = stack.getHoverName().getString(); name = name.replaceAll("§.", "").trim(); return createTitleBar(new ItemDrawable(stack).asIcon(), name, panelWidth, background); From 5d81c929ac85044bd961fec736c38a0ca6d90358 Mon Sep 17 00:00:00 2001 From: Spicierspace153 <21964509+Spicierspace153@users.noreply.github.com> Date: Sun, 17 May 2026 22:45:47 -0600 Subject: [PATCH 09/14] start filter ui refact --- .../gtceu/api/cover/filter/Filter.java | 3 ++ .../gtceu/api/cover/filter/FluidFilter.java | 6 ++++ .../gtceu/api/cover/filter/ItemFilter.java | 6 ++++ .../api/cover/filter/SimpleFluidFilter.java | 29 ++++++++++-------- .../api/cover/filter/SimpleItemFilter.java | 30 +++++++++++-------- .../api/cover/filter/SmartItemFilter.java | 23 +++++++++----- .../gtceu/api/cover/filter/TagFilter.java | 18 +++++++---- .../api/cover/filter/TagFluidFilter.java | 9 ++++++ .../gtceu/api/cover/filter/TagItemFilter.java | 8 +++++ .../gtceu/common/cover/FluidFilterCover.java | 3 ++ .../gtceu/common/cover/ItemFilterCover.java | 2 +- 11 files changed, 98 insertions(+), 39 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/Filter.java b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/Filter.java index cdb011c12c0..25998e3c8d0 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/Filter.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/Filter.java @@ -1,5 +1,6 @@ package com.gregtechceu.gtceu.api.cover.filter; +import brachy.modularui.widgets.layout.Flow; import net.minecraft.nbt.CompoundTag; import brachy.modularui.factory.GuiData; @@ -17,6 +18,8 @@ public interface Filter> extends Predicate { */ ModularPanel getPanel(GuiData data, PanelSyncManager syncManager, UISettings settings); + Flow getFilterUI(GuiData data, PanelSyncManager syncManager, UISettings settings); + CompoundTag saveFilter(); void setOnUpdated(Consumer onUpdated); diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/FluidFilter.java b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/FluidFilter.java index eb2c1191c4e..cd4bbca8f55 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/FluidFilter.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/FluidFilter.java @@ -1,5 +1,6 @@ package com.gregtechceu.gtceu.api.cover.filter; +import brachy.modularui.widgets.layout.Flow; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.ItemLike; @@ -60,6 +61,11 @@ public ModularPanel getPanel(GuiData data, PanelSyncManager syncManager, UISe return null; } + @Override + public Flow getFilterUI(GuiData data, PanelSyncManager syncManager, UISettings settings) { + return null; + } + @Override public CompoundTag saveFilter() { throw new NotImplementedException("Not available for empty fluid filter"); diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/ItemFilter.java b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/ItemFilter.java index a149cd64ab3..ab1b03bc254 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/ItemFilter.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/ItemFilter.java @@ -1,5 +1,6 @@ package com.gregtechceu.gtceu.api.cover.filter; +import brachy.modularui.widgets.layout.Flow; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.ItemLike; @@ -59,6 +60,11 @@ public ModularPanel getPanel(GuiData data, PanelSyncManager syncManager, UISe return null; } + @Override + public Flow getFilterUI(GuiData data, PanelSyncManager syncManager, UISettings settings) { + return null; + } + @Override public CompoundTag saveFilter() { throw new NotImplementedException("Not available for empty item filter"); diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleFluidFilter.java b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleFluidFilter.java index 01ad02d3eb5..0df7087b8a0 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleFluidFilter.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleFluidFilter.java @@ -119,6 +119,18 @@ public void setIgnoreNbt(boolean ingoreNbt) { @Override public ModularPanel getPanel(GuiData data, PanelSyncManager syncManager, UISettings settings) { + + + return new Dialog<>("simple_fluid_filter") + .disablePanelsBelow(false) + .draggable(true) + .closeOnOutOfBoundsClick(true) + .child(GTMuiWidgets.createTitleBar(() -> GTItems.FLUID_FILTER.asStack(), 176, GTGuiTextures.BACKGROUND)) + .child(getFilterUI(data, syncManager, settings)) + .child(SlotGroupWidget.playerInventory(false).left(7).bottom(7)); + } + + public Flow getFilterUI(GuiData data, PanelSyncManager syncManager, UISettings settings){ for (int i = 0; i < 9; i++) { syncManager.syncValue("filter_slot_" + i, new FluidSlotSyncHandler(fluidStorageSlots[i]).controlsAmount(true).phantom(true)); @@ -138,18 +150,11 @@ public ModularPanel getPanel(GuiData data, PanelSyncManager syncManager, UISe .coverChildren() .child(new ToggleButton().stateBackground(GTGuiTextures.BUTTON_BLACKLIST).syncHandler("blacklist")) .child(new ToggleButton().stateBackground(GTGuiTextures.BUTTON_IGNORE_NBT).syncHandler("ignoreNBT")); - - return new Dialog<>("simple_fluid_filter") - .disablePanelsBelow(false) - .draggable(true) - .closeOnOutOfBoundsClick(true) - .child(GTMuiWidgets.createTitleBar(() -> GTItems.FLUID_FILTER.asStack(), 176, GTGuiTextures.BACKGROUND)) - .child(Flow.row() - .top(10) - .coverChildrenHeight() - .child(filterGrid.horizontalCenter()) - .child(filterConfigButtons.marginLeft(118))) - .child(SlotGroupWidget.playerInventory(false).left(7).bottom(7)); + return Flow.row() + .top(10) + .coverChildrenHeight() + .child(filterGrid.horizontalCenter()) + .child(filterConfigButtons.marginLeft(118)); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleItemFilter.java b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleItemFilter.java index 24f62e151e1..a1a0013fce5 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleItemFilter.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleItemFilter.java @@ -111,6 +111,19 @@ public void setIgnoreNbt(boolean ingoreNbt) { @Override public ModularPanel getPanel(GuiData data, PanelSyncManager syncManager, UISettings settings) { + + + return new Dialog<>("simple_item_filter") + .disablePanelsBelow(false) + .draggable(true) + .closeOnOutOfBoundsClick(true) + .child(GTMuiWidgets.createTitleBar(() -> GTItems.ITEM_FILTER.asStack(), 176, GTGuiTextures.BACKGROUND)) + .child(getFilterUI(data, syncManager, settings)) + .child(SlotGroupWidget.playerInventory(false).left(7).bottom(7)); + } + + @Override + public Flow getFilterUI(GuiData data, PanelSyncManager syncManager, UISettings settings) { FilterItemStackHandler handler = new FilterItemStackHandler(matches, this); Grid filterGrid = new Grid() @@ -132,18 +145,11 @@ public ModularPanel getPanel(GuiData data, PanelSyncManager syncManager, UISe .coverChildren() .child(new ToggleButton().stateBackground(GTGuiTextures.BUTTON_BLACKLIST).syncHandler("blacklist")) .child(new ToggleButton().stateBackground(GTGuiTextures.BUTTON_IGNORE_NBT).syncHandler("ignoreNBT")); - - return new Dialog<>("simple_item_filter") - .disablePanelsBelow(false) - .draggable(true) - .closeOnOutOfBoundsClick(true) - .child(GTMuiWidgets.createTitleBar(() -> GTItems.ITEM_FILTER.asStack(), 176, GTGuiTextures.BACKGROUND)) - .child(Flow.row() - .top(10) - .coverChildrenHeight() - .child(filterGrid.horizontalCenter()) - .child(filterConfigButtons.marginLeft(118))) - .child(SlotGroupWidget.playerInventory(false).left(7).bottom(7)); + return Flow.row() + .top(10) + .coverChildrenHeight() + .child(filterGrid.horizontalCenter()) + .child(filterConfigButtons.marginLeft(118)); } public static class FilterItemStackHandler extends CustomItemStackHandler { diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SmartItemFilter.java b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SmartItemFilter.java index 5ace2b3e025..0250729b2f5 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SmartItemFilter.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SmartItemFilter.java @@ -1,5 +1,6 @@ package com.gregtechceu.gtceu.api.cover.filter; +import brachy.modularui.widgets.layout.Flow; import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; import com.gregtechceu.gtceu.api.recipe.GTRecipeType; @@ -83,24 +84,30 @@ private void setFilterMode(SmartFilteringMode filterMode) { @Override public ModularPanel getPanel(GuiData data, PanelSyncManager syncManager, UISettings settings) { - EnumSyncValue mode = new EnumSyncValue<>(SmartFilteringMode.class, - this::getFilterMode, this::setFilterMode); - syncManager.syncValue("mode", mode); return new Dialog<>("smart_item_filter") .disablePanelsBelow(false) .draggable(true) .closeOnOutOfBoundsClick(true) .child(GTMuiWidgets.createTitleBar(() -> GTItems.SMART_ITEM_FILTER.asStack(), 176, GTGuiTextures.BACKGROUND)) - .child(new GTMuiWidgets.EnumRowBuilder<>(SmartFilteringMode.class) - .value(mode) - .overlay(16, SmartFilteringMode.getTextures()) - .lang(Text.dynamic(() -> Component.translatable(filterMode.localeName))) - .build().margin(7)) + .child(getFilterUI(data, syncManager, settings)) .child(SlotGroupWidget.playerInventory(false).left(7).bottom(7)); } + @Override + public Flow getFilterUI(GuiData data, PanelSyncManager syncManager, UISettings settings) { + EnumSyncValue mode = new EnumSyncValue<>(SmartFilteringMode.class, + this::getFilterMode, this::setFilterMode); + + syncManager.syncValue("mode", mode); + return new GTMuiWidgets.EnumRowBuilder<>(SmartFilteringMode.class) + .value(mode) + .overlay(16, SmartFilteringMode.getTextures()) + .lang(Text.dynamic(() -> Component.translatable(filterMode.localeName))) + .build().margin(7); + } + @Override public boolean test(ItemStack itemStack) { return testItemCount(itemStack) > 0; diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/TagFilter.java b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/TagFilter.java index c03d7bc91d0..42cf375ae3f 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/TagFilter.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/TagFilter.java @@ -57,22 +57,28 @@ public void setFilterString(String filterString) { @Override public ModularPanel getPanel(GuiData data, PanelSyncManager syncManager, UISettings settings) { - StringSyncValue filterString = new StringSyncValue(this::getFilterString, this::setFilterString); - RichTooltip infoTooltip = new RichTooltip().add("cover.tag_filter.info"); - var inputRow = Flow.row().margin(7).coverChildren().horizontalCenter() - .child(new TextFieldWidget().width(140).value(filterString)) - .child(GTGuiTextures.INFO.asWidget().tooltip(infoTooltip)); return new Dialog<>("tag_filter") .disablePanelsBelow(false) .draggable(true) .closeOnOutOfBoundsClick(true) .child(GTMuiWidgets.createTitleBar(() -> getFilterItem(), 176, GTGuiTextures.BACKGROUND)) - .child(inputRow) + .child(getFilterUI(data, syncManager, settings)) .child(SlotGroupWidget.playerInventory(false).left(7).bottom(7)); } + @Override + public Flow getFilterUI(GuiData data, PanelSyncManager syncManager, UISettings settings) { + StringSyncValue filterString = new StringSyncValue(this::getFilterString, this::setFilterString).allowC2S(); + RichTooltip infoTooltip = new RichTooltip().add("cover.tag_filter.info"); + + var inputRow = Flow.row().margin(7).coverChildren().horizontalCenter() + .child(new TextFieldWidget().width(140).value(filterString)) + .child(GTGuiTextures.INFO.asWidget().tooltip(infoTooltip)); + return inputRow; + } + @Override public void setOnUpdated(Consumer onUpdated) { this.onUpdated = filter -> { diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/TagFluidFilter.java b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/TagFluidFilter.java index 014a14e0898..179ed28f17f 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/TagFluidFilter.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/TagFluidFilter.java @@ -1,5 +1,9 @@ package com.gregtechceu.gtceu.api.cover.filter; +import brachy.modularui.factory.GuiData; +import brachy.modularui.screen.UISettings; +import brachy.modularui.value.sync.PanelSyncManager; +import brachy.modularui.widgets.layout.Flow; import com.gregtechceu.gtceu.common.data.GTItems; import com.gregtechceu.gtceu.utils.TagExprFilter; @@ -57,6 +61,11 @@ public boolean test(FluidStack fluidStack) { return false; } + @Override + public Flow getFilterUI(GuiData data, PanelSyncManager syncManager, UISettings settings) { + return null; + } + @Override public int testFluidAmount(FluidStack fluidStack) { return test(fluidStack) ? Integer.MAX_VALUE : 0; diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/TagItemFilter.java b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/TagItemFilter.java index e33eca3e7df..03fc17bbe22 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/TagItemFilter.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/TagItemFilter.java @@ -1,5 +1,9 @@ package com.gregtechceu.gtceu.api.cover.filter; +import brachy.modularui.factory.GuiData; +import brachy.modularui.screen.UISettings; +import brachy.modularui.value.sync.PanelSyncManager; +import brachy.modularui.widgets.layout.Flow; import com.gregtechceu.gtceu.common.data.GTItems; import com.gregtechceu.gtceu.utils.TagExprFilter; @@ -38,6 +42,10 @@ public void setFilterString(String oreDict) { cache.clear(); super.setFilterString(oreDict); } + @Override + public Flow getFilterUI(GuiData data, PanelSyncManager syncManager, UISettings settings) { + return null; + } @Override protected ItemStack getFilterItem() { diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/FluidFilterCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/FluidFilterCover.java index 0f42fda981c..a689d5655d5 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/FluidFilterCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/FluidFilterCover.java @@ -107,6 +107,9 @@ public void createCoverUIRows(Flow column, SidedPosGuiData data, PanelSyncManage panelHandler.openPanel(); return true; })); + column.coverChildrenHeight(); + column.child(getFluidFilter().getFilterUI(data, syncManager, settings)); + column.child(coverUIRow().child(new DynamicSyncedWidget<>().syncHandler(filterButton))); diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/ItemFilterCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/ItemFilterCover.java index 0d51e8c870f..46bdc409eb4 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/ItemFilterCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/ItemFilterCover.java @@ -119,7 +119,7 @@ public void createCoverUIRows(Flow column, SidedPosGuiData data, PanelSyncManage })); column.child(coverUIRow().child(new DynamicSyncedWidget<>().syncHandler(filterButton))); - + column.child(getItemFilter().getFilterUI(data, syncManager, settings)); column.child(new GTMuiWidgets.EnumRowBuilder<>(FilterMode.class) .value(filterMode) .overlay(16, GTGuiTextures.FILTER_MODE_OVERLAY) From 61c26dda4255b1d27c8b654051224bed08801bf9 Mon Sep 17 00:00:00 2001 From: YoungOnion <39562198+YoungOnionMC@users.noreply.github.com> Date: Mon, 18 May 2026 03:34:00 -0600 Subject: [PATCH 10/14] menu for smart item filters, more general positioning for regular filters, attempt to get the dynamic panel button to work for the filter slot --- .../api/cover/filter/SimpleFluidFilter.java | 9 ++-- .../api/cover/filter/SimpleItemFilter.java | 3 +- .../api/cover/filter/SmartItemFilter.java | 45 +++++++++++++++++-- .../gtceu/api/cover/filter/TagFilter.java | 7 ++- .../api/cover/filter/TagFluidFilter.java | 2 +- .../gtceu/api/cover/filter/TagItemFilter.java | 3 +- .../gtceu/common/cover/ConveyorCover.java | 8 +++- .../gtceu/common/cover/FluidFilterCover.java | 6 +-- .../gtceu/common/cover/ItemFilterCover.java | 4 +- .../gtceu/common/cover/PumpCover.java | 4 +- .../gtceu/common/mui/GTMuiWidgets.java | 45 ++++++++++++------- 11 files changed, 92 insertions(+), 44 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleFluidFilter.java b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleFluidFilter.java index 0df7087b8a0..8bf3e6488bb 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleFluidFilter.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleFluidFilter.java @@ -119,18 +119,16 @@ public void setIgnoreNbt(boolean ingoreNbt) { @Override public ModularPanel getPanel(GuiData data, PanelSyncManager syncManager, UISettings settings) { - - return new Dialog<>("simple_fluid_filter") .disablePanelsBelow(false) .draggable(true) .closeOnOutOfBoundsClick(true) .child(GTMuiWidgets.createTitleBar(() -> GTItems.FLUID_FILTER.asStack(), 176, GTGuiTextures.BACKGROUND)) - .child(getFilterUI(data, syncManager, settings)) + .child(getFilterUI(data, syncManager, settings).top(10)) .child(SlotGroupWidget.playerInventory(false).left(7).bottom(7)); } - public Flow getFilterUI(GuiData data, PanelSyncManager syncManager, UISettings settings){ + public Flow getFilterUI(GuiData data, PanelSyncManager syncManager, UISettings settings){ for (int i = 0; i < 9; i++) { syncManager.syncValue("filter_slot_" + i, new FluidSlotSyncHandler(fluidStorageSlots[i]).controlsAmount(true).phantom(true)); @@ -150,8 +148,7 @@ public Flow getFilterUI(GuiData data, PanelSyncManager syncManager, UISettings .coverChildren() .child(new ToggleButton().stateBackground(GTGuiTextures.BUTTON_BLACKLIST).syncHandler("blacklist")) .child(new ToggleButton().stateBackground(GTGuiTextures.BUTTON_IGNORE_NBT).syncHandler("ignoreNBT")); - return Flow.row() - .top(10) + return Flow.row() .coverChildrenHeight() .child(filterGrid.horizontalCenter()) .child(filterConfigButtons.marginLeft(118)); diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleItemFilter.java b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleItemFilter.java index a1a0013fce5..439a3a54a98 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleItemFilter.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleItemFilter.java @@ -118,7 +118,7 @@ public ModularPanel getPanel(GuiData data, PanelSyncManager syncManager, UISe .draggable(true) .closeOnOutOfBoundsClick(true) .child(GTMuiWidgets.createTitleBar(() -> GTItems.ITEM_FILTER.asStack(), 176, GTGuiTextures.BACKGROUND)) - .child(getFilterUI(data, syncManager, settings)) + .child(getFilterUI(data, syncManager, settings).top(10)) .child(SlotGroupWidget.playerInventory(false).left(7).bottom(7)); } @@ -146,7 +146,6 @@ public Flow getFilterUI(GuiData data, PanelSyncManager syncManager, UISettings s .child(new ToggleButton().stateBackground(GTGuiTextures.BUTTON_BLACKLIST).syncHandler("blacklist")) .child(new ToggleButton().stateBackground(GTGuiTextures.BUTTON_IGNORE_NBT).syncHandler("ignoreNBT")); return Flow.row() - .top(10) .coverChildrenHeight() .child(filterGrid.horizontalCenter()) .child(filterConfigButtons.marginLeft(118)); diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SmartItemFilter.java b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SmartItemFilter.java index 0250729b2f5..78e420a4b65 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SmartItemFilter.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SmartItemFilter.java @@ -1,6 +1,15 @@ package com.gregtechceu.gtceu.api.cover.filter; +import brachy.modularui.api.value.IBoolValue; +import brachy.modularui.drawable.DynamicDrawable; +import brachy.modularui.drawable.GuiTextures; +import brachy.modularui.value.BoolValue; +import brachy.modularui.value.sync.BooleanSyncValue; +import brachy.modularui.widgets.ListWidget; +import brachy.modularui.widgets.ToggleButton; import brachy.modularui.widgets.layout.Flow; +import brachy.modularui.widgets.menu.ContextMenuButton; +import brachy.modularui.widgets.menu.Menu; import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; import com.gregtechceu.gtceu.api.recipe.GTRecipeType; @@ -84,8 +93,6 @@ private void setFilterMode(SmartFilteringMode filterMode) { @Override public ModularPanel getPanel(GuiData data, PanelSyncManager syncManager, UISettings settings) { - - return new Dialog<>("smart_item_filter") .disablePanelsBelow(false) .draggable(true) @@ -101,11 +108,41 @@ public Flow getFilterUI(GuiData data, PanelSyncManager syncManager, UISettings s this::getFilterMode, this::setFilterMode); syncManager.syncValue("mode", mode); - return new GTMuiWidgets.EnumRowBuilder<>(SmartFilteringMode.class) + + return Flow.row() + .childPadding(2) + .child(Text.str("Recipe Type:").asWidget()) + .child(new ContextMenuButton<>("smart_filter") + .size(20) + .requiresClick() + .tooltip(r -> r.add(Text.str("Set Machine Recipe Type"))) + .openRightDown() + .overlay(new DynamicDrawable(() -> SmartFilteringMode.getTextures()[mode.getIntValue()])) + .menu(new Menu<>() + .width(20) + .coverChildrenHeight() + .padding(2) + .child(new ListWidget<>() + .maxSize(SmartFilteringMode.VALUES.length * 20) + .widthRel(1.f) + .children(SmartFilteringMode.VALUES.length, w -> { + IBoolValue bsv = new BoolValue.Dynamic(() -> mode.getIntValue() == w, bool -> mode.setIntValue(w)); + + return new ToggleButton() + .overlay(SmartFilteringMode.getTextures()[w]) + .background(GuiTextures.MC_BUTTON) + .value(bsv) + .tooltip(r -> r.add(Text.str(SmartFilteringMode.VALUES[w].localeName))); + }) + ) + ) + ); + + /*return new GTMuiWidgets.EnumRowBuilder<>(SmartFilteringMode.class) .value(mode) .overlay(16, SmartFilteringMode.getTextures()) .lang(Text.dynamic(() -> Component.translatable(filterMode.localeName))) - .build().margin(7); + .build().margin(7);*/ } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/TagFilter.java b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/TagFilter.java index 42cf375ae3f..0f221b89b72 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/TagFilter.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/TagFilter.java @@ -57,14 +57,12 @@ public void setFilterString(String filterString) { @Override public ModularPanel getPanel(GuiData data, PanelSyncManager syncManager, UISettings settings) { - - return new Dialog<>("tag_filter") .disablePanelsBelow(false) .draggable(true) .closeOnOutOfBoundsClick(true) .child(GTMuiWidgets.createTitleBar(() -> getFilterItem(), 176, GTGuiTextures.BACKGROUND)) - .child(getFilterUI(data, syncManager, settings)) + .child(getFilterUI(data, syncManager, settings).margin(7).horizontalCenter()) .child(SlotGroupWidget.playerInventory(false).left(7).bottom(7)); } @@ -73,7 +71,8 @@ public Flow getFilterUI(GuiData data, PanelSyncManager syncManager, UISettings s StringSyncValue filterString = new StringSyncValue(this::getFilterString, this::setFilterString).allowC2S(); RichTooltip infoTooltip = new RichTooltip().add("cover.tag_filter.info"); - var inputRow = Flow.row().margin(7).coverChildren().horizontalCenter() + var inputRow = Flow.row() + .coverChildren() .child(new TextFieldWidget().width(140).value(filterString)) .child(GTGuiTextures.INFO.asWidget().tooltip(infoTooltip)); return inputRow; diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/TagFluidFilter.java b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/TagFluidFilter.java index 179ed28f17f..f2858c344fe 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/TagFluidFilter.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/TagFluidFilter.java @@ -63,7 +63,7 @@ public boolean test(FluidStack fluidStack) { @Override public Flow getFilterUI(GuiData data, PanelSyncManager syncManager, UISettings settings) { - return null; + return super.getFilterUI(data, syncManager, settings); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/TagItemFilter.java b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/TagItemFilter.java index 03fc17bbe22..5439096f485 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/TagItemFilter.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/TagItemFilter.java @@ -42,9 +42,10 @@ public void setFilterString(String oreDict) { cache.clear(); super.setFilterString(oreDict); } + @Override public Flow getFilterUI(GuiData data, PanelSyncManager syncManager, UISettings settings) { - return null; + return super.getFilterUI(data, syncManager, settings); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/ConveyorCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/ConveyorCover.java index bde1e288ee5..db677854b2b 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/ConveyorCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/ConveyorCover.java @@ -436,8 +436,12 @@ public void createCoverUIRows(Flow column, SidedPosGuiData data, PanelSyncManage } if (createFilterRow()) { - column.child(GTMuiWidgets.createFilterRow(filterHandler, data, syncManager, settings) - .child(0, GTMuiWidgets.createIOCycleButton(ioSync, false))); + column.child(Flow.row() + .coverChildrenHeight() + .widthRel(1.0f) + .child(GTMuiWidgets.createIOCycleButton(ioSync, false).left(0)) + .child(Text.dynamic(() -> Component.translatable(getIo().tooltip)).asWidget().verticalCenter().rightRel(0.f))); + column.child(GTMuiWidgets.createFilterRow(filterHandler, data, syncManager, settings)); } if (createDistributionModeRow()) { diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/FluidFilterCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/FluidFilterCover.java index a689d5655d5..f0154b51885 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/FluidFilterCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/FluidFilterCover.java @@ -1,5 +1,6 @@ package com.gregtechceu.gtceu.common.cover; +import brachy.modularui.api.drawable.IDrawable; import com.gregtechceu.gtceu.api.capability.ICoverable; import com.gregtechceu.gtceu.api.cover.CoverBehavior; import com.gregtechceu.gtceu.api.cover.CoverDefinition; @@ -108,10 +109,7 @@ public void createCoverUIRows(Flow column, SidedPosGuiData data, PanelSyncManage return true; })); column.coverChildrenHeight(); - column.child(getFluidFilter().getFilterUI(data, syncManager, settings)); - - - column.child(coverUIRow().child(new DynamicSyncedWidget<>().syncHandler(filterButton))); + column.child(getFluidFilter().getFilterUI(data, syncManager, settings).marginBottom(4)); column.child(new GTMuiWidgets.EnumRowBuilder<>(FilterMode.class) .value(filterMode) diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/ItemFilterCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/ItemFilterCover.java index 46bdc409eb4..f9df621fb61 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/ItemFilterCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/ItemFilterCover.java @@ -117,9 +117,7 @@ public void createCoverUIRows(Flow column, SidedPosGuiData data, PanelSyncManage panelHandler.openPanel(); return true; })); - - column.child(coverUIRow().child(new DynamicSyncedWidget<>().syncHandler(filterButton))); - column.child(getItemFilter().getFilterUI(data, syncManager, settings)); + column.child(getItemFilter().getFilterUI(data, syncManager, settings).marginBottom(4)); column.child(new GTMuiWidgets.EnumRowBuilder<>(FilterMode.class) .value(filterMode) .overlay(16, GTGuiTextures.FILTER_MODE_OVERLAY) diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/PumpCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/PumpCover.java index a5f44665f43..5986a661143 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/PumpCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/PumpCover.java @@ -282,8 +282,8 @@ public void createCoverUIRows(Flow column, SidedPosGuiData data, PanelSyncManage column.child(GTMuiWidgets.createIntInputWithBucketMode(transferRateSync, bucketModeSync, () -> maxFluidTransferRate)); - column.child(GTMuiWidgets.createFilterRow(filterHandler, data, syncManager, settings) - .child(0, GTMuiWidgets.createIOCycleButton(ioSync, false))); + column.child(GTMuiWidgets.createIOCycleButton(ioSync, false)); + column.child(GTMuiWidgets.createFilterRow(filterHandler, data, syncManager, settings)); column.child(new GTMuiWidgets.EnumRowBuilder<>(ManualIOMode.class) .value(manualIOModeSync) diff --git a/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java b/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java index 0fa183eb9d1..ab0cac349f4 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java +++ b/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java @@ -378,42 +378,57 @@ public static CycleButtonWidget createIOCycleButton(EnumSyncValue syncValue, return cycleButton; } - public static > ParentWidget createFilterRow(ParentWidget existingRow, + public static > ParentWidget createFilterRow(Flow existingRow, FilterHandler filterHandler, SidedPosGuiData data, PanelSyncManager syncManager, UISettings settings) { var filterSlot = filterHandler.getFilterSlot(); - // TODO get the panel to use the right sync handler when swapping from one item filter to the next - var panelHandler = syncManager.syncedPanel("filterPanel", true, + + IPanelHandler panelHandler = syncManager.syncedPanel("filterPanel", true, (sm, sh) -> filterHandler.loadFilter(filterSlot.getStackInSlot(0)).getPanel(data, sm, settings)); - DynamicSyncHandler filterButton = new DynamicSyncHandler() + DynamicSyncHandler filterButtonSyncHandler = new DynamicSyncHandler() .widgetProvider((sm, buf) -> { ItemStack stack = buf.readItem(); - if (stack.isEmpty()) return new EmptyWidget(); - stack = filterSlot.getStackInSlot(0); - S filter = filterHandler.loadFilter(stack); + if (stack.isEmpty()) { + if (panelHandler.isPanelOpen()) { + panelHandler.closePanel(); + } + return new EmptyWidget(); + } return new ButtonWidget<>() - .onMousePressed((context, b) -> { + .background(GuiTextures.MC_BUTTON) + .size(16) + .onMousePressed((c, b) -> { panelHandler.openPanel(); return true; }); }); - return existingRow.child(new ItemSlot() - .slot(new ModularSlot(filterSlot, 0) - .changeListener((stack, amount, client, init) -> filterButton - .notifyUpdate(packet -> packet.writeItem(stack))))) - .child(new DynamicSyncedWidget<>().syncHandler(filterButton)); + + ModularSlot modSlot = new ModularSlot(filterSlot, 0) + .singletonSlotGroup(0) + .changeListener((stack, amount, client, init) -> { + if (client) { + filterButtonSyncHandler.notifyUpdate(packet -> packet.writeItem(stack)); + } + }); + filterButtonSyncHandler.notifyUpdate(buf -> { + buf.writeItem(filterSlot.getStackInSlot(0)); + }); + return existingRow + .child(new ItemSlot().slot(modSlot)) + .child(new DynamicSyncedWidget<>() + .syncHandler(filterButtonSyncHandler)); } public static > ParentWidget createFilterRow(FilterHandler filterHandler, SidedPosGuiData data, PanelSyncManager syncManager, UISettings settings) { - return createFilterRow(Flow.row().coverChildrenHeight().childPadding(2), filterHandler, data, syncManager, - settings); + Flow row = Flow.row().coverChildrenHeight().childPadding(2); + return createFilterRow(row, filterHandler, data, syncManager, settings); } private static int getIncrementValue(MouseData data, int step) { From b4b2b7ea2cafaf86adb11c738b2554a2ccb74e7e Mon Sep 17 00:00:00 2001 From: YoungOnion <39562198+YoungOnionMC@users.noreply.github.com> Date: Mon, 18 May 2026 03:45:08 -0600 Subject: [PATCH 11/14] mintt boolean suggestion --- .../com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java b/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java index ab0cac349f4..e1db59b6143 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java +++ b/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java @@ -390,8 +390,8 @@ public static > ParentWidget createFilterRow(Flow e DynamicSyncHandler filterButtonSyncHandler = new DynamicSyncHandler() .widgetProvider((sm, buf) -> { - ItemStack stack = buf.readItem(); - if (stack.isEmpty()) { + boolean empty = buf.readBoolean(); + if (empty) { if (panelHandler.isPanelOpen()) { panelHandler.closePanel(); } @@ -411,12 +411,9 @@ public static > ParentWidget createFilterRow(Flow e .singletonSlotGroup(0) .changeListener((stack, amount, client, init) -> { if (client) { - filterButtonSyncHandler.notifyUpdate(packet -> packet.writeItem(stack)); + filterButtonSyncHandler.notifyUpdate(packet -> packet.writeBoolean(stack.isEmpty())); } }); - filterButtonSyncHandler.notifyUpdate(buf -> { - buf.writeItem(filterSlot.getStackInSlot(0)); - }); return existingRow .child(new ItemSlot().slot(modSlot)) .child(new DynamicSyncedWidget<>() From ee90019fe58432b86e4075aca1fbf63fe70f09e5 Mon Sep 17 00:00:00 2001 From: jurrejelle Date: Mon, 18 May 2026 14:10:13 +0200 Subject: [PATCH 12/14] Add selected background of overlay widget --- .../com/gregtechceu/gtceu/api/cover/filter/SmartItemFilter.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SmartItemFilter.java b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SmartItemFilter.java index 78e420a4b65..cf6dc7ed77c 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SmartItemFilter.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SmartItemFilter.java @@ -131,6 +131,7 @@ public Flow getFilterUI(GuiData data, PanelSyncManager syncManager, UISettings s return new ToggleButton() .overlay(SmartFilteringMode.getTextures()[w]) .background(GuiTextures.MC_BUTTON) + .selectedBackground(GuiTextures.MC_BUTTON) .value(bsv) .tooltip(r -> r.add(Text.str(SmartFilteringMode.VALUES[w].localeName))); }) From 2b8581aa6d33c4621d95bd751ec72a80373719a8 Mon Sep 17 00:00:00 2001 From: jurrejelle Date: Mon, 18 May 2026 21:28:35 +0200 Subject: [PATCH 13/14] Working baseline for opening dialogs from conveyors --- .../gtceu/common/mui/GTMuiWidgets.java | 45 +++++++------------ 1 file changed, 16 insertions(+), 29 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java b/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java index e1db59b6143..6bd4182050d 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java +++ b/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java @@ -385,39 +385,26 @@ public static > ParentWidget createFilterRow(Flow e UISettings settings) { var filterSlot = filterHandler.getFilterSlot(); + ModularSlot modSlot = new ModularSlot(filterSlot, 0) + .singletonSlotGroup(0); + + ItemSlotSyncHandler filterSlotHandler = new ItemSlotSyncHandler(modSlot); + syncManager.syncValue("filterSlotHandler", filterSlotHandler); + IPanelHandler panelHandler = syncManager.syncedPanel("filterPanel", true, - (sm, sh) -> filterHandler.loadFilter(filterSlot.getStackInSlot(0)).getPanel(data, sm, settings)); - - DynamicSyncHandler filterButtonSyncHandler = new DynamicSyncHandler() - .widgetProvider((sm, buf) -> { - boolean empty = buf.readBoolean(); - if (empty) { - if (panelHandler.isPanelOpen()) { - panelHandler.closePanel(); - } - return new EmptyWidget(); - } + (sm, sh) -> filterHandler.loadFilter(filterSlotHandler.getSlot().getItem()).getPanel(data, sm, settings)); - return new ButtonWidget<>() - .background(GuiTextures.MC_BUTTON) - .size(16) - .onMousePressed((c, b) -> { - panelHandler.openPanel(); - return true; - }); - }); - ModularSlot modSlot = new ModularSlot(filterSlot, 0) - .singletonSlotGroup(0) - .changeListener((stack, amount, client, init) -> { - if (client) { - filterButtonSyncHandler.notifyUpdate(packet -> packet.writeBoolean(stack.isEmpty())); - } - }); return existingRow - .child(new ItemSlot().slot(modSlot)) - .child(new DynamicSyncedWidget<>() - .syncHandler(filterButtonSyncHandler)); + .child(new ItemSlot().syncHandler(filterSlotHandler)) + .child(new ButtonWidget<>() + .background(GuiTextures.MC_BUTTON) + .size(16) + .onMousePressed((c, b) -> { + panelHandler.togglePanel(); + return true; + }) + .setEnabledIf((w) -> !filterSlotHandler.getSlot().getItem().isEmpty())); } public static > ParentWidget createFilterRow(FilterHandler filterHandler, From b52e86c99a8b356f858970ff8ff1f36836d48e9f Mon Sep 17 00:00:00 2001 From: YoungOnion <39562198+YoungOnionMC@users.noreply.github.com> Date: Mon, 18 May 2026 20:31:05 -0600 Subject: [PATCH 14/14] uhhh cover and lang work --- .../resources/assets/gtceu/lang/en_ud.json | 18 ++++- .../resources/assets/gtceu/lang/en_us.json | 18 ++++- .../gtceu/api/capability/recipe/IO.java | 25 +++--- .../gtceu/api/cover/IMuiCover.java | 5 +- .../api/cover/filter/SimpleFluidFilter.java | 4 +- .../api/cover/filter/SmartItemFilter.java | 17 ++-- .../gtceu/api/recipe/RecipeHelper.java | 2 +- .../gtceu/api/recipe/RecipeRunner.java | 2 +- .../recipe/gui/GTRecipeTypeMachineWidget.java | 3 +- .../api/recipe/modifier/ParallelLogic.java | 2 +- .../gtceu/common/cover/ConveyorCover.java | 31 ++----- .../gtceu/common/cover/FluidFilterCover.java | 35 ++------ .../common/cover/FluidRegulatorCover.java | 22 ++--- .../gtceu/common/cover/ItemFilterCover.java | 40 +++------- .../common/cover/MachineControllerCover.java | 18 ++--- .../gtceu/common/cover/PumpCover.java | 30 +++---- .../gtceu/common/cover/RobotArmCover.java | 14 +--- .../gtceu/common/cover/StorageCover.java | 9 ++- .../common/cover/data/ControllerMode.java | 18 +++-- .../common/cover/data/DistributionMode.java | 12 +++ .../gtceu/common/cover/data/FilterMode.java | 4 + .../gtceu/common/cover/data/ManualIOMode.java | 11 ++- .../gtceu/common/cover/data/TransferMode.java | 22 +++-- .../detector/AdvancedEnergyDetectorCover.java | 6 +- .../detector/AdvancedFluidDetectorCover.java | 4 +- .../detector/AdvancedItemDetectorCover.java | 4 +- .../voiding/AdvancedFluidVoidingCover.java | 1 + .../voiding/AdvancedItemVoidingCover.java | 1 + .../gtceu/common/mui/GTMuiCoverUtil.java | 80 +++++++++++++++++++ .../gtceu/common/mui/GTMuiWidgets.java | 28 ++++++- .../gtceu/data/lang/LangHandler.java | 21 ++++- 31 files changed, 306 insertions(+), 201 deletions(-) create mode 100644 src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiCoverUtil.java diff --git a/src/generated/resources/assets/gtceu/lang/en_ud.json b/src/generated/resources/assets/gtceu/lang/en_ud.json index 053171bd481..385b481e206 100644 --- a/src/generated/resources/assets/gtceu/lang/en_ud.json +++ b/src/generated/resources/assets/gtceu/lang/en_ud.json @@ -2043,6 +2043,12 @@ "cover.conveyor.transfer_rate": "ɔǝs/sɯǝʇıㄥ§", "cover.detector_base.message_inverted_state": "pǝʇɹǝʌuI :snʇɐʇS buıɹoʇıuoW", "cover.detector_base.message_normal_state": "ןɐɯɹoN :snʇɐʇS buıɹoʇıuoW", + "cover.disable_with_redstone": "ǝuoʇspǝᴚ ɥʇıʍ ǝןqɐsıᗡ", + "cover.distribution.mode.insert_first": "ʎʇıɹoıɹԀ", + "cover.distribution.mode.round_robin_global": "uıqoᴚ punoᴚ", + "cover.distribution.mode.round_robin_prio": "uoıʇɔıɹʇsǝᴚ ɥʇıʍ uıqoᴚ punoᴚ", + "cover.distribution.mode.title": "ǝpoW uoıʇnqıɹʇsıᗡ", + "cover.enable_with_redstone": "ǝuoʇspǝᴚ ɥʇıʍ ǝןqɐuƎ", "cover.ender_fluid_link.iomode.disabled": "pǝןqɐsıᗡ O/I", "cover.ender_fluid_link.iomode.enabled": "pǝןqɐuƎ O/I", "cover.ender_fluid_link.title": "ʞuıꞀ pınןℲ ɹǝpuƎ", @@ -2061,6 +2067,7 @@ "cover.filter.mode.filter_both": "ʇɔɐɹʇxƎ/ʇɹǝsuI ɹǝʇןıℲ", "cover.filter.mode.filter_extract": "ʇɔɐɹʇxƎ ɹǝʇןıℲ", "cover.filter.mode.filter_insert": "ʇɹǝsuI ɹǝʇןıℲ", + "cover.filter.mode.title": "ǝpoW ɹǝʇןıℲ", "cover.fluid.voiding.advanced.title": "sbuıʇʇǝS buıpıoΛ pınןℲ pǝɔuɐʌpⱯ", "cover.fluid.voiding.title": "sbuıʇʇǝS buıpıoΛ pınןℲ", "cover.fluid_filter.config_amount.0": "˙sǝsɐǝɹɔǝp uʍop 'ʇunoɯɐ sǝsɐǝɹɔuı dn ןǝǝɥʍ ןןoɹɔS", @@ -2093,6 +2100,7 @@ "cover.item_smart_filter.filtering_mode.sifter": "ɹǝʇɟıS", "cover.item_smart_filter.title": "ɹǝʇןıℲ ɯǝʇI ʇɹɐɯS", "cover.machine_controller.control": "ʇǝbɹɐ⟘ ɹǝןןoɹʇuoƆ", + "cover.machine_controller.cover_not_controllable": "ǝןqɐןןoɹʇuoɔ ʇou ɹǝʌoƆ", "cover.machine_controller.invert.disabled.0": "unɹ oʇ ןǝʌǝן ǝuoʇspǝɹ ʇǝs ǝɥʇ uɐɥʇ ɹǝʞɐǝʍ ןɐubıs ɐ ǝɹınbǝɹ ןןıʍ ɹǝʌoɔ ǝɥʇ 'ǝpoɯ sıɥʇ uı - ɹ§ןɐɯɹoNǝ§", "cover.machine_controller.invert.enabled.0": "unɹ oʇ ןǝʌǝן ǝuoʇspǝɹ ʇǝs ǝɥʇ uɐɥʇ ɹǝbuoɹʇs ןɐubıs ɐ ǝɹınbǝɹ ןןıʍ ɹǝʌoɔ ǝɥʇ 'ǝpoɯ sıɥʇ uı - ɹ§pǝʇɹǝʌuIǝ§", "cover.machine_controller.inverted": "pǝʇɹǝʌuI", @@ -2107,18 +2115,23 @@ "cover.machine_controller.normal": "ןɐɯɹoN", "cover.machine_controller.redstone": "%d :ɥʇbuǝɹʇS ǝuoʇspǝᴚ uıW", "cover.machine_controller.suspend_powerfail": ":buıןıɐℲ ɹǝʍoԀ ʇuǝʌǝɹԀ", + "cover.machine_controller.this_cover": "ɹǝʌoɔ sıɥ⟘", "cover.machine_controller.title": "sbuıʇʇǝS ɹǝןןoɹʇuoƆ ǝuıɥɔɐW", + "cover.manual.mode.disabled": "ɹ§pǝןqɐsıᗡq§", + "cover.manual.mode.filtered": "ɹ§pǝɹǝʇןıℲq§", + "cover.manual.mode.title": "O/I ןɐnuɐW", + "cover.manual.mode.unfiltered": "ɹ§pǝɹǝʇןıɟu∩q§", "cover.pump.fluid_filter.title": "ɹǝʇןıℲ pınןℲ", "cover.pump.mode.export": "ʇɹodxƎ :ǝpoW", "cover.pump.mode.import": "ʇɹodɯI :ǝpoW", "cover.pump.title": ")%s( sbuıʇʇǝS ɹǝʌoƆ dɯnԀ", "cover.pump.transfer_rate": "%s", - "cover.robotic_arm.title": ")%s( sbuıʇʇǝS ɯɹⱯ ɔıʇoqoᴚ", "cover.robotic_arm.transfer_mode.description.0": "˙ǝןqıssod sɐ ɹǝʇןıɟ sʇı buıɥɔʇɐɯ sɯǝʇı ʎuɐɯ sɐ ɹǝɟsuɐɹʇ ןןıʍ ɹǝʌoɔ 'ǝpoɯ sıɥʇ uı - ɹ§ʎuⱯ ɹǝɟsuɐɹ⟘ǝ§", "cover.robotic_arm.transfer_mode.description.1": "˙pǝʌoɯ ǝq ʇ,uoʍ sɯǝʇı 'ǝzıs uoıʇɹod uɐɥʇ ssǝן sı sɯǝʇı ɟo ʇunoɯɐ ɟI ˙)ɹǝʇןıɟ bɐʇ ɹoɟ uoʇʇnq sıɥʇ ɹǝpun ǝןqɐıɹɐʌ ɹo( sʇoןs ɹǝʇןıɟ ɯǝʇı uı pǝıɟıɔǝds suoıʇɹod uı sɯǝʇı ʎןddns ןןıʍ ɹǝʌoɔ 'ǝpoɯ sıɥʇ uı - ɹ§ʇɔɐxƎ ʎןddnSǝ§", "cover.robotic_arm.transfer_mode.description.2": "˙pǝɹınbǝɹ ɟı sɯǝʇı ɟo ʇunoɯɐ ןɐuoıʇıppɐ buıʎןddns 'ʎɹoʇuǝʌuı uoıʇɐuıʇsǝp ǝɥʇ uı sɯǝʇı ɟo ʇunoɯɐ pǝıɟıɔǝds dǝǝʞ ןןıʍ ɹǝʌoɔ 'ǝpoɯ sıɥʇ uı - ɹ§ʇɔɐxƎ dǝǝʞǝ§", "cover.robotic_arm.transfer_mode.description.3": "˙ɹǝʇsɐɟ ʇunoɯɐ ǝbuɐɥɔ oʇ buıʞɔıןɔ ʇɟıɥs ǝsn 'ʇunoɯɐ ɯǝʇı ǝbuɐɥɔ oʇ sʇoןs ɹǝʇןıɟ uo ʞɔıןɔ ʇɥbıɹ/ʇɟǝן :dı⟘ㄥ§", "cover.robotic_arm.transfer_mode.keep_exact": "ʇɔɐxƎ dǝǝʞ", + "cover.robotic_arm.transfer_mode.title": "ǝpoW ɹǝɟsuɐɹ⟘", "cover.robotic_arm.transfer_mode.transfer_any": "ʎuⱯ ɹǝɟsuɐɹ⟘", "cover.robotic_arm.transfer_mode.transfer_exact": "ʇɔɐxƎ ʎןddnS", "cover.shutter.message.disabled": "ɹǝʇʇnɥs pǝuǝdO", @@ -2547,6 +2560,7 @@ "gtceu.io.export": "ʇɹodxƎ", "gtceu.io.import": "ʇɹodɯI", "gtceu.io.none": "ǝuoN", + "gtceu.io.title": "ǝpoW OI", "gtceu.item.tooltip.image_url": "%s :Ꞁᴚ∩ ǝbɐɯI", "gtceu.item_filter.empty_item": ")ɯǝʇI oN( ʎʇdɯƎ", "gtceu.item_filter.footer": "ǝpıɹɹǝʌo oʇ ɯǝʇı ɥʇıʍ ʞɔıןƆǝ§", @@ -3826,6 +3840,7 @@ "gtceu.recipe_modifier.default_fail": "ןıɐℲ ɹǝıɟıpoW ǝdıɔǝᴚ", "gtceu.recipe_modifier.insufficient_eu_to_start_fusion": "uoıʇɔɐǝᴚ uoısnℲ ǝʇɐıʇıuI oʇ ʎbɹǝuƎ ʇuǝıɔıɟɟnsuI", "gtceu.recipe_modifier.insufficient_voltage": "ʍoꞀ oo⟘ ɹǝı⟘ ǝbɐʇןoΛ", + "gtceu.recipe_type.show_recipes": "sǝdıɔǝᴚ ʍoɥS", "gtceu.rei.group.potion_fluids": "spınןℲ uoıʇoԀ", "gtceu.research_station": "uoıʇɐʇS ɥɔɹɐǝsǝᴚ", "gtceu.rock_breaker": "ɹǝʞɐǝɹᗺ ʞɔoᴚ", @@ -4038,7 +4053,6 @@ "gui.gtceu.share_tank.desc.0": "¡ɹǝɟɟnq uıɥʇıʍ suɹǝʇʇɐd ןןɐ ɥʇıʍ ˙ɔʇǝ/sǝssɐb/spınןɟ pǝʇɹǝsuı sǝɹɐɥS", "gui.gtceu.share_tank.title": "ʎɹoʇuǝʌuI ʞuɐ⟘ pǝɹɐɥS", "gui.widget.incrementButton.default_tooltip": "ʇunoɯɐ ǝɥʇ ǝbuɐɥɔ oʇ ɥʇoq ɹo ןɹʇƆ 'ʇɟıɥS pןoH", - "gui.widget.recipeProgressWidget.default_tooltip": "sǝdıɔǝᴚ ʍoɥS", "item.glass_lens": ")ǝʇıɥM( suǝꞀ ssɐן⅁", "item.gtceu.activity_detector_cover": "ɹoʇɔǝʇǝᗡ ʎʇıʌıʇɔⱯ", "item.gtceu.activity_detector_cover.tooltip": "˙ㄥ§ɹǝʌoƆɟ§ sɐ ǝuoʇspǝᴚ sɐ ㄥ§snʇɐʇS ʎʇıʌıʇɔⱯɟ§ ʇ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 0dd3b015484..0f901a21151 100644 --- a/src/generated/resources/assets/gtceu/lang/en_us.json +++ b/src/generated/resources/assets/gtceu/lang/en_us.json @@ -2043,6 +2043,12 @@ "cover.conveyor.transfer_rate": "§7items/sec", "cover.detector_base.message_inverted_state": "Monitoring Status: Inverted", "cover.detector_base.message_normal_state": "Monitoring Status: Normal", + "cover.disable_with_redstone": "Disable with Redstone", + "cover.distribution.mode.insert_first": "Priority", + "cover.distribution.mode.round_robin_global": "Round Robin", + "cover.distribution.mode.round_robin_prio": "Round Robin with Restriction", + "cover.distribution.mode.title": "Distribution Mode", + "cover.enable_with_redstone": "Enable with Redstone", "cover.ender_fluid_link.iomode.disabled": "I/O Disabled", "cover.ender_fluid_link.iomode.enabled": "I/O Enabled", "cover.ender_fluid_link.title": "Ender Fluid Link", @@ -2061,6 +2067,7 @@ "cover.filter.mode.filter_both": "Filter Insert/Extract", "cover.filter.mode.filter_extract": "Filter Extract", "cover.filter.mode.filter_insert": "Filter Insert", + "cover.filter.mode.title": "Filter Mode", "cover.fluid.voiding.advanced.title": "Advanced Fluid Voiding Settings", "cover.fluid.voiding.title": "Fluid Voiding Settings", "cover.fluid_filter.config_amount.0": "Scroll wheel up increases amount, down decreases.", @@ -2093,6 +2100,7 @@ "cover.item_smart_filter.filtering_mode.sifter": "Sifter", "cover.item_smart_filter.title": "Smart Item Filter", "cover.machine_controller.control": "Controller Target", + "cover.machine_controller.cover_not_controllable": "Cover not controllable", "cover.machine_controller.invert.disabled.0": "§eNormal§r - in this mode, the cover will require a signal weaker than the set redstone level to run", "cover.machine_controller.invert.enabled.0": "§eInverted§r - in this mode, the cover will require a signal stronger than the set redstone level to run", "cover.machine_controller.inverted": "Inverted", @@ -2107,18 +2115,23 @@ "cover.machine_controller.normal": "Normal", "cover.machine_controller.redstone": "Min Redstone Strength: %d", "cover.machine_controller.suspend_powerfail": "Prevent Power Failing:", + "cover.machine_controller.this_cover": "This cover", "cover.machine_controller.title": "Machine Controller Settings", + "cover.manual.mode.disabled": "§bDisabled§r", + "cover.manual.mode.filtered": "§bFiltered§r", + "cover.manual.mode.title": "Manual I/O", + "cover.manual.mode.unfiltered": "§bUnfiltered§r", "cover.pump.fluid_filter.title": "Fluid Filter", "cover.pump.mode.export": "Mode: Export", "cover.pump.mode.import": "Mode: Import", "cover.pump.title": "Pump Cover Settings (%s)", "cover.pump.transfer_rate": "%s", - "cover.robotic_arm.title": "Robotic Arm Settings (%s)", "cover.robotic_arm.transfer_mode.description.0": "§eTransfer Any§r - in this mode, cover will transfer as many items matching its filter as possible.", "cover.robotic_arm.transfer_mode.description.1": "§eSupply Exact§r - in this mode, cover will supply items in portions specified in item filter slots (or variable under this button for tag filter). If amount of items is less than portion size, items won't be moved.", "cover.robotic_arm.transfer_mode.description.2": "§eKeep Exact§r - in this mode, cover will keep specified amount of items in the destination inventory, supplying additional amount of items if required.", "cover.robotic_arm.transfer_mode.description.3": "§7Tip: left/right click on filter slots to change item amount, use shift clicking to change amount faster.", "cover.robotic_arm.transfer_mode.keep_exact": "Keep Exact", + "cover.robotic_arm.transfer_mode.title": "Transfer Mode", "cover.robotic_arm.transfer_mode.transfer_any": "Transfer Any", "cover.robotic_arm.transfer_mode.transfer_exact": "Supply Exact", "cover.shutter.message.disabled": "Opened shutter", @@ -2547,6 +2560,7 @@ "gtceu.io.export": "Export", "gtceu.io.import": "Import", "gtceu.io.none": "None", + "gtceu.io.title": "IO Mode", "gtceu.item.tooltip.image_url": "Image URL: %s", "gtceu.item_filter.empty_item": "Empty (No Item)", "gtceu.item_filter.footer": "§eClick with item to override", @@ -3826,6 +3840,7 @@ "gtceu.recipe_modifier.default_fail": "Recipe Modifier Fail", "gtceu.recipe_modifier.insufficient_eu_to_start_fusion": "Insufficient Energy to Initiate Fusion Reaction", "gtceu.recipe_modifier.insufficient_voltage": "Voltage Tier Too Low", + "gtceu.recipe_type.show_recipes": "Show Recipes", "gtceu.rei.group.potion_fluids": "Potion Fluids", "gtceu.research_station": "Research Station", "gtceu.rock_breaker": "Rock Breaker", @@ -4038,7 +4053,6 @@ "gui.gtceu.share_tank.desc.0": "Shares inserted fluids/gasses/etc. with all patterns within buffer!", "gui.gtceu.share_tank.title": "Shared Tank Inventory", "gui.widget.incrementButton.default_tooltip": "Hold Shift, Ctrl or both to change the amount", - "gui.widget.recipeProgressWidget.default_tooltip": "Show Recipes", "item.glass_lens": "Glass Lens (White)", "item.gtceu.activity_detector_cover": "Activity Detector", "item.gtceu.activity_detector_cover.tooltip": "§7Gives out §fActivity Status§7 as Redstone as §fCover§7.", diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/IO.java b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/IO.java index ba6ef3a0ca1..2bd2d1cf27d 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/IO.java +++ b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/IO.java @@ -8,19 +8,26 @@ */ public enum IO { - IN("gtceu.io.import", "import"), - OUT("gtceu.io.export", "export"), - BOTH("gtceu.io.both", "both"), - NONE("gtceu.io.none", "none"); + IN("import"), + OUT("export"), + BOTH("both"), + NONE("none"); - @Getter - public final String tooltip; + public final String localeName; @Getter public final UITexture uiTexture; - IO(String tooltip, String textureName) { - this.tooltip = tooltip; - this.uiTexture = UITexture.fullImage("gtceu:textures/gui/icon/io_mode/" + textureName + ".png"); + IO(String localeName) { + this.localeName = localeName; + this.uiTexture = UITexture.fullImage("gtceu:textures/gui/icon/io_mode/" + localeName + ".png"); + } + + public static String getTitle() { + return "gtceu.io.title"; + } + + public String getTooltip() { + return "gtceu.io." + localeName; } public boolean support(IO io) { diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/IMuiCover.java b/src/main/java/com/gregtechceu/gtceu/api/cover/IMuiCover.java index fc5a4bcf050..82c03427bec 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/IMuiCover.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/IMuiCover.java @@ -5,6 +5,7 @@ import com.gregtechceu.gtceu.common.mui.GTGuiTheme; import com.gregtechceu.gtceu.common.mui.GTMuiWidgets; +import net.minecraft.world.item.ItemStack; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; @@ -46,8 +47,8 @@ default ModularScreen createScreen(SidedPosGuiData data, ModularPanel mainPan @Override default ModularPanel buildUI(SidedPosGuiData data, PanelSyncManager syncManager, UISettings settings) { ModularPanel panel = ModularPanel.defaultPanel(this.self().coverDefinition.getId().getPath(), 176, 192 + 18); - - panel.child(GTMuiWidgets.createTitleBar(() -> this.self().getAttachItem(), 176, GTGuiTextures.BACKGROUND)); + ItemStack stack = this.self().coverHolder.getCoverAtSide(this.self().attachedSide).getAttachItem(); + panel.child(GTMuiWidgets.createTitleBar(() -> stack, 176, GTGuiTextures.BACKGROUND)); Flow column = Flow.column() .top(7).margin(7, 0) diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleFluidFilter.java b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleFluidFilter.java index 8bf3e6488bb..ad04d62d4cf 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleFluidFilter.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleFluidFilter.java @@ -138,10 +138,10 @@ public Flow getFilterUI(GuiData data, PanelSyncManager syncManager, UISettings s .coverChildren() .gridOfSizeWidth(9, 3, (x, y, i) -> new FluidSlot().syncHandler("filter_slot_" + i)); - BooleanSyncValue blacklist = new BooleanSyncValue(this::isBlackList, this::setBlackList); + BooleanSyncValue blacklist = new BooleanSyncValue(this::isBlackList, this::setBlackList).allowC2S(); syncManager.syncValue("blacklist", blacklist); - BooleanSyncValue ignoreNBT = new BooleanSyncValue(this::isIgnoreNbt, this::setIgnoreNbt); + BooleanSyncValue ignoreNBT = new BooleanSyncValue(this::isIgnoreNbt, this::setIgnoreNbt).allowC2S(); syncManager.syncValue("ignoreNBT", ignoreNBT); Flow filterConfigButtons = Flow.col() diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SmartItemFilter.java b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SmartItemFilter.java index cf6dc7ed77c..34bb229b2a7 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SmartItemFilter.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SmartItemFilter.java @@ -105,15 +105,13 @@ public ModularPanel getPanel(GuiData data, PanelSyncManager syncManager, UISe @Override public Flow getFilterUI(GuiData data, PanelSyncManager syncManager, UISettings settings) { EnumSyncValue mode = new EnumSyncValue<>(SmartFilteringMode.class, - this::getFilterMode, this::setFilterMode); + this::getFilterMode, this::setFilterMode).allowC2S(); syncManager.syncValue("mode", mode); return Flow.row() - .childPadding(2) - .child(Text.str("Recipe Type:").asWidget()) .child(new ContextMenuButton<>("smart_filter") - .size(20) + .size(18) .requiresClick() .tooltip(r -> r.add(Text.str("Set Machine Recipe Type"))) .openRightDown() @@ -133,17 +131,12 @@ public Flow getFilterUI(GuiData data, PanelSyncManager syncManager, UISettings s .background(GuiTextures.MC_BUTTON) .selectedBackground(GuiTextures.MC_BUTTON) .value(bsv) - .tooltip(r -> r.add(Text.str(SmartFilteringMode.VALUES[w].localeName))); + .tooltip(r -> r.add(Text.comp(Component.translatable(SmartFilteringMode.VALUES[w].getTooltip())))); }) ) ) - ); - - /*return new GTMuiWidgets.EnumRowBuilder<>(SmartFilteringMode.class) - .value(mode) - .overlay(16, SmartFilteringMode.getTextures()) - .lang(Text.dynamic(() -> Component.translatable(filterMode.localeName))) - .build().margin(7);*/ + ) + .child(Text.str("Recipe Type").asWidget().verticalCenter().rightRel(0.f)); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/api/recipe/RecipeHelper.java b/src/main/java/com/gregtechceu/gtceu/api/recipe/RecipeHelper.java index 37b4b511e86..1cd5a12a9b6 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/recipe/RecipeHelper.java +++ b/src/main/java/com/gregtechceu/gtceu/api/recipe/RecipeHelper.java @@ -229,7 +229,7 @@ public static ActionResult handleRecipe(IRecipeCapabilityHolder holder, GTRecipe if (!simulated && ConfigHolder.INSTANCE.dev.debug) { GTCEu.LOGGER.warn("IO {} Error while handling recipe {} outputs for {}", - Component.translatable(io.tooltip).getString(), recipe, holder); + Component.translatable(io.getTooltip()).getString(), recipe, holder); } String key = "gtceu.recipe_logic.insufficient_" + (io == IO.IN ? "in" : "out"); return ActionResult.fail(Component.translatable(key) diff --git a/src/main/java/com/gregtechceu/gtceu/api/recipe/RecipeRunner.java b/src/main/java/com/gregtechceu/gtceu/api/recipe/RecipeRunner.java index 67e6a18b109..0bc6050ace0 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/recipe/RecipeRunner.java +++ b/src/main/java/com/gregtechceu/gtceu/api/recipe/RecipeRunner.java @@ -124,7 +124,7 @@ private ActionResult handleContents() { return ActionResult.fail( Component.translatable("gtceu.recipe_logic.no_capabilities") .append(Component.literal(": ")) - .append(Component.translatable(io.tooltip)), + .append(Component.translatable(io.getTooltip())), null, io); } diff --git a/src/main/java/com/gregtechceu/gtceu/api/recipe/gui/GTRecipeTypeMachineWidget.java b/src/main/java/com/gregtechceu/gtceu/api/recipe/gui/GTRecipeTypeMachineWidget.java index 30f6b9403e0..e87a76c722a 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/recipe/gui/GTRecipeTypeMachineWidget.java +++ b/src/main/java/com/gregtechceu/gtceu/api/recipe/gui/GTRecipeTypeMachineWidget.java @@ -13,6 +13,7 @@ import brachy.modularui.value.sync.DoubleSyncValue; import brachy.modularui.value.sync.PanelSyncManager; import brachy.modularui.widgets.layout.Flow; +import net.minecraft.network.chat.Component; import java.util.function.DoubleSupplier; @@ -55,7 +56,7 @@ public GTRecipeTypeMachineWidget(GTRecipeType recipeType, PanelSyncManager syncM return true; }); - child(progressWidget.tooltip(r -> r.addLine(Text.lang("gtceu.recipe_type.show_recipes")))); + child(progressWidget.tooltip(r -> r.add(Text.comp(Component.translatable("gtceu.recipe_type.show_recipes"))))); child(outputColumn); for (var entry : recipeType.maxInputs.object2IntEntrySet()) { diff --git a/src/main/java/com/gregtechceu/gtceu/api/recipe/modifier/ParallelLogic.java b/src/main/java/com/gregtechceu/gtceu/api/recipe/modifier/ParallelLogic.java index a1e903a2883..afdad07a749 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/recipe/modifier/ParallelLogic.java +++ b/src/main/java/com/gregtechceu/gtceu/api/recipe/modifier/ParallelLogic.java @@ -89,7 +89,7 @@ public static int getMaxByInput(IRecipeCapabilityHolder holder, GTRecipe recipe, if (minimum == Integer.MAX_VALUE) { Component reason = Component.translatable("gtceu.recipe_logic.no_capabilities") .append(Component.literal(": ")) - .append(Component.translatable(IO.IN.tooltip)); + .append(Component.translatable(IO.IN.getTooltip())); RecipeLogic.putFailureReason(holder, recipe, reason); return 0; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/ConveyorCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/ConveyorCover.java index db677854b2b..1b2f9027a15 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/ConveyorCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/ConveyorCover.java @@ -17,11 +17,13 @@ import com.gregtechceu.gtceu.common.cover.data.DistributionMode; import com.gregtechceu.gtceu.common.cover.data.ManualIOMode; import com.gregtechceu.gtceu.common.mui.GTGuiTextures; +import com.gregtechceu.gtceu.common.mui.GTMuiCoverUtil; import com.gregtechceu.gtceu.common.mui.GTMuiWidgets; import com.gregtechceu.gtceu.utils.GTTransferUtils; import com.gregtechceu.gtceu.utils.GTUtil; import com.gregtechceu.gtceu.utils.ItemStackHashStrategy; +import lombok.Setter; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -69,12 +71,12 @@ public class ConveyorCover extends CoverBehavior implements IIOCover, IMuiCover, @Getter @RerenderOnChanged protected IO io; + @Setter @SaveField - @SyncToClient @Getter protected DistributionMode distributionMode; + @Setter @SaveField - @SyncToClient @Getter protected ManualIOMode manualIOMode = ManualIOMode.DISABLED; @SaveField @@ -123,11 +125,6 @@ protected boolean isSubscriptionActive() { .resolve().orElse(null); } - public void setDistributionMode(DistributionMode mode) { - distributionMode = mode; - syncDataHolder.markClientSyncFieldDirty("distributionMode"); - } - ////////////////////////////////////// // ***** Initialization ******// ////////////////////////////////////// @@ -150,10 +147,6 @@ public void setIo(IO io) { subscriptionHandler.updateSubscription(); } - protected void setManualIOMode(ManualIOMode manualIOMode) { - this.manualIOMode = manualIOMode; - } - @Override public void onLoad() { super.onLoad(); @@ -440,25 +433,15 @@ public void createCoverUIRows(Flow column, SidedPosGuiData data, PanelSyncManage .coverChildrenHeight() .widthRel(1.0f) .child(GTMuiWidgets.createIOCycleButton(ioSync, false).left(0)) - .child(Text.dynamic(() -> Component.translatable(getIo().tooltip)).asWidget().verticalCenter().rightRel(0.f))); + .child(Text.comp(Component.translatable(IO.getTitle())).asWidget().verticalCenter().rightRel(0.f))); column.child(GTMuiWidgets.createFilterRow(filterHandler, data, syncManager, settings)); } if (createDistributionModeRow()) { - column.child(new GTMuiWidgets.EnumRowBuilder<>(DistributionMode.class) - .value(distMode) - .overlay(16, GTGuiTextures.DISTRIBUTION_MODE_OVERLAY) - .lang(Text.dynamic(() -> Component.translatable(distributionMode.localeName))) - .build()); + GTMuiCoverUtil.addDistributionModeRow(column, distMode); } - if (createManualIOModeRow()) { - column.child(new GTMuiWidgets.EnumRowBuilder<>(ManualIOMode.class) - .value(manualMode) - .overlay(16, GTGuiTextures.MANUAL_IO_OVERLAY_IN) - .lang(Text.dynamic(() -> Component.translatable(manualIOMode.localeName))) - .build()); - + GTMuiCoverUtil.addManualIORow(column, manualMode); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/FluidFilterCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/FluidFilterCover.java index f0154b51885..56cc9f5d33b 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/FluidFilterCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/FluidFilterCover.java @@ -13,6 +13,7 @@ import com.gregtechceu.gtceu.common.cover.data.FilterMode; import com.gregtechceu.gtceu.common.cover.data.ManualIOMode; import com.gregtechceu.gtceu.common.mui.GTGuiTextures; +import com.gregtechceu.gtceu.common.mui.GTMuiCoverUtil; import com.gregtechceu.gtceu.common.mui.GTMuiWidgets; import net.minecraft.MethodsReturnNonnullByDefault; @@ -43,13 +44,13 @@ public class FluidFilterCover extends CoverBehavior implements IMuiCover { protected FluidFilter fluidFilter; + @Setter @SaveField - @SyncToClient @Getter protected FilterMode filterMode = FilterMode.FILTER_INSERT; private FilteredFluidHandlerWrapper fluidFilterWrapper; - @SaveField @Setter + @SaveField @Getter protected ManualIOMode allowFlow = ManualIOMode.DISABLED; @@ -57,11 +58,6 @@ public FluidFilterCover(CoverDefinition definition, ICoverable coverHolder, Dire super(definition, coverHolder, attachedSide); } - public void setFilterMode(FilterMode filterMode) { - this.filterMode = filterMode; - syncDataHolder.markClientSyncFieldDirty("filterMode"); - } - @Override public boolean canAttach() { return super.canAttach() && coverHolder.getFluidHandlerCap(attachedSide, false) != null; @@ -91,37 +87,20 @@ public FluidFilter getFluidFilter() { public void createCoverUIRows(Flow column, SidedPosGuiData data, PanelSyncManager syncManager, UISettings settings) { EnumSyncValue filterMode = new EnumSyncValue<>(FilterMode.class, - this::getFilterMode, this::setFilterMode); + this::getFilterMode, this::setFilterMode).allowC2S(); EnumSyncValue ioMode = new EnumSyncValue<>(ManualIOMode.class, - this::getAllowFlow, this::setAllowFlow); + this::getAllowFlow, this::setAllowFlow).allowC2S(); syncManager.syncValue("filterMode", filterMode); syncManager.syncValue("ioMode", ioMode); - var panelHandler = syncManager.syncedPanel("filterPanel", true, - (sm, sh) -> fluidFilter.getPanel(data, sm, settings)); - DynamicSyncHandler filterButton = new DynamicSyncHandler() - .widgetProvider((sm, buf) -> new ButtonWidget<>() - .onMousePressed((context, b) -> { - panelHandler.openPanel(); - return true; - })); column.coverChildrenHeight(); column.child(getFluidFilter().getFilterUI(data, syncManager, settings).marginBottom(4)); - column.child(new GTMuiWidgets.EnumRowBuilder<>(FilterMode.class) - .value(filterMode) - .overlay(16, GTGuiTextures.FILTER_MODE_OVERLAY) - .lang(Text.dynamic(() -> Component.translatable(getFilterMode().getTooltip()))) - .build()); - - column.child(new GTMuiWidgets.EnumRowBuilder<>(ManualIOMode.class) - .value(ioMode) - .overlay(16, GTGuiTextures.MANUAL_IO_OVERLAY_IN) - .lang(Text.dynamic(() -> Component.translatable(getAllowFlow().getTooltip()))) - .build()); + GTMuiCoverUtil.addFilterModeRow(column, filterMode); + GTMuiCoverUtil.addManualIORow(column, ioMode); } private class FilteredFluidHandlerWrapper extends FluidHandlerDelegate { diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/FluidRegulatorCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/FluidRegulatorCover.java index 8b79db6dc75..83ba6d10dd6 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/FluidRegulatorCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/FluidRegulatorCover.java @@ -10,6 +10,7 @@ import com.gregtechceu.gtceu.common.cover.data.BucketMode; import com.gregtechceu.gtceu.common.cover.data.TransferMode; import com.gregtechceu.gtceu.common.mui.GTGuiTextures; +import com.gregtechceu.gtceu.common.mui.GTMuiCoverUtil; import com.gregtechceu.gtceu.common.mui.GTMuiWidgets; import net.minecraft.MethodsReturnNonnullByDefault; @@ -40,12 +41,11 @@ public class FluidRegulatorCover extends PumpCover { private static final int MAX_STACK_SIZE = 2_048_000_000; // Capacity of quantum tank IX @SaveField - @SyncToClient @Getter private TransferMode transferMode = TransferMode.TRANSFER_ANY; + @Setter @SaveField - @SyncToClient @Getter private BucketMode transferBucketMode = BucketMode.MILLI_BUCKET; @SaveField @@ -156,16 +156,10 @@ private int keepExact(IFluidHandlerModifiable source, IFluidHandlerModifiable de return platformTransferLimit - fluidLeftToTransfer; } - private void setTransferBucketMode(BucketMode transferBucketMode) { - this.transferBucketMode = transferBucketMode; - syncDataHolder.markClientSyncFieldDirty("transferBucketMode"); - } - private void setTransferMode(TransferMode transferMode) { this.transferMode = transferMode; if (!this.isRemote()) { - syncDataHolder.markClientSyncFieldDirty("transferMode"); configureFilter(); } } @@ -193,19 +187,15 @@ public void createCoverUIRows(Flow column, SidedPosGuiData data, PanelSyncManage UISettings settings) { super.createCoverUIRows(column, data, syncManager, settings); - var transferMode = new EnumSyncValue<>(TransferMode.class, this::getTransferMode, this::setTransferMode); - var transferSize = new IntSyncValue(this::getGlobalTransferLimit, this::setGlobalTransferLimit); + var transferMode = new EnumSyncValue<>(TransferMode.class, this::getTransferMode, this::setTransferMode).allowC2S(); + var transferSize = new IntSyncValue(this::getGlobalTransferLimit, this::setGlobalTransferLimit).allowC2S(); var transferBucketMode = new EnumSyncValue<>(BucketMode.class, this::getTransferBucketMode, - this::setTransferBucketMode); + this::setTransferBucketMode).allowC2S(); syncManager.syncValue("transferMode", transferMode); syncManager.syncValue("transferSize", transferSize); - column.child(new GTMuiWidgets.EnumRowBuilder<>(TransferMode.class) - .value(transferMode) - .overlay(16, GTGuiTextures.TRANSFER_MODE_OVERLAY) - .lang(Text.dynamic(() -> Component.translatable(getTransferMode().tooltip))) - .build()); + GTMuiCoverUtil.addTransferModeRow(column, transferMode); column.child(GTMuiWidgets.createIntInputWithBucketMode(transferSize, transferBucketMode, () -> maxFluidTransferRate)); diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/ItemFilterCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/ItemFilterCover.java index f9df621fb61..62d9a9beded 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/ItemFilterCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/ItemFilterCover.java @@ -14,6 +14,7 @@ import com.gregtechceu.gtceu.common.cover.data.FilterMode; import com.gregtechceu.gtceu.common.cover.data.ManualIOMode; import com.gregtechceu.gtceu.common.mui.GTGuiTextures; +import com.gregtechceu.gtceu.common.mui.GTMuiCoverUtil; import com.gregtechceu.gtceu.common.mui.GTMuiWidgets; import net.minecraft.MethodsReturnNonnullByDefault; @@ -45,13 +46,13 @@ public class ItemFilterCover extends CoverBehavior implements IMuiCover { protected ItemFilter itemFilter; + @Setter @SaveField - @SyncToClient @Getter protected FilterMode filterMode = FilterMode.FILTER_INSERT; private FilteredItemHandlerWrapper itemFilterWrapper; - @SaveField @Setter + @SaveField @Getter protected ManualIOMode allowFlow = ManualIOMode.DISABLED; @@ -70,11 +71,6 @@ public ItemFilter getItemFilter() { return itemFilter; } - public void setFilterMode(FilterMode filterMode) { - this.filterMode = filterMode; - syncDataHolder.markClientSyncFieldDirty("filterMode"); - } - @Override public boolean canAttach() { return super.canAttach() && coverHolder.getItemHandlerCap(attachedSide, false) != null; @@ -100,35 +96,19 @@ public void onAttached(ItemStack itemStack, @Nullable ServerPlayer player) { public void createCoverUIRows(Flow column, SidedPosGuiData data, PanelSyncManager syncManager, UISettings settings) { EnumSyncValue filterMode = new EnumSyncValue<>(FilterMode.class, - this::getFilterMode, this::setFilterMode); + this::getFilterMode, this::setFilterMode).allowC2S(); EnumSyncValue ioMode = new EnumSyncValue<>(ManualIOMode.class, - this::getAllowFlow, this::setAllowFlow); + this::getAllowFlow, this::setAllowFlow).allowC2S(); syncManager.syncValue("filterMode", filterMode); syncManager.syncValue("ioMode", ioMode); - var panelHandler = syncManager.syncedPanel("filterPanel", true, - (sm, sh) -> itemFilter.getPanel(data, sm, settings)); - - DynamicSyncHandler filterButton = new DynamicSyncHandler() - .widgetProvider((sm, buf) -> new ButtonWidget<>() - .onMousePressed((context, b) -> { - panelHandler.openPanel(); - return true; - })); - column.child(getItemFilter().getFilterUI(data, syncManager, settings).marginBottom(4)); - column.child(new GTMuiWidgets.EnumRowBuilder<>(FilterMode.class) - .value(filterMode) - .overlay(16, GTGuiTextures.FILTER_MODE_OVERLAY) - .lang(Text.dynamic(() -> Component.translatable(getFilterMode().getTooltip()))) - .build()); - - column.child(new GTMuiWidgets.EnumRowBuilder<>(ManualIOMode.class) - .value(ioMode) - .overlay(16, GTGuiTextures.MANUAL_IO_OVERLAY_IN) - .lang(Text.dynamic(() -> Component.translatable(getAllowFlow().getTooltip()))) - .build()); + column.coverChildrenHeight(); + column.child(getItemFilter().getFilterUI(data, syncManager, settings).marginBottom(2)); + + GTMuiCoverUtil.addFilterModeRow(column, filterMode); + GTMuiCoverUtil.addManualIORow(column, ioMode); } private class FilteredItemHandlerWrapper extends ItemHandlerDelegate { diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/MachineControllerCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/MachineControllerCover.java index 80e531ab974..42031f4f0db 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/MachineControllerCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/MachineControllerCover.java @@ -61,7 +61,6 @@ public class MachineControllerCover extends CoverBehavior implements IMuiCover { private int minRedstoneStrength = 1; @SaveField - @SyncToClient @Getter @Nullable private ControllerMode controllerMode = ControllerMode.MACHINE; @@ -111,7 +110,6 @@ public void setControllerMode(@Nullable ControllerMode controllerMode) { resetCurrentControllable(); this.controllerMode = controllerMode; - syncDataHolder.markClientSyncFieldDirty("filterMode"); updateInput(); } @@ -198,7 +196,7 @@ private int getInputSignal() { @Override public ModularPanel buildUI(SidedPosGuiData data, PanelSyncManager syncManager, UISettings settings) { EnumSyncValue controllerModeValue = new EnumSyncValue<>(ControllerMode.class, - this::getControllerMode, this::setControllerMode); + this::getControllerMode, this::setControllerMode).allowC2S(); syncManager.syncValue("controllerMode", controllerModeValue); @@ -212,15 +210,15 @@ public ModularPanel buildUI(SidedPosGuiData data, PanelSyncManager syncManage .child(coverUIRow() .child(new ToggleButton() .size(16).left(0) - .value(new BooleanSyncValue(this::isInverted, ($) -> this.setInverted(true))) + .value(new BooleanSyncValue(this::isInverted, ($) -> this.setInverted(true)).allowC2S()) .overlay(GTGuiTextures.OVERLAY_REDSTONE_ON)) - .child(Text.lang("cover.enable_with_redstone").asWidget() + .child(Text.comp(Component.translatable("cover.enable_with_redstone")).asWidget() .heightRel(1.0f).left(20))) .child(coverUIRow() .child(new ToggleButton() .size(16).left(0) .value(new BooleanSyncValue(() -> !this.isInverted(), - ($) -> this.setInverted(false))) + ($) -> this.setInverted(false)).allowC2S()) .overlay(GTGuiTextures.OVERLAY_REDSTONE_OFF)) .child(Text.lang("cover.disable_with_redstone").asWidget() .heightRel(1.0f).left(20))) @@ -228,7 +226,7 @@ public ModularPanel buildUI(SidedPosGuiData data, PanelSyncManager syncManage .child(new ToggleButton() .size(16).left(0) .value(new BooleanSyncValue(() -> preventPowerFail, - bool -> preventPowerFail = bool)) + bool -> preventPowerFail = bool).allowC2S()) .overlay(GTGuiTextures.CIRCUIT_OVERLAY)) .child(Text.lang("cover.machine_controller.suspend_powerfail").asWidget() .heightRel(1.0f).left(20))) @@ -247,7 +245,7 @@ public ModularPanel buildUI(SidedPosGuiData data, PanelSyncManager syncManage .bounds(0, 15) .stopper(1.0) .value(new DoubleSyncValue(() -> (double) redstoneSignalOutput, - v -> redstoneSignalOutput = (int) v)))) + v -> redstoneSignalOutput = (int) v).allowC2S()))) // Separating line .child(coverUIRow().child(new Rectangle().color(UI_TEXT_COLOR).asWidget() .height(1).widthRel(0.9f).leftRel(0.5f)).margin(0, 2)) @@ -292,7 +290,7 @@ private Widget modeButton(EnumSyncValue syncValue, Controller return GuiTextures.MC_BUTTON.asWidget().size(18) .overlay(GTGuiTextures.BUTTON_CROSS) - .tooltip(t -> t.addLine(Text.lang(mode.localeName)).addLine(detail.getFormatted())); + .tooltip(t -> t.addLine(Text.lang(mode.getTooltip())).addLine(detail.getFormatted())); } ItemStack stack; @@ -311,7 +309,7 @@ private Widget modeButton(EnumSyncValue syncValue, Controller return new ToggleButton().size(18) .value(boolValueOf(syncValue, mode)) .overlay(new ItemDrawable(stack).asIcon().size(16)) - .tooltip(t -> t.addLine(Text.lang(mode.localeName)) + .tooltip(t -> t.addLine(Text.lang(mode.getTooltip())) .addLine(stack.getHoverName())); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/PumpCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/PumpCover.java index 5986a661143..234125c65da 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/PumpCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/PumpCover.java @@ -18,9 +18,11 @@ import com.gregtechceu.gtceu.common.cover.data.BucketMode; import com.gregtechceu.gtceu.common.cover.data.ManualIOMode; import com.gregtechceu.gtceu.common.mui.GTGuiTextures; +import com.gregtechceu.gtceu.common.mui.GTMuiCoverUtil; import com.gregtechceu.gtceu.common.mui.GTMuiWidgets; import com.gregtechceu.gtceu.utils.GTTransferUtils; +import lombok.Setter; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -45,6 +47,7 @@ import lombok.Getter; import org.jetbrains.annotations.Nullable; +import java.util.ArrayList; import java.util.List; import javax.annotation.ParametersAreNonnullByDefault; @@ -67,12 +70,12 @@ public class PumpCover extends CoverBehavior implements IIOCover, IMuiCover, ICo @Getter @RerenderOnChanged protected IO io = IO.OUT; + @Setter @SaveField - @SyncToClient @Getter protected BucketMode bucketMode = BucketMode.MILLI_BUCKET; + @Setter @SaveField - @SyncToClient @Getter protected ManualIOMode manualIOMode = ManualIOMode.DISABLED; @@ -179,16 +182,6 @@ public void setTransferRate(int milliBucketsPerTick) { this.transferRate = Math.min(Math.max(milliBucketsPerTick, 0), maxFluidTransferRate); } - public void setBucketMode(BucketMode bucketMode) { - this.bucketMode = bucketMode; - syncDataHolder.markClientSyncFieldDirty("bucketMode"); - } - - protected void setManualIOMode(ManualIOMode manualIOMode) { - this.manualIOMode = manualIOMode; - syncDataHolder.markClientSyncFieldDirty("manualIOMode"); - } - protected void update() { long timer = coverHolder.getOffsetTimer(); if (timer % 5 != 0) @@ -282,15 +275,14 @@ public void createCoverUIRows(Flow column, SidedPosGuiData data, PanelSyncManage column.child(GTMuiWidgets.createIntInputWithBucketMode(transferRateSync, bucketModeSync, () -> maxFluidTransferRate)); - column.child(GTMuiWidgets.createIOCycleButton(ioSync, false)); + column.child(Flow.row() + .coverChildrenHeight() + .widthRel(1.0f) + .child(GTMuiWidgets.createIOCycleButton(ioSync, false)).left(0) + .child(Text.comp(Component.translatable(IO.getTitle())).asWidget().verticalCenter().rightRel(0.f))); column.child(GTMuiWidgets.createFilterRow(filterHandler, data, syncManager, settings)); - column.child(new GTMuiWidgets.EnumRowBuilder<>(ManualIOMode.class) - .value(manualIOModeSync) - .overlay(16, GTGuiTextures.MANUAL_IO_OVERLAY_IN) - .lang(Text.dynamic(() -> Component.translatable(manualIOMode.localeName))) - .langTooltip(Text.comp(Component.translatable("cover.universal.manual_import_export.mode.description"))) - .build()); + GTMuiCoverUtil.addManualIORow(column, manualIOModeSync); } protected void configureFilter() { diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/RobotArmCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/RobotArmCover.java index 796146bac1a..8c7ef4314fb 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/RobotArmCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/RobotArmCover.java @@ -9,6 +9,7 @@ import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.cover.data.TransferMode; import com.gregtechceu.gtceu.common.mui.GTGuiTextures; +import com.gregtechceu.gtceu.common.mui.GTMuiCoverUtil; import com.gregtechceu.gtceu.common.mui.GTMuiWidgets; import com.gregtechceu.gtceu.common.pipelike.item.ItemNetHandler; @@ -40,13 +41,11 @@ public class RobotArmCover extends ConveyorCover { @SaveField - @SyncToClient @Getter protected TransferMode transferMode; - + @Setter @SaveField @Getter - @Setter protected int globalTransferLimit; protected int itemsTransferBuffered; @@ -168,16 +167,12 @@ public void createCoverUIRows(Flow column, SidedPosGuiData data, PanelSyncManage var transferMode = new EnumSyncValue<>(TransferMode.class, this::getTransferMode, this::setTransferMode) .allowC2S(); - var transferSize = new IntSyncValue(this::getGlobalTransferLimit, v -> this.globalTransferLimit = v).allowC2S(); + var transferSize = new IntSyncValue(this::getGlobalTransferLimit, this::setGlobalTransferLimit).allowC2S(); syncManager.syncValue("transferMode", transferMode); syncManager.syncValue("transferSize", transferSize); - column.child(new GTMuiWidgets.EnumRowBuilder<>(TransferMode.class) - .value(transferMode) - .overlay(16, GTGuiTextures.TRANSFER_MODE_OVERLAY) - .lang(Text.dynamic(() -> Component.translatable(getTransferMode().tooltip))) - .build()); + GTMuiCoverUtil.addTransferModeRow(column, transferMode); column.child(GTMuiWidgets.createIntInputWithButtons(transferSize, () -> 1, () -> getTransferMode().maxStackSize) .setEnabledIf($ -> shouldShowStackSize())); @@ -187,7 +182,6 @@ public void setTransferMode(TransferMode transferMode) { this.transferMode = transferMode; if (!this.isRemote()) { - syncDataHolder.markClientSyncFieldDirty("transferMode"); configureFilter(); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/StorageCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/StorageCover.java index 920d437b9b2..5ba0349719c 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/StorageCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/StorageCover.java @@ -66,11 +66,12 @@ public boolean canAttach() { public void createCoverUIRows(Flow parent, SidedPosGuiData data, PanelSyncManager syncManager, UISettings settings) { parent.child(SlotGroupWidget.builder() - .matrix("IIIIII", "IIIIII", "IIIIII") - .key('I', i -> new ItemSlot() + .matrix("IIIIII", "IIIIII", "IIIIII") + .key('I', i -> new ItemSlot() .slot(SyncHandlers.itemSlot(inventory, i).singletonSlotGroup(i))) - .build()) - .rightRel(0.5F) + .build()) + .horizontalCenter() + .paddingTop(20) .margin(3) .coverChildren(); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/data/ControllerMode.java b/src/main/java/com/gregtechceu/gtceu/common/cover/data/ControllerMode.java index a13f314e148..89053ad7e42 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/data/ControllerMode.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/data/ControllerMode.java @@ -6,13 +6,13 @@ public enum ControllerMode { - MACHINE("cover.machine_controller.mode.machine", null), - COVER_UP("cover.machine_controller.mode.cover_up", Direction.UP), - COVER_DOWN("cover.machine_controller.mode.cover_down", Direction.DOWN), - COVER_NORTH("cover.machine_controller.mode.cover_north", Direction.NORTH), - COVER_EAST("cover.machine_controller.mode.cover_east", Direction.EAST), - COVER_SOUTH("cover.machine_controller.mode.cover_south", Direction.SOUTH), - COVER_WEST("cover.machine_controller.mode.cover_west", Direction.WEST); + MACHINE("machine", null), + COVER_UP("cover_up", Direction.UP), + COVER_DOWN("cover_down", Direction.DOWN), + COVER_NORTH("cover_north", Direction.NORTH), + COVER_EAST("cover_east", Direction.EAST), + COVER_SOUTH("cover_south", Direction.SOUTH), + COVER_WEST("cover_west", Direction.WEST); @Getter public final String localeName; @@ -23,5 +23,9 @@ public enum ControllerMode { this.side = side; } + public String getTooltip() { + return "cover.machine_controller.mode." + localeName; + } + public static final String nullLocaleName = "cover.machine_controller.mode.null"; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/data/DistributionMode.java b/src/main/java/com/gregtechceu/gtceu/common/cover/data/DistributionMode.java index b5a6a216f12..123a2356bfa 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/data/DistributionMode.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/data/DistributionMode.java @@ -14,4 +14,16 @@ public enum DistributionMode { DistributionMode(String localeName) { this.localeName = localeName; } + + public static String getTitle() { + return "cover.distribution.mode.title"; + } + + public String getTooltip() { + return "cover.distribution.mode." + localeName; + } + + public String getDescription() { + return "cover.distribution.mode." + localeName + ".description"; + } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/data/FilterMode.java b/src/main/java/com/gregtechceu/gtceu/common/cover/data/FilterMode.java index 976176eb3c8..159c552e4b8 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/data/FilterMode.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/data/FilterMode.java @@ -22,6 +22,10 @@ public enum FilterMode { this.localeName = localeName; } + public static String getTitle() { + return "cover.filter.mode.title"; + } + public String getTooltip() { return "cover.filter.mode." + this.localeName; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/data/ManualIOMode.java b/src/main/java/com/gregtechceu/gtceu/common/cover/data/ManualIOMode.java index 227caa57d1b..044fd2e2d70 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/data/ManualIOMode.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/data/ManualIOMode.java @@ -1,5 +1,6 @@ package com.gregtechceu.gtceu.common.cover.data; + public enum ManualIOMode { DISABLED("disabled"), @@ -14,7 +15,15 @@ public enum ManualIOMode { this.localeName = localeName; } + public static String getTitle() { + return "cover.manual.mode.title"; + } + public String getTooltip() { - return "cover.universal.manual_import_export.mode." + localeName; + return "cover.manual.mode." + localeName; + } + + public String getDescription() { + return "cover.manual.mode." + localeName + ".description"; } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/data/TransferMode.java b/src/main/java/com/gregtechceu/gtceu/common/cover/data/TransferMode.java index 2253e08af62..3d0719bfafe 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/data/TransferMode.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/data/TransferMode.java @@ -4,16 +4,26 @@ public enum TransferMode { - TRANSFER_ANY("cover.robotic_arm.transfer_mode.transfer_any", "transfer_any", 1), - TRANSFER_EXACT("cover.robotic_arm.transfer_mode.transfer_exact", "transfer_exact", 1024), - KEEP_EXACT("cover.robotic_arm.transfer_mode.keep_exact", "keep_exact", 1024); + TRANSFER_ANY( "transfer_any", 1), + TRANSFER_EXACT( "transfer_exact", 1024), + KEEP_EXACT("keep_exact", 1024); + + public static final TransferMode[] VALUES = values(); @Getter - public final String tooltip; + public final String localeName; public final int maxStackSize; - TransferMode(String tooltip, String textureName, int maxStackSize) { - this.tooltip = tooltip; + TransferMode(String localeName, int maxStackSize) { + this.localeName = localeName; this.maxStackSize = maxStackSize; } + + public static String getTitle() { + return "cover.robotic_arm.transfer_mode.title"; + } + + public String getTooltip() { + return "cover.robotic_arm.transfer_mode." + localeName; + } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/detector/AdvancedEnergyDetectorCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/detector/AdvancedEnergyDetectorCover.java index 2ed4cab4737..7c950b445ae 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/detector/AdvancedEnergyDetectorCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/detector/AdvancedEnergyDetectorCover.java @@ -128,9 +128,9 @@ public void setUsePercent(boolean usePercent) { @Override public void createCoverUIRows(Flow column, SidedPosGuiData data, PanelSyncManager syncManager, UISettings settings) { - syncManager.syncValue("usePercent", new BooleanSyncValue(this::isUsePercent, this::setUsePercent)); - var minValueSync = new LongSyncValue(this::getMinValue, this::setMinValue); - var maxValueSync = new LongSyncValue(this::getMaxValue, this::setMaxValue); + syncManager.syncValue("usePercent", new BooleanSyncValue(this::isUsePercent, this::setUsePercent).allowC2S()); + var minValueSync = new LongSyncValue(this::getMinValue, this::setMinValue).allowC2S(); + var maxValueSync = new LongSyncValue(this::getMaxValue, this::setMaxValue).allowC2S(); syncManager.syncValue("minValue", minValueSync); syncManager.syncValue("maxValue", maxValueSync); diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/detector/AdvancedFluidDetectorCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/detector/AdvancedFluidDetectorCover.java index f47586fd2c5..1f2df3099a6 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/detector/AdvancedFluidDetectorCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/detector/AdvancedFluidDetectorCover.java @@ -123,8 +123,8 @@ public void setMaxValue(int maxValue) { @Override public void createCoverUIRows(Flow column, SidedPosGuiData data, PanelSyncManager syncManager, UISettings settings) { - var minValueSync = new IntSyncValue(this::getMinValue, this::setMinValue); - var maxValueSync = new IntSyncValue(this::getMaxValue, this::setMaxValue); + var minValueSync = new IntSyncValue(this::getMinValue, this::setMinValue).allowC2S(); + var maxValueSync = new IntSyncValue(this::getMaxValue, this::setMaxValue).allowC2S(); syncManager.syncValue("minValue", minValueSync); syncManager.syncValue("maxValue", maxValueSync); diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/detector/AdvancedItemDetectorCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/detector/AdvancedItemDetectorCover.java index 95b3ec8e598..9fd835aeb92 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/detector/AdvancedItemDetectorCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/detector/AdvancedItemDetectorCover.java @@ -119,8 +119,8 @@ public void setLatched(boolean latched) { @Override public void createCoverUIRows(Flow column, SidedPosGuiData data, PanelSyncManager syncManager, UISettings settings) { - var minValueSync = new IntSyncValue(this::getMinValue, this::setMinValue); - var maxValueSync = new IntSyncValue(this::getMaxValue, this::setMaxValue); + var minValueSync = new IntSyncValue(this::getMinValue, this::setMinValue).allowC2S(); + var maxValueSync = new IntSyncValue(this::getMaxValue, this::setMaxValue).allowC2S(); syncManager.syncValue("minValue", minValueSync); syncManager.syncValue("maxValue", maxValueSync); diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/voiding/AdvancedFluidVoidingCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/voiding/AdvancedFluidVoidingCover.java index f53ca595253..f5a96e11afc 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/voiding/AdvancedFluidVoidingCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/voiding/AdvancedFluidVoidingCover.java @@ -133,6 +133,7 @@ public void createCoverUIRows(Flow column, SidedPosGuiData data, PanelSyncManage column.child(new GTMuiWidgets.EnumRowBuilder<>(VoidingMode.class) .value(voidingMode) + .buttonTooltipSupplier((v) -> () -> Component.translatable(v.getTooltip())) .overlay(16, GTGuiTextures.VOIDING_MODES) .lang(Text.dynamic(() -> Component.translatable(getVoidingMode().tooltip))) .build() diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/voiding/AdvancedItemVoidingCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/voiding/AdvancedItemVoidingCover.java index 97e0b3eddab..b42ec5c31e3 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/voiding/AdvancedItemVoidingCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/voiding/AdvancedItemVoidingCover.java @@ -129,6 +129,7 @@ public void createCoverUIRows(Flow column, SidedPosGuiData data, PanelSyncManage column.child(new GTMuiWidgets.EnumRowBuilder<>(VoidingMode.class) .value(voidingMode) + .buttonTooltipSupplier((v) -> () -> Component.translatable(v.getTooltip())) .overlay(16, GTGuiTextures.VOIDING_MODES) .lang(Text.dynamic(() -> Component.translatable(getVoidingMode().tooltip))) .build() diff --git a/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiCoverUtil.java b/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiCoverUtil.java new file mode 100644 index 00000000000..0744d2dbbbe --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiCoverUtil.java @@ -0,0 +1,80 @@ +package com.gregtechceu.gtceu.common.mui; + +import brachy.modularui.api.drawable.Text; +import brachy.modularui.value.sync.EnumSyncValue; +import brachy.modularui.widgets.layout.Flow; +import com.gregtechceu.gtceu.common.cover.data.DistributionMode; +import com.gregtechceu.gtceu.common.cover.data.FilterMode; +import com.gregtechceu.gtceu.common.cover.data.ManualIOMode; +import com.gregtechceu.gtceu.common.cover.data.TransferMode; +import net.minecraft.network.chat.Component; + +public class GTMuiCoverUtil { + + public static void addManualIORow(Flow column, EnumSyncValue value) { + Component[] manualIODesc = { + Component.translatable("cover.universal.manual_import_export.mode.description.0"), + Component.translatable("cover.universal.manual_import_export.mode.description.1"), + Component.translatable("cover.universal.manual_import_export.mode.description.2"), + }; + column.child(new GTMuiWidgets.EnumRowBuilder<>(ManualIOMode.class) + .value(value) + .buttonTooltipSupplier((v) -> () -> Component.translatable(v.getTooltip())) + .overlay(16, GTGuiTextures.MANUAL_IO_OVERLAY_IN) + .lang(Text.comp(Component.translatable(ManualIOMode.getTitle()))) + .multiLangTooltip() + .multiLangTooltip(manualIODesc) + .build()); + } + + public static void addDistributionModeRow(Flow column, EnumSyncValue value) { + Component[] distributionModeDesc = { + Component.translatable("cover.conveyor.distribution.round_robin_global.0"), + Component.translatable("cover.conveyor.distribution.round_robin_global.1"), + Component.translatable("cover.conveyor.distribution.round_robin_prio.0"), + Component.translatable("cover.conveyor.distribution.round_robin_prio.1"), + Component.translatable("cover.conveyor.distribution.round_robin_prio.2"), + Component.translatable("cover.conveyor.distribution.insert_first.0"), + Component.translatable("cover.conveyor.distribution.insert_first.1"), + Component.translatable("cover.conveyor.distribution.insert_first.2"), + }; + column.child(new GTMuiWidgets.EnumRowBuilder<>(DistributionMode.class) + .value(value) + .buttonTooltipSupplier((v) -> () -> Component.translatable(v.getTooltip())) + .overlay(16, GTGuiTextures.DISTRIBUTION_MODE_OVERLAY) + .lang(Text.comp(Component.translatable(DistributionMode.getTitle()))) + .multiLangTooltip(distributionModeDesc) + .build()); + } + + public static void addFilterModeRow(Flow column, EnumSyncValue value) { + Component[] filterModeDesc = { + Component.translatable("cover.universal.manual_import_export.mode.description.0"), + Component.translatable("cover.universal.manual_import_export.mode.description.1"), + Component.translatable("cover.universal.manual_import_export.mode.description.2"), + }; + column.child(new GTMuiWidgets.EnumRowBuilder<>(FilterMode.class) + .value(value) + .buttonTooltipSupplier((v) -> () -> Component.translatable(v.getTooltip())) + .overlay(16, GTGuiTextures.FILTER_MODE_OVERLAY) + .lang(Text.comp(Component.translatable(FilterMode.getTitle()))) + .multiLangTooltip(filterModeDesc) + .build()); + } + + public static void addTransferModeRow(Flow column, EnumSyncValue value) { + Component[] transferModeDesc = { + Component.translatable("cover.robotic_arm.transfer_mode.description.0"), + Component.translatable("cover.robotic_arm.transfer_mode.description.1"), + Component.translatable("cover.robotic_arm.transfer_mode.description.2"), + Component.translatable("cover.robotic_arm.transfer_mode.description.3"), + }; + column.child(new GTMuiWidgets.EnumRowBuilder<>(TransferMode.class) + .value(value) + .buttonTooltipSupplier((v) -> () -> Component.translatable(v.getTooltip())) + .overlay(16, GTGuiTextures.TRANSFER_MODE_OVERLAY) + .lang(Text.comp(Component.translatable(TransferMode.getTitle()))) + .multiLangTooltip(transferModeDesc) + .build()); + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java b/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java index 6bd4182050d..eb518bb0936 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java +++ b/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiWidgets.java @@ -49,6 +49,8 @@ import it.unimi.dsi.fastutil.booleans.BooleanConsumer; import org.jetbrains.annotations.Nullable; +import java.util.Collections; +import java.util.List; import java.util.Objects; import java.util.function.*; @@ -621,7 +623,8 @@ public static class EnumRowBuilder> { private @Nullable EnumSyncValue syncValue; private final Class enumValue; private @Nullable Component lang; - private @Nullable Component langTooltip; + private @Nullable List langTooltip; + private @Nullable Function> buttonTooltipSupplier; private IDrawable @Nullable [] background; private @Nullable IDrawable selectedBackground; private IDrawable @Nullable [] overlay; @@ -641,7 +644,17 @@ public EnumRowBuilder lang(Component lang) { } public EnumRowBuilder langTooltip(Component tooltip) { - this.langTooltip = tooltip; + this.langTooltip = Collections.singletonList(tooltip); + return this; + } + + public EnumRowBuilder multiLangTooltip(Component... tooltips) { + this.langTooltip = List.of(tooltips); + return this; + } + + public EnumRowBuilder multiLangTooltip(List tooltips) { + this.langTooltip = tooltips; return this; } @@ -668,6 +681,11 @@ public EnumRowBuilder overlay(int size, IDrawable... overlay) { return this; } + public EnumRowBuilder buttonTooltipSupplier(Function> buttonTooltipSupplier) { + this.buttonTooltipSupplier = buttonTooltipSupplier; + return this; + } + private BoolValue.Dynamic boolValueOf(EnumSyncValue syncValue, T value) { return new BoolValue.Dynamic(() -> syncValue.getValue() == value, $ -> syncValue.setValue(value)); } @@ -692,7 +710,9 @@ public Flow build() { if (this.overlay != null) button.overlay(this.overlay[enumVal.ordinal()]); - if (enumVal instanceof StringRepresentable serializable) { + if (this.buttonTooltipSupplier != null) { + button.addTooltipLine(Text.lang(buttonTooltipSupplier.apply(enumVal).get().getString())); + } else if (enumVal instanceof StringRepresentable serializable) { button.addTooltipLine(Text.lang(serializable.getSerializedName())); } row.child(button); @@ -706,7 +726,7 @@ public Flow build() { .rightRel(0.f) .height(18); if(this.langTooltip != null) { - text.tooltip(r -> r.addLine(langTooltip)); + text.tooltip(r -> langTooltip.forEach(r::addLine)); } row.child(text); } 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 683c8914296..ca620c09b2e 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java @@ -67,6 +67,7 @@ public static void init(RegistrateLangProvider provider) { provider.add("recipe.condition.quest.completed.tooltip", "Requires %s completed"); provider.add("recipe.condition.quest.not_completed.tooltip", "Requires %s not completed"); + provider.add("gtceu.io.title", "IO Mode"); provider.add("gtceu.io.import", "Import"); provider.add("gtceu.io.export", "Export"); provider.add("gtceu.io.both", "Both"); @@ -404,7 +405,7 @@ public static void init(RegistrateLangProvider provider) { provider.add("item.gtceu.blacklight.tooltip", "Long-Wave §dUltraviolet§7 light source"); provider.add("gui.widget.incrementButton.default_tooltip", "Hold Shift, Ctrl or both to change the amount"); - provider.add("gui.widget.recipeProgressWidget.default_tooltip", "Show Recipes"); + provider.add("gtceu.recipe_type.show_recipes", "Show Recipes"); multilineLang(provider, "gtceu.recipe_memory_widget.tooltip", "§7Left click to automatically input this recipe into the crafting grid\n§7Shift click to lock/unlock this recipe"); provider.add("cover.filter.blacklist.disabled", "Whitelist"); @@ -436,9 +437,14 @@ public static void init(RegistrateLangProvider provider) { provider.add("cover.fluid_filter.mode.filter_both", "Filter Fill & Drain"); provider.add("cover.item_filter.title", "Item Filter"); provider.add("cover.storage.title", "Storage Cover"); + provider.add("cover.filter.mode.title", "Filter Mode"); provider.add("cover.filter.mode.filter_insert", "Filter Insert"); provider.add("cover.filter.mode.filter_extract", "Filter Extract"); provider.add("cover.filter.mode.filter_both", "Filter Insert/Extract"); + provider.add("cover.manual.mode.title", "Manual I/O"); + provider.add("cover.manual.mode.disabled", "§bDisabled§r"); + provider.add("cover.manual.mode.filtered", "§bFiltered§r"); + provider.add("cover.manual.mode.unfiltered", "§bUnfiltered§r"); provider.add("cover.item_filter.ignore_damage.enabled", "Ignore Damage"); provider.add("cover.item_filter.ignore_damage.disabled", "Respect Damage"); provider.add("cover.item_filter.ignore_nbt.enabled", "Ignore NBT"); @@ -468,6 +474,10 @@ public static void init(RegistrateLangProvider provider) { provider.add("cover.conveyor.mode", "Mode: %s"); provider.add("cover.conveyor.mode.export", "Mode: Export"); provider.add("cover.conveyor.mode.import", "Mode: Import"); + provider.add("cover.distribution.mode.title", "Distribution Mode"); + provider.add("cover.distribution.mode.round_robin_global", "Round Robin"); + provider.add("cover.distribution.mode.round_robin_prio", "Round Robin with Restriction"); + provider.add("cover.distribution.mode.insert_first", "Priority"); multilineLang(provider, "cover.conveyor.distribution.round_robin_global", "Distribution Mode: §bRound Robin\n§7Splits items equally across connected inventories"); multilineLang(provider, "cover.conveyor.distribution.round_robin_prio", @@ -478,6 +488,8 @@ public static void init(RegistrateLangProvider provider) { "If enabled, items will not be inserted when cover is set to pull items from the inventory into pipe.\n§aEnabled"); multilineLang(provider, "cover.conveyor.blocks_input.disabled", "If enabled, items will not be inserted when cover is set to pull items from the inventory into pipe.\n§cDisabled"); + + // TODO edit to be descriptions provider.add("cover.universal.manual_import_export.mode.disabled", "Manual I/O: §bDisabled\n§7Items / Fluids will only move as specified by the cover and its filter."); provider.add("cover.universal.manual_import_export.mode.filtered", @@ -486,10 +498,11 @@ public static void init(RegistrateLangProvider provider) { "Manual I/O: §bUnfiltered\n§7Items / Fluids can be moved independently of the cover mode. The filter only applies to what is inserted or extracted by this cover itself."); multilineLang(provider, "cover.universal.manual_import_export.mode.description", "§eDisabled§r - Items/fluids will only move as specified by the cover and its filter. \n§eAllow Filtered§r - Items/fluids can be extracted and inserted independently of the cover mode, as long as its filter matches (if any). \n§eAllow Unfiltered§r - Items/fluids can be moved independently of the cover mode. Filter applies to the items inserted or extracted by this cover"); + provider.add("cover.conveyor.item_filter.title", "Item Filter"); multiLang(provider, "cover.conveyor.tag.title", "Tag Name", "(use * for wildcard)"); - provider.add("cover.robotic_arm.title", "Robotic Arm Settings (%s)"); + provider.add("cover.robotic_arm.transfer_mode.title", "Transfer Mode"); provider.add("cover.robotic_arm.transfer_mode.transfer_any", "Transfer Any"); provider.add("cover.robotic_arm.transfer_mode.transfer_exact", "Supply Exact"); provider.add("cover.robotic_arm.transfer_mode.keep_exact", "Keep Exact"); @@ -524,6 +537,10 @@ public static void init(RegistrateLangProvider provider) { provider.add("cover.machine_controller.mode.cover_north", "Control Cover (North)"); provider.add("cover.machine_controller.mode.cover_east", "Control Cover (East)"); provider.add("cover.machine_controller.mode.cover_west", "Control Cover (West)"); + provider.add("cover.machine_controller.cover_not_controllable", "Cover not controllable"); + provider.add("cover.machine_controller.this_cover", "This cover"); + provider.add("cover.enable_with_redstone", "Enable with Redstone"); + provider.add("cover.disable_with_redstone", "Disable with Redstone"); provider.add("cover.machine_controller.mode.null", "Control Nothing"); provider.add("cover.ender_link.tooltip.channel_description", "Channel description");