From b4868a20e4b7f7b777bda69aeb8a7f0ad0d18d70 Mon Sep 17 00:00:00 2001 From: YoungOnion <39562198+YoungOnionMC@users.noreply.github.com> Date: Sun, 21 Dec 2025 23:56:40 -0700 Subject: [PATCH 01/22] start of multiblock UI design --- ...CoilWorkableElectricMultiblockMachine.java | 67 ++ .../WorkableElectricMultiblockMachine.java | 179 ++--- .../gtceu/common/data/mui/GTMuiWidgets.java | 7 + .../common/data/mui/GTMultiblockTextUtil.java | 64 ++ .../electric/ActiveTransformerMachine.java | 102 +-- .../electric/BedrockOreMinerMachine.java | 82 +-- .../electric/CentralMonitorMachine.java | 690 +++++++++--------- .../multiblock/electric/CleanroomMachine.java | 96 +-- .../electric/FluidDrillMachine.java | 72 +- .../electric/FusionReactorMachine.java | 18 +- .../electric/LargeMinerMachine.java | 96 +-- .../electric/research/DataBankMachine.java | 24 +- .../electric/research/HPCAMachine.java | 122 ++-- .../research/NetworkSwitchMachine.java | 24 +- .../research/ResearchStationMachine.java | 26 +- .../LargeCombustionEngineMachine.java | 74 +- .../generator/LargeTurbineMachine.java | 64 +- 17 files changed, 977 insertions(+), 830 deletions(-) create mode 100644 src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockTextUtil.java diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/CoilWorkableElectricMultiblockMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/CoilWorkableElectricMultiblockMachine.java index 112c5566288..06466eaa1bf 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/CoilWorkableElectricMultiblockMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/CoilWorkableElectricMultiblockMachine.java @@ -2,11 +2,31 @@ import com.gregtechceu.gtceu.api.block.ICoilType; import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; +import com.gregtechceu.gtceu.api.machine.feature.IVoidable; +import com.gregtechceu.gtceu.api.mui.base.drawable.IDrawable; +import com.gregtechceu.gtceu.api.mui.base.drawable.IKey; +import com.gregtechceu.gtceu.api.mui.drawable.*; +import com.gregtechceu.gtceu.api.mui.factory.PosGuiData; +import com.gregtechceu.gtceu.api.mui.utils.Alignment; +import com.gregtechceu.gtceu.api.mui.utils.Color; +import com.gregtechceu.gtceu.api.mui.value.sync.PanelSyncManager; +import com.gregtechceu.gtceu.api.mui.widget.ParentWidget; +import com.gregtechceu.gtceu.api.mui.widgets.SlotGroupWidget; +import com.gregtechceu.gtceu.api.mui.widgets.layout.Column; +import com.gregtechceu.gtceu.api.mui.widgets.layout.Row; +import com.gregtechceu.gtceu.client.mui.screen.ModularPanel; +import com.gregtechceu.gtceu.client.mui.screen.UISettings; import com.gregtechceu.gtceu.common.block.CoilBlock; +import com.gregtechceu.gtceu.common.data.mui.GTMuiWidgets; +import com.gregtechceu.gtceu.common.data.mui.GTMultiblockTextUtil; +import com.gregtechceu.gtceu.common.mui.GTGuiTextures; +import com.gregtechceu.gtceu.common.mui.GTGuis; +import com.lowdragmc.lowdraglib.syncdata.annotation.DescSynced; import net.minecraft.MethodsReturnNonnullByDefault; import lombok.Getter; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; import javax.annotation.ParametersAreNonnullByDefault; @@ -16,6 +36,8 @@ public class CoilWorkableElectricMultiblockMachine extends WorkableElectricMulti @Getter private ICoilType coilType = CoilBlock.CoilType.CUPRONICKEL; + @DescSynced + private int coilTier = coilType.getTier(); public CoilWorkableElectricMultiblockMachine(IMachineBlockEntity holder) { super(holder); @@ -30,10 +52,55 @@ public void onStructureFormed() { var type = getMultiblockState().getMatchContext().get("CoilType"); if (type instanceof ICoilType coil) { this.coilType = coil; + coilTier = coil.getTier(); } } public int getCoilTier() { return coilType.getTier(); } + + @Override + public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISettings settings) { + + var panel = GTGuis.createPanel(this, 176 + 32, 164 + 36); + + UITexture coilTexture = new UITexture.Builder().location(CoilBlock.CoilType.values()[coilTier].getTexture()) + .imageSize(16, 16).colorType(ColorType.DEFAULT).tiled().build(); + + //var coilWidget = coilTexture.asWidget().size(4, 16).heightRel(1.0f); + + var widget1 = coilTexture.asWidget().size(4, 16).heightRel(1.0f); + var widget2 = coilTexture.asWidget().size(4, 16).heightRel(1.0f); + + panel.child(GTMuiWidgets.createTitleBar(this.getDefinition(), 176 + 36)) + .child(new ParentWidget<>() + .widthRel(0.95f) + .heightRel(.45f) + .margin(4, 0) + .left(3).top(3) + .child(new Row() + .child(widget1.size(16, 16)) + .child(new IDrawable.DrawableWidget(GTGuiTextures.MUI_DISPLAY).widthRel(.95f).heightRel(1.0f)) + .child(widget2) + ) + .child(IKey.dynamic(() -> + GTMultiblockTextUtil.addProgressLine(isFormed, isActive(), getRecipeLogic().getProgress(), getRecipeLogic().getMaxProgress(), getRecipeLogic().getProgressPercent())) + .color(0xffffff) + .asWidget().left(7).top(3)) + ) + .child(new Column() + .coverChildren() + .leftRel(1.0f) + .reverseLayout(true) + .bottom(16) + .padding(0, 8, 4, 4) + .childPadding(2) + .background(GTGuiTextures.BACKGROUND.getSubArea(0.25f, 0f, 1.0f, 1.0f)) + .child(GTMuiWidgets.createPowerButton(this, syncManager)) + .child(GTMuiWidgets.createVoidingButton(this, syncManager))) + .child(SlotGroupWidget.playerInventory(false).left(7).bottom(7)); + + return panel; + } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableElectricMultiblockMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableElectricMultiblockMachine.java index 9d2a7fb4a86..1eb5963b385 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableElectricMultiblockMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableElectricMultiblockMachine.java @@ -10,13 +10,19 @@ import com.gregtechceu.gtceu.api.gui.fancy.*; import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.feature.IFancyUIMachine; +import com.gregtechceu.gtceu.api.machine.feature.IMuiMachine; import com.gregtechceu.gtceu.api.machine.feature.IOverclockMachine; import com.gregtechceu.gtceu.api.machine.feature.ITieredMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IDisplayUIMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiPart; import com.gregtechceu.gtceu.api.misc.EnergyContainerList; +import com.gregtechceu.gtceu.api.mui.factory.PosGuiData; +import com.gregtechceu.gtceu.api.mui.value.sync.PanelSyncManager; import com.gregtechceu.gtceu.api.recipe.modifier.RecipeModifierList; +import com.gregtechceu.gtceu.client.mui.screen.ModularPanel; +import com.gregtechceu.gtceu.client.mui.screen.UISettings; import com.gregtechceu.gtceu.common.data.GTRecipeModifiers; +import com.gregtechceu.gtceu.common.mui.GTGuis; import com.gregtechceu.gtceu.utils.GTUtil; import com.lowdragmc.lowdraglib.gui.modular.ModularUI; @@ -39,8 +45,7 @@ @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault -public class WorkableElectricMultiblockMachine extends WorkableMultiblockMachine implements IFancyUIMachine, - IDisplayUIMachine, ITieredMachine, IOverclockMachine { +public class WorkableElectricMultiblockMachine extends WorkableMultiblockMachine implements IMuiMachine, ITieredMachine, IOverclockMachine { public static final ManagedFieldHolder MANAGED_FIELD_HOLDER = new ManagedFieldHolder( WorkableElectricMultiblockMachine.class, WorkableMultiblockMachine.MANAGED_FIELD_HOLDER); @@ -93,92 +98,96 @@ public void setBatchEnabled(boolean batch) { ////////////////////////////////////// // ********** GUI ***********// ////////////////////////////////////// - @Override - public void addDisplayText(List textList) { - int numParallels; - int subtickParallels; - int batchParallels; - int totalRuns; - boolean exact = false; - if (recipeLogic.isActive() && recipeLogic.getLastRecipe() != null) { - numParallels = recipeLogic.getLastRecipe().parallels; - subtickParallels = recipeLogic.getLastRecipe().subtickParallels; - batchParallels = recipeLogic.getLastRecipe().batchParallels; - totalRuns = recipeLogic.getLastRecipe().getTotalRuns(); - exact = true; - } else { - numParallels = getParallelHatch() - .map(IParallelHatch::getCurrentParallel) - .orElse(0); - subtickParallels = 0; - batchParallels = 0; - totalRuns = 0; - } - - MultiblockDisplayText.builder(textList, isFormed()) - .setWorkingStatus(recipeLogic.isWorkingEnabled(), recipeLogic.isActive()) - .addEnergyUsageLine(energyContainer) - .addEnergyTierLine(tier) - .addMachineModeLine(getRecipeType(), getRecipeTypes().length > 1) - .addTotalRunsLine(totalRuns) - .addParallelsLine(numParallels, exact) - .addSubtickParallelsLine(subtickParallels) - .addBatchModeLine(isBatchEnabled(), batchParallels) - .addWorkingStatusLine() - .addProgressLine(recipeLogic.getProgress(), recipeLogic.getMaxProgress(), - recipeLogic.getProgressPercent()) - .addOutputLines(recipeLogic.getLastRecipe()); - getDefinition().getAdditionalDisplay().accept(this, textList); - IDisplayUIMachine.super.addDisplayText(textList); + public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISettings settings) { + return GTGuis.createPanel(this, 176, 164); } - @Override - public Widget createUIWidget() { - var group = new WidgetGroup(0, 0, 182 + 8, 117 + 8); - group.addWidget(new DraggableScrollableWidgetGroup(4, 4, 182, 117).setBackground(getScreenTexture()) - .addWidget(new LabelWidget(4, 5, self().getBlockState().getBlock().getDescriptionId())) - .addWidget(new ComponentPanelWidget(4, 17, this::addDisplayText) - .textSupplier(this.getLevel().isClientSide ? null : this::addDisplayText) - .setMaxWidthLimit(200) - .clickHandler(this::handleDisplayClick))); - group.setBackground(GuiTextures.BACKGROUND_INVERSE); - return group; - } - - @Override - public ModularUI createUI(Player entityPlayer) { - return new ModularUI(198, 208, this, entityPlayer).widget(new FancyMachineUIWidget(this, 198, 208)); - } - - @Override - public List getSubTabs() { - return getParts().stream().filter(Objects::nonNull).map(IFancyUIProvider.class::cast).toList(); - } - - @Override - public void attachConfigurators(ConfiguratorPanel configuratorPanel) { - if (getDefinition().getRecipeModifier() instanceof RecipeModifierList list && Arrays.stream(list.getModifiers()) - .anyMatch(modifier -> modifier == GTRecipeModifiers.BATCH_MODE)) { - configuratorPanel.attachConfigurators(new IFancyConfiguratorButton.Toggle( - GuiTextures.BUTTON_BATCH.getSubTexture(0, 0, 1, 0.5), - GuiTextures.BUTTON_BATCH.getSubTexture(0, 0.5, 1, 0.5), - this::isBatchEnabled, - (cd, p) -> setBatchEnabled(p)) - .setTooltipsSupplier( - p -> List.of( - Component.translatable("gtceu.machine.batch_" + (p ? "enabled" : "disabled"))))); - } - - IFancyUIMachine.super.attachConfigurators(configuratorPanel); - } - - @Override - public void attachTooltips(TooltipsPanel tooltipsPanel) { - for (IMultiPart part : getParts()) { - part.attachFancyTooltipsToController(this, tooltipsPanel); - } - } + //@Override + //public void addDisplayText(List textList) { + // int numParallels; + // int subtickParallels; + // int batchParallels; + // int totalRuns; + // boolean exact = false; + // if (recipeLogic.isActive() && recipeLogic.getLastRecipe() != null) { + // numParallels = recipeLogic.getLastRecipe().parallels; + // subtickParallels = recipeLogic.getLastRecipe().subtickParallels; + // batchParallels = recipeLogic.getLastRecipe().batchParallels; + // totalRuns = recipeLogic.getLastRecipe().getTotalRuns(); + // exact = true; + // } else { + // numParallels = getParallelHatch() + // .map(IParallelHatch::getCurrentParallel) + // .orElse(0); + // subtickParallels = 0; + // batchParallels = 0; + // totalRuns = 0; + // } +// + // MultiblockDisplayText.builder(textList, isFormed()) + // .setWorkingStatus(recipeLogic.isWorkingEnabled(), recipeLogic.isActive()) + // .addEnergyUsageLine(energyContainer) + // .addEnergyTierLine(tier) + // .addMachineModeLine(getRecipeType(), getRecipeTypes().length > 1) + // .addTotalRunsLine(totalRuns) + // .addParallelsLine(numParallels, exact) + // .addSubtickParallelsLine(subtickParallels) + // .addBatchModeLine(isBatchEnabled(), batchParallels) + // .addWorkingStatusLine() + // .addProgressLine(recipeLogic.getProgress(), recipeLogic.getMaxProgress(), + // recipeLogic.getProgressPercent()) + // .addOutputLines(recipeLogic.getLastRecipe()); + // getDefinition().getAdditionalDisplay().accept(this, textList); + // IDisplayUIMachine.super.addDisplayText(textList); + //} + + //@Override + //public Widget createUIWidget() { + // var group = new WidgetGroup(0, 0, 182 + 8, 117 + 8); + // group.addWidget(new DraggableScrollableWidgetGroup(4, 4, 182, 117).setBackground(getScreenTexture()) + // .addWidget(new LabelWidget(4, 5, self().getBlockState().getBlock().getDescriptionId())) + // .addWidget(new ComponentPanelWidget(4, 17, this::addDisplayText) + // .textSupplier(this.getLevel().isClientSide ? null : this::addDisplayText) + // .setMaxWidthLimit(200) + // .clickHandler(this::handleDisplayClick))); + // group.setBackground(GuiTextures.BACKGROUND_INVERSE); + // return group; + //} +// + //@Override + //public ModularUI createUI(Player entityPlayer) { + // return new ModularUI(198, 208, this, entityPlayer).widget(new FancyMachineUIWidget(this, 198, 208)); + //} +// + //@Override + //public List getSubTabs() { + // return getParts().stream().filter(Objects::nonNull).map(IFancyUIProvider.class::cast).toList(); + //} +// + //@Override + //public void attachConfigurators(ConfiguratorPanel configuratorPanel) { + // if (getDefinition().getRecipeModifier() instanceof RecipeModifierList list && Arrays.stream(list.getModifiers()) + // .anyMatch(modifier -> modifier == GTRecipeModifiers.BATCH_MODE)) { + // configuratorPanel.attachConfigurators(new IFancyConfiguratorButton.Toggle( + // GuiTextures.BUTTON_BATCH.getSubTexture(0, 0, 1, 0.5), + // GuiTextures.BUTTON_BATCH.getSubTexture(0, 0.5, 1, 0.5), + // this::isBatchEnabled, + // (cd, p) -> setBatchEnabled(p)) + // .setTooltipsSupplier( + // p -> List.of( + // Component.translatable("gtceu.machine.batch_" + (p ? "enabled" : "disabled"))))); + // } +// + // IFancyUIMachine.super.attachConfigurators(configuratorPanel); + //} +// + //@Override + //public void attachTooltips(TooltipsPanel tooltipsPanel) { + // for (IMultiPart part : getParts()) { + // part.attachFancyTooltipsToController(this, tooltipsPanel); + // } + //} ////////////////////////////////////// // ******** OVERCLOCK *********// diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMuiWidgets.java b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMuiWidgets.java index 0f8c5aa6db2..5e71ddd1965 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMuiWidgets.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMuiWidgets.java @@ -4,6 +4,7 @@ import com.gregtechceu.gtceu.api.machine.SimpleTieredMachine; import com.gregtechceu.gtceu.api.machine.feature.IAutoOutputItem; import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; +import com.gregtechceu.gtceu.api.machine.feature.IVoidable; import com.gregtechceu.gtceu.api.mui.base.IPanelHandler; import com.gregtechceu.gtceu.api.mui.base.drawable.IDrawable; import com.gregtechceu.gtceu.api.mui.base.drawable.IKey; @@ -119,6 +120,12 @@ public static ItemSlot createBatterySlot(IItemHandler itemHandler, int slot, Pan return new ItemSlot().syncHandler("battery").background(GTGuiTextures.SLOT, GTGuiTextures.CHARGER_OVERLAY); } + public static ToggleButton createVoidingButton(IVoidable machine, PanelSyncManager syncManager) { + // TODO pull in voiding mode pr + return new ToggleButton(); + //EnumSyncValue voidMode = new EnumSyncValue(IVoidable.VoidingMode.class, machine.) + } + public static ToggleButton createAutoOutputItemButton(IAutoOutputItem machine, PanelSyncManager syncManager) { BooleanSyncValue itemOutputs = new BooleanSyncValue(machine::isAutoOutputItems, machine::setAutoOutputItems); diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockTextUtil.java b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockTextUtil.java new file mode 100644 index 00000000000..48ccebdb957 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockTextUtil.java @@ -0,0 +1,64 @@ +package com.gregtechceu.gtceu.common.data.mui; + +import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.capability.IEnergyContainer; +import com.gregtechceu.gtceu.api.mui.base.drawable.IKey; +import com.gregtechceu.gtceu.utils.FormattingUtil; +import com.gregtechceu.gtceu.utils.GTUtil; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.CommonComponents; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.HoverEvent; +import net.minecraft.network.chat.MutableComponent; + +public class GTMultiblockTextUtil { + + public static IKey addEnergyUsageLine(boolean formed, IEnergyContainer energyContainer) { + if (formed && energyContainer != null && energyContainer.getEnergyCapacity() > 0) { + long maxVoltage = Math.max(energyContainer.getInputVoltage(), energyContainer.getOutputVoltage()); + + String energyFormatted = FormattingUtil.formatNumbers(maxVoltage); + // wrap in text component to keep it from being formatted + byte voltageTier = GTUtil.getFloorTierByVoltage(maxVoltage); + Component voltageName = Component.literal( + GTValues.VNF[voltageTier]); + + MutableComponent bodyText = Component.translatable("gtceu.multiblock.max_energy_per_tick", + energyFormatted, voltageName).withStyle(ChatFormatting.GRAY); + Component hoverText = Component.translatable("gtceu.multiblock.max_energy_per_tick_hover") + .withStyle(ChatFormatting.GRAY); + return IKey.dynamic(() -> bodyText.withStyle( + style -> style.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverText)))); + } + return IKey.EMPTY; + } + + public static IKey addEnergyTierLine(boolean formed, int tier) { + + if(!formed || tier < GTValues.ULV || tier > GTValues.MAX) + return IKey.EMPTY; + + Component voltageName = Component.literal(GTValues.VNF[tier]); + MutableComponent bodyText = Component.translatable( + "gtceu.multiblock.max_recipe_tier", + voltageName).withStyle(ChatFormatting.GRAY); + Component hoverText = Component.translatable("gtceu.multiblock.max_recipe_tier_hover") + .withStyle(ChatFormatting.GRAY); + return IKey.dynamic(() -> bodyText + .withStyle(style -> style.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverText)))); + } + + public static Component addProgressLine(boolean formed, boolean active, double currentDuration, double maxDuration, double progressPercent) { + if (!formed || !active) + return CommonComponents.EMPTY; + + int currentProgress = (int) (progressPercent * 100); + double currentInSec = currentDuration / 20.0; + double maxInSec = maxDuration / 20.0; + return Component.translatable("gtceu.multiblock.progress", + String.format("%.2f", (float) currentInSec), + String.format("%.2f", (float) maxInSec), currentProgress); + } + + +} diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/ActiveTransformerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/ActiveTransformerMachine.java index 2ad53abea17..82aa0ad977a 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/ActiveTransformerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/ActiveTransformerMachine.java @@ -39,7 +39,7 @@ import static com.gregtechceu.gtceu.api.pattern.Predicates.abilities; public class ActiveTransformerMachine extends WorkableElectricMultiblockMachine - implements IControllable, IExplosionMachine, IFancyUIMachine, IDisplayUIMachine { + implements IControllable, IExplosionMachine { private IEnergyContainer powerOutput; private IEnergyContainer powerInput; @@ -163,54 +163,54 @@ public static TraceabilityPredicate getHatchPredicates() { .or(abilities(PartAbility.OUTPUT_LASER).setPreviewCount(1)); } - @Override - public void addDisplayText(List textList) { - // super.addDisplayText(textList); idek what it does stop doing what you do for a minute pls - // Assume That the Structure is ALWAYS formed, and has at least 1 In and 1 Out, there is never a case where this - // does not occur. - if (isFormed()) { - if (!isWorkingEnabled()) { - textList.add(Component.translatable("gtceu.multiblock.work_paused")); - } else if (isActive()) { - textList.add(Component.translatable("gtceu.multiblock.running")); - textList.add(Component - .translatable("gtceu.multiblock.active_transformer.max_input", - FormattingUtil.formatNumbers( - Math.abs(powerInput.getInputVoltage() * powerInput.getInputAmperage())))); - textList.add(Component - .translatable("gtceu.multiblock.active_transformer.max_output", - FormattingUtil.formatNumbers( - Math.abs(powerOutput.getOutputVoltage() * powerOutput.getOutputAmperage())))); - textList.add(Component - .translatable("gtceu.multiblock.active_transformer.average_in", - FormattingUtil.formatNumbers(Math.abs(powerInput.getInputPerSec() / 20)))); - textList.add(Component - .translatable("gtceu.multiblock.active_transformer.average_out", - FormattingUtil.formatNumbers(Math.abs(powerOutput.getOutputPerSec() / 20)))); - if (!ConfigHolder.INSTANCE.machines.harmlessActiveTransformers) { - textList.add(Component - .translatable("gtceu.multiblock.active_transformer.danger_enabled")); - } - } else { - textList.add(Component.translatable("gtceu.multiblock.idling")); - } - } - } - - @Override - public @NotNull Widget createUIWidget() { - var group = new WidgetGroup(0, 0, 182 + 8, 117 + 8); - group.addWidget(new DraggableScrollableWidgetGroup(4, 4, 182, 117).setBackground(getScreenTexture()) - .addWidget(new LabelWidget(4, 5, self().getBlockState().getBlock().getDescriptionId())) - .addWidget(new ComponentPanelWidget(4, 17, this::addDisplayText) - .setMaxWidthLimit(150) - .clickHandler(this::handleDisplayClick))); - group.setBackground(GuiTextures.BACKGROUND_INVERSE); - return group; - } - - @Override - public @NotNull ModularUI createUI(@NotNull Player entityPlayer) { - return new ModularUI(198, 208, this, entityPlayer).widget(new FancyMachineUIWidget(this, 198, 208)); - } + //@Override + //public void addDisplayText(List textList) { + // // super.addDisplayText(textList); idek what it does stop doing what you do for a minute pls + // // Assume That the Structure is ALWAYS formed, and has at least 1 In and 1 Out, there is never a case where this + // // does not occur. + // if (isFormed()) { + // if (!isWorkingEnabled()) { + // textList.add(Component.translatable("gtceu.multiblock.work_paused")); + // } else if (isActive()) { + // textList.add(Component.translatable("gtceu.multiblock.running")); + // textList.add(Component + // .translatable("gtceu.multiblock.active_transformer.max_input", + // FormattingUtil.formatNumbers( + // Math.abs(powerInput.getInputVoltage() * powerInput.getInputAmperage())))); + // textList.add(Component + // .translatable("gtceu.multiblock.active_transformer.max_output", + // FormattingUtil.formatNumbers( + // Math.abs(powerOutput.getOutputVoltage() * powerOutput.getOutputAmperage())))); + // textList.add(Component + // .translatable("gtceu.multiblock.active_transformer.average_in", + // FormattingUtil.formatNumbers(Math.abs(powerInput.getInputPerSec() / 20)))); + // textList.add(Component + // .translatable("gtceu.multiblock.active_transformer.average_out", + // FormattingUtil.formatNumbers(Math.abs(powerOutput.getOutputPerSec() / 20)))); + // if (!ConfigHolder.INSTANCE.machines.harmlessActiveTransformers) { + // textList.add(Component + // .translatable("gtceu.multiblock.active_transformer.danger_enabled")); + // } + // } else { + // textList.add(Component.translatable("gtceu.multiblock.idling")); + // } + // } + //} +// + //@Override + //public @NotNull Widget createUIWidget() { + // var group = new WidgetGroup(0, 0, 182 + 8, 117 + 8); + // group.addWidget(new DraggableScrollableWidgetGroup(4, 4, 182, 117).setBackground(getScreenTexture()) + // .addWidget(new LabelWidget(4, 5, self().getBlockState().getBlock().getDescriptionId())) + // .addWidget(new ComponentPanelWidget(4, 17, this::addDisplayText) + // .setMaxWidthLimit(150) + // .clickHandler(this::handleDisplayClick))); + // group.setBackground(GuiTextures.BACKGROUND_INVERSE); + // return group; + //} + + //@Override + //public @NotNull ModularUI createUI(@NotNull Player entityPlayer) { + // return new ModularUI(198, 208, this, entityPlayer).widget(new FancyMachineUIWidget(this, 198, 208)); + //} } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/BedrockOreMinerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/BedrockOreMinerMachine.java index af8040bc18f..1d96208dc89 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/BedrockOreMinerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/BedrockOreMinerMachine.java @@ -63,47 +63,47 @@ public int getEnergyTier() { return Math.min(this.tier + 1, Math.max(this.tier, GTUtil.getFloorTierByVoltage(energyCont.getInputVoltage()))); } - @Override - public void addDisplayText(List textList) { - if (isFormed()) { - int energyContainer = getEnergyTier(); - long maxVoltage = GTValues.V[energyContainer]; - String voltageName = GTValues.VNF[energyContainer]; - textList.add(Component.translatable("gtceu.multiblock.max_energy_per_tick", maxVoltage, voltageName)); - - if (getRecipeLogic().getVeinMaterials() != null) { - // Ore names - textList.add(Component.translatable("gtceu.multiblock.ore_rig.drilled_ores_list") - .withStyle(ChatFormatting.GREEN)); - List drilledOres = getRecipeLogic().getVeinMaterials(); - for (var entry : drilledOres) { - Component fluidInfo = entry.material().getLocalizedName().withStyle(ChatFormatting.GREEN); - textList.add(Component.translatable("gtceu.multiblock.ore_rig.drilled_ore_entry", fluidInfo) - .withStyle(ChatFormatting.GRAY)); - } - - // Ore amount - Component amountInfo = Component.literal(FormattingUtil.formatNumbers( - getRecipeLogic().getOreToProduce() * 20L / BedrockOreMinerLogic.MAX_PROGRESS) + - "/s").withStyle(ChatFormatting.BLUE); - textList.add(Component.translatable("gtceu.multiblock.ore_rig.ore_amount", amountInfo) - .withStyle(ChatFormatting.GRAY)); - } else { - Component noOre = Component.translatable("gtceu.multiblock.fluid_rig.no_fluid_in_area") - .withStyle(ChatFormatting.RED); - textList.add(Component.translatable("gtceu.multiblock.ore_rig.drilled_ores_list") - .withStyle(ChatFormatting.GREEN)); - textList.add(Component.translatable("gtceu.multiblock.ore_rig.drilled_ore_entry", noOre) - .withStyle(ChatFormatting.GRAY)); - } - } else { - Component tooltip = Component.translatable("gtceu.multiblock.invalid_structure.tooltip") - .withStyle(ChatFormatting.GRAY); - textList.add(Component.translatable("gtceu.multiblock.invalid_structure") - .withStyle(Style.EMPTY.withColor(ChatFormatting.RED) - .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, tooltip)))); - } - } + //@Override + //public void addDisplayText(List textList) { + // if (isFormed()) { + // int energyContainer = getEnergyTier(); + // long maxVoltage = GTValues.V[energyContainer]; + // String voltageName = GTValues.VNF[energyContainer]; + // textList.add(Component.translatable("gtceu.multiblock.max_energy_per_tick", maxVoltage, voltageName)); +// + // if (getRecipeLogic().getVeinMaterials() != null) { + // // Ore names + // textList.add(Component.translatable("gtceu.multiblock.ore_rig.drilled_ores_list") + // .withStyle(ChatFormatting.GREEN)); + // List drilledOres = getRecipeLogic().getVeinMaterials(); + // for (var entry : drilledOres) { + // Component fluidInfo = entry.material().getLocalizedName().withStyle(ChatFormatting.GREEN); + // textList.add(Component.translatable("gtceu.multiblock.ore_rig.drilled_ore_entry", fluidInfo) + // .withStyle(ChatFormatting.GRAY)); + // } +// + // // Ore amount + // Component amountInfo = Component.literal(FormattingUtil.formatNumbers( + // getRecipeLogic().getOreToProduce() * 20L / BedrockOreMinerLogic.MAX_PROGRESS) + + // "/s").withStyle(ChatFormatting.BLUE); + // textList.add(Component.translatable("gtceu.multiblock.ore_rig.ore_amount", amountInfo) + // .withStyle(ChatFormatting.GRAY)); + // } else { + // Component noOre = Component.translatable("gtceu.multiblock.fluid_rig.no_fluid_in_area") + // .withStyle(ChatFormatting.RED); + // textList.add(Component.translatable("gtceu.multiblock.ore_rig.drilled_ores_list") + // .withStyle(ChatFormatting.GREEN)); + // textList.add(Component.translatable("gtceu.multiblock.ore_rig.drilled_ore_entry", noOre) + // .withStyle(ChatFormatting.GRAY)); + // } + // } else { + // Component tooltip = Component.translatable("gtceu.multiblock.invalid_structure.tooltip") + // .withStyle(ChatFormatting.GRAY); + // textList.add(Component.translatable("gtceu.multiblock.invalid_structure") + // .withStyle(Style.EMPTY.withColor(ChatFormatting.RED) + // .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, tooltip)))); + // } + //} public static int getDepletionChance(int tier) { if (tier == GTValues.MV) diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CentralMonitorMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CentralMonitorMachine.java index a16b7198b46..66bfef5302e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CentralMonitorMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CentralMonitorMachine.java @@ -319,351 +319,351 @@ private boolean isInAnyGroup(IMonitorComponent component) { return monitorGroups.stream().anyMatch(group -> group.contains(component.getPos())); } - @Override - public void addDisplayText(List textList) { - MultiblockDisplayText.builder(textList, isFormed()) - .addWorkingStatusLine(); - getDefinition().getAdditionalDisplay().accept(this, textList); - } - - @Override - public Widget createUIWidget() { - updateStructureDimensions(); - selectedComponents.clear(); - WidgetGroup builder = (WidgetGroup) super.createUIWidget(); - - WidgetGroup main = new WidgetGroup(); - DraggableScrollableWidgetGroup componentSelection = new DraggableScrollableWidgetGroup(0, 10, 200, 110); - main.addWidget(componentSelection); - WidgetGroup options = new WidgetGroup(-100, 20, 60, 20); - WidgetGroup groupConfig = new WidgetGroup(10, 30, 100, 100); - groupConfig.setVisible(false); - - ButtonWidget infoWidget = new ButtonWidget(200, 10, 20, 20, null); - infoWidget.setButtonTexture(GuiTextures.INFO_ICON); - infoWidget.setHoverTooltips( - GTStringUtils.toImmutable(LangHandler.getSingleOrMultiLang("gtceu.central_monitor.info_tooltip"))); - builder.addWidget(infoWidget); - List configGroup = new ArrayList<>(); - configGroup.add(null); - - Consumer openGroupConfig = (group) -> { - configGroup.set(0, group); - if (group == null) { - main.setVisible(true); - groupConfig.setVisible(false); - return; - } - groupConfig.clearAllWidgets(); - groupConfig.addWidget(new LabelWidget(0, 5, () -> { - String currentName = ""; - if (configGroup.get(0) != null) { - currentName = configGroup.get(0).getName(); - } - return Component.translatable("gtceu.central_monitor.gui.currently_editing", currentName).getString(); - })); - for (int i = 0; i < 8; i++) { - SlotWidget slot = new SlotWidget(group.getPlaceholderSlotsHandler(), i, -38, 16 * i + 46); - slot.setHoverTooltips(GTStringUtils - .toImmutable(LangHandler.getMultiLang("gtceu.gui.computer_monitor_cover.slot_tooltip", i + 1))); - groupConfig.addWidget(slot); - } - SlotWidget slot = new SlotWidget( - group.getItemStackHandler(), 0, - 0, 20); - WidgetGroup itemUI = new WidgetGroup(40, 20, 100, 100); - Runnable changeListener = () -> { - if (slot.getLastItem().is(slot.getItem().getItem())) return; - itemUI.clearAllWidgets(); - if (slot.getItem().getItem() instanceof IComponentItem item) { - for (IItemComponent component : item.getComponents()) { - if (component instanceof IMonitorModuleItem module) { - itemUI.addWidget(module.createUIWidget(slot.getItem(), this, group)); - } - } - } - }; - slot.setChangeListener(changeListener); - changeListener.run(); - groupConfig.addWidget(itemUI); - groupConfig.addWidget(slot); - main.setVisible(false); - groupConfig.setVisible(true); - }; - builder.addWidget(groupConfig); - DraggableScrollableWidgetGroup groupList = new DraggableScrollableWidgetGroup(-100, 50, 70, 80); - - List>>> imageButtons = new ArrayList<>(); - Map rightClickCallbacks = new HashMap<>(); - int[] dataSlot = new int[2]; // list to be able to modify it in lambdas - dataSlot[0] = 1; // the slot (index starts from 1) - dataSlot[1] = 9; // amount of slots - IntInputWidget dataSlotInput = new IntInputWidget(120, 20, 60, -20, () -> dataSlot[0], - n -> dataSlot[0] = Mth.clamp(n, 1, dataSlot[1])); - dataSlotInput.setVisible(false); - builder.addWidget(dataSlotInput); - - Consumer addGroupToList = group -> { - ButtonWidget label = new ButtonWidget(20, groupList.widgets.size() * 15 + 5, 60, 10, null); - TextTexture text = new TextTexture(group.getName()); - text.setType(TextTexture.TextType.LEFT); - label.setButtonTexture(text); - label.setOnPressCallback(click -> { - group.getRelativePositions().forEach(pos -> { - BlockPos rel = toRelative(pos); - if (imageButtons.size() - 1 < rel.getY()) return; - if (imageButtons.get(rel.getY()).size() - 1 < rel.getX()) return; - imageButtons.get(rel.getY()).get(rel.getX()).accept(null); - }); - if (group.getTargetRaw() != null) { - rightClickCallbacks.getOrDefault(group.getTargetRaw(), () -> {}).run(); - } - }); - groupList.addWidget(label); - - ButtonWidget configButton = new ButtonWidget( - 0, label.getSelfPositionY() - 3, - 16, 16, - GuiTextures.IO_CONFIG_COVER_SETTINGS, - click -> { - if (configGroup.get(0) == null) { - openGroupConfig.accept(group); - } else { - openGroupConfig.accept(null); - } - }); - groupList.addWidget(configButton); - }; - - monitorGroups.forEach(addGroupToList); - builder.addWidget(groupList); - main.addWidget(options); - ButtonWidget removeFromGroupButton = new ButtonWidget(0, 0, 60, 20, null); - removeFromGroupButton.setButtonTexture(new TextTexture("gtceu.central_monitor.gui.remove_from_group")); - removeFromGroupButton.setVisible(false); - ButtonWidget setTargetButton = new ButtonWidget(0, 15, 60, 20, null); - setTargetButton.setButtonTexture(new TextTexture("gtceu.central_monitor.gui.set_target")); - setTargetButton.setVisible(false); - ButtonWidget createGroupButton = new ButtonWidget(0, 0, 60, 20, null); - createGroupButton.setOnPressCallback(click -> { - MonitorGroup group = new MonitorGroup( - Component.translatable("gtceu.gui.central_monitor.group_default_name", monitorGroups.size() + 1) - .getString()); - for (IMonitorComponent component : selectedComponents) { - if (isInAnyGroup(component)) return; - group.add(component.getPos()); - } - monitorGroups.add(group); - addGroupToList.accept(group); - - createGroupButton.setVisible(false); - removeFromGroupButton.setVisible(true); - Iterator it = selectedComponents.iterator(); - while (it.hasNext()) { - IMonitorComponent c = it.next(); - BlockPos rel = toRelative(c.getPos()); - imageButtons.get(rel.getY()).get(rel.getX()).accept(it); - } - if (!selectedTargets.isEmpty()) { - rightClickCallbacks.getOrDefault(selectedTargets.get(0).getPos(), () -> {}).run(); - } - }); - setTargetButton.setOnPressCallback(click -> { - MonitorGroup group = null; - for (MonitorGroup group2 : monitorGroups) { - for (IMonitorComponent component : selectedComponents) { - if (group2.contains(component.getPos())) { - group = group2; - break; - } - } - if (group != null) break; - } - if (group == null) return; - if (selectedTargets.isEmpty()) group.setTarget(null); - else { - group.setTarget(selectedTargets.get(0).getPos()); - group.setDataSlot(dataSlot[0] - 1); - } - }); - removeFromGroupButton.setOnPressCallback(click -> { - for (MonitorGroup group : monitorGroups) { - for (IMonitorComponent component : selectedComponents) group.remove(component.getPos()); - } - Iterator itg = monitorGroups.iterator(); - while (itg.hasNext()) { - MonitorGroup group = itg.next(); - if (group.isEmpty()) { - clearInventory(group.getItemStackHandler()); - clearInventory(group.getPlaceholderSlotsHandler()); - itg.remove(); - } - } - groupList.clearAllWidgets(); - monitorGroups.forEach(addGroupToList); - - removeFromGroupButton.setVisible(false); - createGroupButton.setVisible(true); - Iterator it = selectedComponents.iterator(); - while (it.hasNext()) { - IMonitorComponent c = it.next(); - BlockPos rel = toRelative(c.getPos()); - if (imageButtons.size() - 1 < rel.getY()) continue; - if (imageButtons.get(rel.getY()).size() - 1 < rel.getX()) continue; - imageButtons.get(rel.getY()).get(rel.getX()).accept(it); - } - if (!selectedTargets.isEmpty()) { - rightClickCallbacks.getOrDefault(selectedTargets.get(0).getPos(), () -> {}).run(); - } - }); - createGroupButton.setButtonTexture(new TextTexture("gtceu.central_monitor.gui.create_group")); - createGroupButton.setVisible(false); - options.addWidget(removeFromGroupButton); - options.addWidget(createGroupButton); - options.addWidget(setTargetButton); - int startX = 20; - int startY = 30; - for (int row = 0; row <= downDist + upDist; row++) { - imageButtons.add(new ArrayList<>()); - for (int col = 0; col <= leftDist + rightDist; col++) { - IGuiTexture texture = getComponentTexture(row, col); - GuiTextureGroup textures = new GuiTextureGroup(texture, new ColorBorderTexture(2, 0xFFFFFF)); - IMonitorComponent component = getComponent(row, col); - if (component == null) { - GTUtil.getLast(imageButtons).add(it -> {}); - continue; - } - ButtonWidget img = new ButtonWidget(startX + (16 * col), startY + (16 * row), 16, 16, textures, null); - Consumer> callback = (it) -> { - if (!component.isMonitor()) return; - if (selectedComponents.contains(component)) { - if (it == null) { - selectedComponents.remove(component); - } else { - it.remove(); - } - - if (!selectedTargets.isEmpty() && selectedTargets.get(0) == component) { - ColorRectTexture rect = new ColorRectTexture(Color.BLUE); - textures.setTextures(rect, texture); - } else { - textures.setTextures(texture); - } - - createGroupButton.setVisible(selectedComponents.stream().noneMatch(this::isInAnyGroup)); - removeFromGroupButton.setVisible(selectedComponents.stream().allMatch(this::isInAnyGroup)); - setTargetButton.setVisible(removeFromGroupButton.isVisible()); - - if (selectedComponents.isEmpty()) { - createGroupButton.setVisible(false); - removeFromGroupButton.setVisible(false); - setTargetButton.setVisible(false); - } - } else { - boolean inAnyGroup = isInAnyGroup(component); - // yes I know this is terrible but if it works don't touch it :) - if (selectedComponents.isEmpty() && !inAnyGroup) createGroupButton.setVisible(true); - if (inAnyGroup) createGroupButton.setVisible(false); - if (selectedComponents.isEmpty() && inAnyGroup) { - removeFromGroupButton.setVisible(true); - setTargetButton.setVisible(true); - } - if (!inAnyGroup) { - removeFromGroupButton.setVisible(false); - setTargetButton.setVisible(false); - } - selectedComponents.add(component); - ColorRectTexture rect = new ColorRectTexture( - (selectedTargets.isEmpty() || selectedTargets.get(0) != component) ? Color.RED : - Color.PINK); - textures.setTextures(rect, texture); - } - if (isInAnyGroup(component)) { - monitorGroups.forEach(group -> { - if (group.contains(component.getPos())) { - img.setHoverTooltips( - Component.translatable("gtceu.gui.central_monitor.group", group.getName())); - } - }); - } else { - img.setHoverTooltips(Component.translatable("gtceu.gui.central_monitor.group", - Component.translatable("gtceu.gui.central_monitor.none"))); - } - }; - Runnable rightClickCallback = () -> { - if (!selectedTargets.isEmpty()) { - if (selectedTargets.get(0).getPos() == component.getPos()) { - selectedTargets.clear(); - if (selectedComponents.contains(component)) { - ColorRectTexture rect = new ColorRectTexture(Color.RED); - textures.setTextures(rect, texture); - } else { - textures.setTextures(texture); - } - dataSlotInput.setVisible(false); - return; - } else { - try { - rightClickCallbacks.get(selectedTargets.get(0).getPos()).run(); - } catch (StackOverflowError e) { - GTCEu.LOGGER.error( - "Stack overflow when right-clicking monitor component {} at {} (selectedTarget is {} at {})", - component, component.getPos(), selectedTargets.get(0), - selectedTargets.get(0).getPos()); - } - } - } - selectedTargets.add(component); - ColorRectTexture rect; - if (selectedComponents.contains(component)) { - rect = new ColorRectTexture(Color.PINK); - } else { - rect = new ColorRectTexture(Color.BLUE); - } - textures.setTextures(rect, texture); - if (component.getDataItems() != null) { - IItemHandler dataItems = component.getDataItems(); - MonitorGroup selectedGroup = null; - for (MonitorGroup group : monitorGroups) { - for (IMonitorComponent c : selectedComponents) { - if (group.contains(c.getPos())) { - if (selectedGroup == null || selectedGroup == group) { - selectedGroup = group; - } else { - selectedGroup = null; - break; - } - } - } - } - if (selectedGroup != null) { - dataSlot[0] = selectedGroup.getDataSlot() + 1; - } - dataSlot[1] = dataItems.getSlots(); - dataSlotInput.setVisible(true); - } - }; - if (isInAnyGroup(component)) { - monitorGroups.forEach(group -> { - if (group.contains(component.getPos())) img.setHoverTooltips( - Component.translatable("gtceu.gui.central_monitor.group", group.getName())); - }); - } else { - img.setHoverTooltips(Component.translatable("gtceu.gui.central_monitor.group", - Component.translatable("gtceu.gui.central_monitor.none"))); - } - img.setOnPressCallback(click -> { - if (click.button == 0) callback.accept(null); - else if (click.button == 1) rightClickCallback.run(); - }); - componentSelection.addWidget(img); - GTUtil.getLast(imageButtons).add(callback); - rightClickCallbacks.put(component.getPos(), rightClickCallback); - } - } - builder.addWidget(main); - return builder; - } + //@Override + //public void addDisplayText(List textList) { + // MultiblockDisplayText.builder(textList, isFormed()) + // .addWorkingStatusLine(); + // getDefinition().getAdditionalDisplay().accept(this, textList); + //} +// + //@Override + //public Widget createUIWidget() { + // updateStructureDimensions(); + // selectedComponents.clear(); + // WidgetGroup builder = (WidgetGroup) super.createUIWidget(); +// + // WidgetGroup main = new WidgetGroup(); + // DraggableScrollableWidgetGroup componentSelection = new DraggableScrollableWidgetGroup(0, 10, 200, 110); + // main.addWidget(componentSelection); + // WidgetGroup options = new WidgetGroup(-100, 20, 60, 20); + // WidgetGroup groupConfig = new WidgetGroup(10, 30, 100, 100); + // groupConfig.setVisible(false); +// + // ButtonWidget infoWidget = new ButtonWidget(200, 10, 20, 20, null); + // infoWidget.setButtonTexture(GuiTextures.INFO_ICON); + // infoWidget.setHoverTooltips( + // GTStringUtils.toImmutable(LangHandler.getSingleOrMultiLang("gtceu.central_monitor.info_tooltip"))); + // builder.addWidget(infoWidget); + // List configGroup = new ArrayList<>(); + // configGroup.add(null); +// + // Consumer openGroupConfig = (group) -> { + // configGroup.set(0, group); + // if (group == null) { + // main.setVisible(true); + // groupConfig.setVisible(false); + // return; + // } + // groupConfig.clearAllWidgets(); + // groupConfig.addWidget(new LabelWidget(0, 5, () -> { + // String currentName = ""; + // if (configGroup.get(0) != null) { + // currentName = configGroup.get(0).getName(); + // } + // return Component.translatable("gtceu.central_monitor.gui.currently_editing", currentName).getString(); + // })); + // for (int i = 0; i < 8; i++) { + // SlotWidget slot = new SlotWidget(group.getPlaceholderSlotsHandler(), i, -38, 16 * i + 46); + // slot.setHoverTooltips(GTStringUtils + // .toImmutable(LangHandler.getMultiLang("gtceu.gui.computer_monitor_cover.slot_tooltip", i + 1))); + // groupConfig.addWidget(slot); + // } + // SlotWidget slot = new SlotWidget( + // group.getItemStackHandler(), 0, + // 0, 20); + // WidgetGroup itemUI = new WidgetGroup(40, 20, 100, 100); + // Runnable changeListener = () -> { + // if (slot.getLastItem().is(slot.getItem().getItem())) return; + // itemUI.clearAllWidgets(); + // if (slot.getItem().getItem() instanceof IComponentItem item) { + // for (IItemComponent component : item.getComponents()) { + // if (component instanceof IMonitorModuleItem module) { + // itemUI.addWidget(module.createUIWidget(slot.getItem(), this, group)); + // } + // } + // } + // }; + // slot.setChangeListener(changeListener); + // changeListener.run(); + // groupConfig.addWidget(itemUI); + // groupConfig.addWidget(slot); + // main.setVisible(false); + // groupConfig.setVisible(true); + // }; + // builder.addWidget(groupConfig); + // DraggableScrollableWidgetGroup groupList = new DraggableScrollableWidgetGroup(-100, 50, 70, 80); +// + // List>>> imageButtons = new ArrayList<>(); + // Map rightClickCallbacks = new HashMap<>(); + // int[] dataSlot = new int[2]; // list to be able to modify it in lambdas + // dataSlot[0] = 1; // the slot (index starts from 1) + // dataSlot[1] = 9; // amount of slots + // IntInputWidget dataSlotInput = new IntInputWidget(120, 20, 60, -20, () -> dataSlot[0], + // n -> dataSlot[0] = Mth.clamp(n, 1, dataSlot[1])); + // dataSlotInput.setVisible(false); + // builder.addWidget(dataSlotInput); +// + // Consumer addGroupToList = group -> { + // ButtonWidget label = new ButtonWidget(20, groupList.widgets.size() * 15 + 5, 60, 10, null); + // TextTexture text = new TextTexture(group.getName()); + // text.setType(TextTexture.TextType.LEFT); + // label.setButtonTexture(text); + // label.setOnPressCallback(click -> { + // group.getRelativePositions().forEach(pos -> { + // BlockPos rel = toRelative(pos); + // if (imageButtons.size() - 1 < rel.getY()) return; + // if (imageButtons.get(rel.getY()).size() - 1 < rel.getX()) return; + // imageButtons.get(rel.getY()).get(rel.getX()).accept(null); + // }); + // if (group.getTargetRaw() != null) { + // rightClickCallbacks.getOrDefault(group.getTargetRaw(), () -> {}).run(); + // } + // }); + // groupList.addWidget(label); +// + // ButtonWidget configButton = new ButtonWidget( + // 0, label.getSelfPositionY() - 3, + // 16, 16, + // GuiTextures.IO_CONFIG_COVER_SETTINGS, + // click -> { + // if (configGroup.get(0) == null) { + // openGroupConfig.accept(group); + // } else { + // openGroupConfig.accept(null); + // } + // }); + // groupList.addWidget(configButton); + // }; +// + // monitorGroups.forEach(addGroupToList); + // builder.addWidget(groupList); + // main.addWidget(options); + // ButtonWidget removeFromGroupButton = new ButtonWidget(0, 0, 60, 20, null); + // removeFromGroupButton.setButtonTexture(new TextTexture("gtceu.central_monitor.gui.remove_from_group")); + // removeFromGroupButton.setVisible(false); + // ButtonWidget setTargetButton = new ButtonWidget(0, 15, 60, 20, null); + // setTargetButton.setButtonTexture(new TextTexture("gtceu.central_monitor.gui.set_target")); + // setTargetButton.setVisible(false); + // ButtonWidget createGroupButton = new ButtonWidget(0, 0, 60, 20, null); + // createGroupButton.setOnPressCallback(click -> { + // MonitorGroup group = new MonitorGroup( + // Component.translatable("gtceu.gui.central_monitor.group_default_name", monitorGroups.size() + 1) + // .getString()); + // for (IMonitorComponent component : selectedComponents) { + // if (isInAnyGroup(component)) return; + // group.add(component.getPos()); + // } + // monitorGroups.add(group); + // addGroupToList.accept(group); +// + // createGroupButton.setVisible(false); + // removeFromGroupButton.setVisible(true); + // Iterator it = selectedComponents.iterator(); + // while (it.hasNext()) { + // IMonitorComponent c = it.next(); + // BlockPos rel = toRelative(c.getPos()); + // imageButtons.get(rel.getY()).get(rel.getX()).accept(it); + // } + // if (!selectedTargets.isEmpty()) { + // rightClickCallbacks.getOrDefault(selectedTargets.get(0).getPos(), () -> {}).run(); + // } + // }); + // setTargetButton.setOnPressCallback(click -> { + // MonitorGroup group = null; + // for (MonitorGroup group2 : monitorGroups) { + // for (IMonitorComponent component : selectedComponents) { + // if (group2.contains(component.getPos())) { + // group = group2; + // break; + // } + // } + // if (group != null) break; + // } + // if (group == null) return; + // if (selectedTargets.isEmpty()) group.setTarget(null); + // else { + // group.setTarget(selectedTargets.get(0).getPos()); + // group.setDataSlot(dataSlot[0] - 1); + // } + // }); + // removeFromGroupButton.setOnPressCallback(click -> { + // for (MonitorGroup group : monitorGroups) { + // for (IMonitorComponent component : selectedComponents) group.remove(component.getPos()); + // } + // Iterator itg = monitorGroups.iterator(); + // while (itg.hasNext()) { + // MonitorGroup group = itg.next(); + // if (group.isEmpty()) { + // clearInventory(group.getItemStackHandler()); + // clearInventory(group.getPlaceholderSlotsHandler()); + // itg.remove(); + // } + // } + // groupList.clearAllWidgets(); + // monitorGroups.forEach(addGroupToList); +// + // removeFromGroupButton.setVisible(false); + // createGroupButton.setVisible(true); + // Iterator it = selectedComponents.iterator(); + // while (it.hasNext()) { + // IMonitorComponent c = it.next(); + // BlockPos rel = toRelative(c.getPos()); + // if (imageButtons.size() - 1 < rel.getY()) continue; + // if (imageButtons.get(rel.getY()).size() - 1 < rel.getX()) continue; + // imageButtons.get(rel.getY()).get(rel.getX()).accept(it); + // } + // if (!selectedTargets.isEmpty()) { + // rightClickCallbacks.getOrDefault(selectedTargets.get(0).getPos(), () -> {}).run(); + // } + // }); + // createGroupButton.setButtonTexture(new TextTexture("gtceu.central_monitor.gui.create_group")); + // createGroupButton.setVisible(false); + // options.addWidget(removeFromGroupButton); + // options.addWidget(createGroupButton); + // options.addWidget(setTargetButton); + // int startX = 20; + // int startY = 30; + // for (int row = 0; row <= downDist + upDist; row++) { + // imageButtons.add(new ArrayList<>()); + // for (int col = 0; col <= leftDist + rightDist; col++) { + // IGuiTexture texture = getComponentTexture(row, col); + // GuiTextureGroup textures = new GuiTextureGroup(texture, new ColorBorderTexture(2, 0xFFFFFF)); + // IMonitorComponent component = getComponent(row, col); + // if (component == null) { + // GTUtil.getLast(imageButtons).add(it -> {}); + // continue; + // } + // ButtonWidget img = new ButtonWidget(startX + (16 * col), startY + (16 * row), 16, 16, textures, null); + // Consumer> callback = (it) -> { + // if (!component.isMonitor()) return; + // if (selectedComponents.contains(component)) { + // if (it == null) { + // selectedComponents.remove(component); + // } else { + // it.remove(); + // } +// + // if (!selectedTargets.isEmpty() && selectedTargets.get(0) == component) { + // ColorRectTexture rect = new ColorRectTexture(Color.BLUE); + // textures.setTextures(rect, texture); + // } else { + // textures.setTextures(texture); + // } +// + // createGroupButton.setVisible(selectedComponents.stream().noneMatch(this::isInAnyGroup)); + // removeFromGroupButton.setVisible(selectedComponents.stream().allMatch(this::isInAnyGroup)); + // setTargetButton.setVisible(removeFromGroupButton.isVisible()); +// + // if (selectedComponents.isEmpty()) { + // createGroupButton.setVisible(false); + // removeFromGroupButton.setVisible(false); + // setTargetButton.setVisible(false); + // } + // } else { + // boolean inAnyGroup = isInAnyGroup(component); + // // yes I know this is terrible but if it works don't touch it :) + // if (selectedComponents.isEmpty() && !inAnyGroup) createGroupButton.setVisible(true); + // if (inAnyGroup) createGroupButton.setVisible(false); + // if (selectedComponents.isEmpty() && inAnyGroup) { + // removeFromGroupButton.setVisible(true); + // setTargetButton.setVisible(true); + // } + // if (!inAnyGroup) { + // removeFromGroupButton.setVisible(false); + // setTargetButton.setVisible(false); + // } + // selectedComponents.add(component); + // ColorRectTexture rect = new ColorRectTexture( + // (selectedTargets.isEmpty() || selectedTargets.get(0) != component) ? Color.RED : + // Color.PINK); + // textures.setTextures(rect, texture); + // } + // if (isInAnyGroup(component)) { + // monitorGroups.forEach(group -> { + // if (group.contains(component.getPos())) { + // img.setHoverTooltips( + // Component.translatable("gtceu.gui.central_monitor.group", group.getName())); + // } + // }); + // } else { + // img.setHoverTooltips(Component.translatable("gtceu.gui.central_monitor.group", + // Component.translatable("gtceu.gui.central_monitor.none"))); + // } + // }; + // Runnable rightClickCallback = () -> { + // if (!selectedTargets.isEmpty()) { + // if (selectedTargets.get(0).getPos() == component.getPos()) { + // selectedTargets.clear(); + // if (selectedComponents.contains(component)) { + // ColorRectTexture rect = new ColorRectTexture(Color.RED); + // textures.setTextures(rect, texture); + // } else { + // textures.setTextures(texture); + // } + // dataSlotInput.setVisible(false); + // return; + // } else { + // try { + // rightClickCallbacks.get(selectedTargets.get(0).getPos()).run(); + // } catch (StackOverflowError e) { + // GTCEu.LOGGER.error( + // "Stack overflow when right-clicking monitor component {} at {} (selectedTarget is {} at {})", + // component, component.getPos(), selectedTargets.get(0), + // selectedTargets.get(0).getPos()); + // } + // } + // } + // selectedTargets.add(component); + // ColorRectTexture rect; + // if (selectedComponents.contains(component)) { + // rect = new ColorRectTexture(Color.PINK); + // } else { + // rect = new ColorRectTexture(Color.BLUE); + // } + // textures.setTextures(rect, texture); + // if (component.getDataItems() != null) { + // IItemHandler dataItems = component.getDataItems(); + // MonitorGroup selectedGroup = null; + // for (MonitorGroup group : monitorGroups) { + // for (IMonitorComponent c : selectedComponents) { + // if (group.contains(c.getPos())) { + // if (selectedGroup == null || selectedGroup == group) { + // selectedGroup = group; + // } else { + // selectedGroup = null; + // break; + // } + // } + // } + // } + // if (selectedGroup != null) { + // dataSlot[0] = selectedGroup.getDataSlot() + 1; + // } + // dataSlot[1] = dataItems.getSlots(); + // dataSlotInput.setVisible(true); + // } + // }; + // if (isInAnyGroup(component)) { + // monitorGroups.forEach(group -> { + // if (group.contains(component.getPos())) img.setHoverTooltips( + // Component.translatable("gtceu.gui.central_monitor.group", group.getName())); + // }); + // } else { + // img.setHoverTooltips(Component.translatable("gtceu.gui.central_monitor.group", + // Component.translatable("gtceu.gui.central_monitor.none"))); + // } + // img.setOnPressCallback(click -> { + // if (click.button == 0) callback.accept(null); + // else if (click.button == 1) rightClickCallback.run(); + // }); + // componentSelection.addWidget(img); + // GTUtil.getLast(imageButtons).add(callback); + // rightClickCallbacks.put(component.getPos(), rightClickCallback); + // } + // } + // builder.addWidget(main); + // return builder; + //} @Override public IGuiTexture getComponentIcon() { diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CleanroomMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CleanroomMachine.java index 51ddb521f98..bb92f4fc3c9 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CleanroomMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CleanroomMachine.java @@ -78,7 +78,7 @@ @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault public class CleanroomMachine extends WorkableElectricMultiblockMachine - implements ICleanroomProvider, IDisplayUIMachine, IDataInfoProvider { + implements ICleanroomProvider, IDataInfoProvider { protected static final ManagedFieldHolder MANAGED_FIELD_HOLDER = new ManagedFieldHolder(CleanroomMachine.class, WorkableMultiblockMachine.MANAGED_FIELD_HOLDER); @@ -477,53 +477,53 @@ protected boolean isMachineBanned(MetaMachine machine) { return machine instanceof PrimitivePumpMachine; } - @Override - public void addDisplayText(List textList) { - if (isFormed()) { - var maxVoltage = getMaxVoltage(); - if (maxVoltage > 0) { - String voltageName = GTValues.VNF[GTUtil.getFloorTierByVoltage(maxVoltage)]; - textList.add(Component.translatable("gtceu.multiblock.max_energy_per_tick", maxVoltage, voltageName)); - } - - if (cleanroomType != null) { - textList.add(Component.translatable(cleanroomType.getTranslationKey())); - } - - if (!isWorkingEnabled()) { - textList.add(Component.translatable("gtceu.multiblock.work_paused")); - - } else if (isActive()) { - textList.add(Component.translatable("gtceu.multiblock.running")); - int currentProgress = (int) (recipeLogic.getProgressPercent() * 100); - double maxInSec = (float) recipeLogic.getDuration() / 20.0f; - double currentInSec = (float) recipeLogic.getProgress() / 20.0f; - textList.add( - Component.translatable("gtceu.multiblock.progress", String.format("%.2f", (float) currentInSec), - String.format("%.2f", (float) maxInSec), currentProgress)); - } else { - textList.add(Component.translatable("gtceu.multiblock.idling")); - } - - if (recipeLogic.isWaiting()) { - textList.add(Component.translatable("gtceu.multiblock.waiting") - .setStyle(Style.EMPTY.withColor(ChatFormatting.RED))); - } - - if (isClean()) textList.add(Component.translatable("gtceu.multiblock.cleanroom.clean_state")); - else textList.add(Component.translatable("gtceu.multiblock.cleanroom.dirty_state")); - textList.add(Component.translatable("gtceu.multiblock.cleanroom.clean_amount", this.cleanAmount)); - textList.add(Component.translatable("gtceu.multiblock.dimensions.0")); - textList.add(Component.translatable("gtceu.multiblock.dimensions.1", lDist + rDist + 1, hDist + 1, - fDist + bDist + 1)); - } else { - Component tooltip = Component.translatable("gtceu.multiblock.invalid_structure.tooltip") - .withStyle(ChatFormatting.GRAY); - textList.add(Component.translatable("gtceu.multiblock.invalid_structure") - .withStyle(Style.EMPTY.withColor(ChatFormatting.RED) - .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, tooltip)))); - } - } + //@Override + //public void addDisplayText(List textList) { + // if (isFormed()) { + // var maxVoltage = getMaxVoltage(); + // if (maxVoltage > 0) { + // String voltageName = GTValues.VNF[GTUtil.getFloorTierByVoltage(maxVoltage)]; + // textList.add(Component.translatable("gtceu.multiblock.max_energy_per_tick", maxVoltage, voltageName)); + // } +// + // if (cleanroomType != null) { + // textList.add(Component.translatable(cleanroomType.getTranslationKey())); + // } +// + // if (!isWorkingEnabled()) { + // textList.add(Component.translatable("gtceu.multiblock.work_paused")); +// + // } else if (isActive()) { + // textList.add(Component.translatable("gtceu.multiblock.running")); + // int currentProgress = (int) (recipeLogic.getProgressPercent() * 100); + // double maxInSec = (float) recipeLogic.getDuration() / 20.0f; + // double currentInSec = (float) recipeLogic.getProgress() / 20.0f; + // textList.add( + // Component.translatable("gtceu.multiblock.progress", String.format("%.2f", (float) currentInSec), + // String.format("%.2f", (float) maxInSec), currentProgress)); + // } else { + // textList.add(Component.translatable("gtceu.multiblock.idling")); + // } +// + // if (recipeLogic.isWaiting()) { + // textList.add(Component.translatable("gtceu.multiblock.waiting") + // .setStyle(Style.EMPTY.withColor(ChatFormatting.RED))); + // } +// + // if (isClean()) textList.add(Component.translatable("gtceu.multiblock.cleanroom.clean_state")); + // else textList.add(Component.translatable("gtceu.multiblock.cleanroom.dirty_state")); + // textList.add(Component.translatable("gtceu.multiblock.cleanroom.clean_amount", this.cleanAmount)); + // textList.add(Component.translatable("gtceu.multiblock.dimensions.0")); + // textList.add(Component.translatable("gtceu.multiblock.dimensions.1", lDist + rDist + 1, hDist + 1, + // fDist + bDist + 1)); + // } else { + // Component tooltip = Component.translatable("gtceu.multiblock.invalid_structure.tooltip") + // .withStyle(ChatFormatting.GRAY); + // textList.add(Component.translatable("gtceu.multiblock.invalid_structure") + // .withStyle(Style.EMPTY.withColor(ChatFormatting.RED) + // .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, tooltip)))); + // } + //} @Override public Set getTypes() { diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/FluidDrillMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/FluidDrillMachine.java index 647f0faa3b6..57286ccad18 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/FluidDrillMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/FluidDrillMachine.java @@ -66,42 +66,42 @@ public int getEnergyTier() { return Math.min(this.tier + 1, Math.max(this.tier, GTUtil.getFloorTierByVoltage(energyCont.getInputVoltage()))); } - @Override - public void addDisplayText(List textList) { - if (isFormed()) { - int energyContainer = getEnergyTier(); - long maxVoltage = GTValues.V[energyContainer]; - String voltageName = GTValues.VNF[energyContainer]; - textList.add(Component.translatable("gtceu.multiblock.max_energy_per_tick", maxVoltage, voltageName)); - - if (getRecipeLogic().getVeinFluid() != null) { - // Fluid name - Fluid drilledFluid = getRecipeLogic().getVeinFluid(); - Component fluidInfo = drilledFluid.getFluidType().getDescription().copy() - .withStyle(ChatFormatting.GREEN); - textList.add(Component.translatable("gtceu.multiblock.fluid_rig.drilled_fluid", fluidInfo) - .withStyle(ChatFormatting.GRAY)); - - // Fluid amount - Component amountInfo = Component.literal(FormattingUtil.formatNumbers( - getRecipeLogic().getFluidToProduce() * 20L / FluidDrillLogic.MAX_PROGRESS) + - " mB/s").withStyle(ChatFormatting.BLUE); - textList.add(Component.translatable("gtceu.multiblock.fluid_rig.fluid_amount", amountInfo) - .withStyle(ChatFormatting.GRAY)); - } else { - Component noFluid = Component.translatable("gtceu.multiblock.fluid_rig.no_fluid_in_area") - .withStyle(ChatFormatting.RED); - textList.add(Component.translatable("gtceu.multiblock.fluid_rig.drilled_fluid", noFluid) - .withStyle(ChatFormatting.GRAY)); - } - } else { - Component tooltip = Component.translatable("gtceu.multiblock.invalid_structure.tooltip") - .withStyle(ChatFormatting.GRAY); - textList.add(Component.translatable("gtceu.multiblock.invalid_structure") - .withStyle(Style.EMPTY.withColor(ChatFormatting.RED) - .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, tooltip)))); - } - } + //@Override + //public void addDisplayText(List textList) { + // if (isFormed()) { + // int energyContainer = getEnergyTier(); + // long maxVoltage = GTValues.V[energyContainer]; + // String voltageName = GTValues.VNF[energyContainer]; + // textList.add(Component.translatable("gtceu.multiblock.max_energy_per_tick", maxVoltage, voltageName)); +// + // if (getRecipeLogic().getVeinFluid() != null) { + // // Fluid name + // Fluid drilledFluid = getRecipeLogic().getVeinFluid(); + // Component fluidInfo = drilledFluid.getFluidType().getDescription().copy() + // .withStyle(ChatFormatting.GREEN); + // textList.add(Component.translatable("gtceu.multiblock.fluid_rig.drilled_fluid", fluidInfo) + // .withStyle(ChatFormatting.GRAY)); +// + // // Fluid amount + // Component amountInfo = Component.literal(FormattingUtil.formatNumbers( + // getRecipeLogic().getFluidToProduce() * 20L / FluidDrillLogic.MAX_PROGRESS) + + // " mB/s").withStyle(ChatFormatting.BLUE); + // textList.add(Component.translatable("gtceu.multiblock.fluid_rig.fluid_amount", amountInfo) + // .withStyle(ChatFormatting.GRAY)); + // } else { + // Component noFluid = Component.translatable("gtceu.multiblock.fluid_rig.no_fluid_in_area") + // .withStyle(ChatFormatting.RED); + // textList.add(Component.translatable("gtceu.multiblock.fluid_rig.drilled_fluid", noFluid) + // .withStyle(ChatFormatting.GRAY)); + // } + // } else { + // Component tooltip = Component.translatable("gtceu.multiblock.invalid_structure.tooltip") + // .withStyle(ChatFormatting.GRAY); + // textList.add(Component.translatable("gtceu.multiblock.invalid_structure") + // .withStyle(Style.EMPTY.withColor(ChatFormatting.RED) + // .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, tooltip)))); + // } + //} public static int getDepletionChance(int tier) { if (tier == GTValues.MV) diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/FusionReactorMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/FusionReactorMachine.java index 3b14be3ad8b..9b96a43e47a 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/FusionReactorMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/FusionReactorMachine.java @@ -277,15 +277,15 @@ public long getMaxVoltage() { ////////////////////////////////////// // ******** GUI *********// ////////////////////////////////////// - @Override - public void addDisplayText(List textList) { - super.addDisplayText(textList); - if (isFormed()) { - textList.add(Component.translatable("gtceu.multiblock.fusion_reactor.energy", - this.energyContainer.getEnergyStored(), this.energyContainer.getEnergyCapacity())); - textList.add(Component.translatable("gtceu.multiblock.fusion_reactor.heat", heat)); - } - } + //@Override + //public void addDisplayText(List textList) { + // super.addDisplayText(textList); + // if (isFormed()) { + // textList.add(Component.translatable("gtceu.multiblock.fusion_reactor.energy", + // this.energyContainer.getEnergyStored(), this.energyContainer.getEnergyCapacity())); + // textList.add(Component.translatable("gtceu.multiblock.fusion_reactor.heat", heat)); + // } + //} public static void addEUToStartLabel(GTRecipe recipe, WidgetGroup group) { long euToStart = recipe.data.getLong("eu_to_start"); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/LargeMinerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/LargeMinerMachine.java index f2b776e41cb..66918e7d606 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/LargeMinerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/LargeMinerMachine.java @@ -207,54 +207,54 @@ public boolean drainInput(boolean simulate) { ////////////////////////////////////// // *********** GUI ***********// ////////////////////////////////////// - @Override - public void addDisplayText(List textList) { - super.addDisplayText(textList); - if (this.isFormed()) { - int workingAreaChunks = getRecipeLogic().getCurrentRadius() * 2 / CHUNK_LENGTH; - int workingArea = IMiner.getWorkingArea(getRecipeLogic().getCurrentRadius()); - textList.add(Component.translatable("gtceu.machine.miner.startx", - getRecipeLogic().getX() == Integer.MAX_VALUE ? 0 : getRecipeLogic().getX())); - textList.add(Component.translatable("gtceu.machine.miner.starty", - getRecipeLogic().getY() == Integer.MAX_VALUE ? 0 : getRecipeLogic().getY())); - textList.add(Component.translatable("gtceu.machine.miner.startz", - getRecipeLogic().getZ() == Integer.MAX_VALUE ? 0 : getRecipeLogic().getZ())); - textList.add(Component.translatable("gtceu.universal.tooltip.silk_touch") - .append(ComponentPanelWidget.withButton(Component.literal("[") - .append(getRecipeLogic().isSilkTouchMode() ? - Component.translatable("gtceu.creative.activity.on") : - Component.translatable("gtceu.creative.activity.off")) - .append(Component.literal("]")), "silk_touch"))); - textList.add(Component.translatable("gtceu.universal.tooltip.chunk_mode") - .append(ComponentPanelWidget.withButton(Component.literal("[") - .append(getRecipeLogic().isChunkMode() ? - Component.translatable("gtceu.creative.activity.on") : - Component.translatable("gtceu.creative.activity.off")) - .append(Component.literal("]")), "chunk_mode"))); - if (getRecipeLogic().isChunkMode()) { - textList.add(Component.translatable("gtceu.universal.tooltip.working_area_chunks", workingAreaChunks, - workingAreaChunks)); - } else { - textList.add(Component.translatable("gtceu.universal.tooltip.working_area", workingArea, workingArea)); - } - if (getRecipeLogic().isDone()) { - textList.add(Component.translatable("gtceu.multiblock.large_miner.done") - .setStyle(Style.EMPTY.withColor(ChatFormatting.GREEN))); - } - } - } - - @Override - public void handleDisplayClick(String componentData, ClickData clickData) { - if (!clickData.isRemote) { - if (componentData.equals("chunk_mode")) { - getRecipeLogic().setChunkMode(!getRecipeLogic().isChunkMode()); - } - if (componentData.equals("silk_touch")) { - getRecipeLogic().setSilkTouchMode(!getRecipeLogic().isSilkTouchMode()); - } - } - } + //@Override + //public void addDisplayText(List textList) { + // super.addDisplayText(textList); + // if (this.isFormed()) { + // int workingAreaChunks = getRecipeLogic().getCurrentRadius() * 2 / CHUNK_LENGTH; + // int workingArea = IMiner.getWorkingArea(getRecipeLogic().getCurrentRadius()); + // textList.add(Component.translatable("gtceu.machine.miner.startx", + // getRecipeLogic().getX() == Integer.MAX_VALUE ? 0 : getRecipeLogic().getX())); + // textList.add(Component.translatable("gtceu.machine.miner.starty", + // getRecipeLogic().getY() == Integer.MAX_VALUE ? 0 : getRecipeLogic().getY())); + // textList.add(Component.translatable("gtceu.machine.miner.startz", + // getRecipeLogic().getZ() == Integer.MAX_VALUE ? 0 : getRecipeLogic().getZ())); + // textList.add(Component.translatable("gtceu.universal.tooltip.silk_touch") + // .append(ComponentPanelWidget.withButton(Component.literal("[") + // .append(getRecipeLogic().isSilkTouchMode() ? + // Component.translatable("gtceu.creative.activity.on") : + // Component.translatable("gtceu.creative.activity.off")) + // .append(Component.literal("]")), "silk_touch"))); + // textList.add(Component.translatable("gtceu.universal.tooltip.chunk_mode") + // .append(ComponentPanelWidget.withButton(Component.literal("[") + // .append(getRecipeLogic().isChunkMode() ? + // Component.translatable("gtceu.creative.activity.on") : + // Component.translatable("gtceu.creative.activity.off")) + // .append(Component.literal("]")), "chunk_mode"))); + // if (getRecipeLogic().isChunkMode()) { + // textList.add(Component.translatable("gtceu.universal.tooltip.working_area_chunks", workingAreaChunks, + // workingAreaChunks)); + // } else { + // textList.add(Component.translatable("gtceu.universal.tooltip.working_area", workingArea, workingArea)); + // } + // if (getRecipeLogic().isDone()) { + // textList.add(Component.translatable("gtceu.multiblock.large_miner.done") + // .setStyle(Style.EMPTY.withColor(ChatFormatting.GREEN))); + // } + // } + //} +// + //@Override + //public void handleDisplayClick(String componentData, ClickData clickData) { + // if (!clickData.isRemote) { + // if (componentData.equals("chunk_mode")) { + // getRecipeLogic().setChunkMode(!getRecipeLogic().isChunkMode()); + // } + // if (componentData.equals("silk_touch")) { + // getRecipeLogic().setSilkTouchMode(!getRecipeLogic().isSilkTouchMode()); + // } + // } + //} ////////////////////////////////////// // ******* Interaction *******// diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/DataBankMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/DataBankMachine.java index f8f1c104b55..e36bb1cf230 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/DataBankMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/DataBankMachine.java @@ -37,7 +37,7 @@ @MethodsReturnNonnullByDefault @ParametersAreNonnullByDefault public class DataBankMachine extends WorkableElectricMultiblockMachine - implements IFancyUIMachine, IDisplayUIMachine, IControllable { + implements IControllable { public static final int EUT_PER_HATCH = GTValues.VA[GTValues.EV]; public static final int EUT_PER_HATCH_CHAINED = GTValues.VA[GTValues.LuV]; @@ -175,17 +175,17 @@ public void tick() { updateTickSubscription(); } - @Override - public void addDisplayText(List textList) { - MultiblockDisplayText.builder(textList, isFormed()) - .setWorkingStatus(true, isActive() && isWorkingEnabled()) // transform into two-state system for display - .setWorkingStatusKeys( - "gtceu.multiblock.idling", - "gtceu.multiblock.idling", - "gtceu.multiblock.data_bank.providing") - .addEnergyUsageExactLine(getEnergyUsage()) - .addWorkingStatusLine(); - } + //@Override + //public void addDisplayText(List textList) { + // MultiblockDisplayText.builder(textList, isFormed()) + // .setWorkingStatus(true, isActive() && isWorkingEnabled()) // transform into two-state system for display + // .setWorkingStatusKeys( + // "gtceu.multiblock.idling", + // "gtceu.multiblock.idling", + // "gtceu.multiblock.data_bank.providing") + // .addEnergyUsageExactLine(getEnergyUsage()) + // .addWorkingStatusLine(); + //} /* * @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/HPCAMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/HPCAMachine.java index 6fbf139577e..0d0493ac4fe 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/HPCAMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/HPCAMachine.java @@ -250,67 +250,67 @@ private void consumeEnergy() { } } - @Override - public Widget createUIWidget() { - WidgetGroup builder = (WidgetGroup) super.createUIWidget(); - // Create the hover grid - builder.addWidget(new ExtendedProgressWidget( - () -> hpcaHandler.getAllocatedCWUt() > 0 ? progressSupplier.getAsDouble() : 0, - 74, 57, 47, 47, GuiTextures.HPCA_COMPONENT_OUTLINE) - .setServerTooltipSupplier(hpcaHandler::addInfo) - .setFillDirection(ProgressTexture.FillDirection.LEFT_TO_RIGHT)); - int startX = 76; - int startY = 59; - - // we need to know what components we have on the client - if (getLevel().isClientSide) { - if (isFormed) { - hpcaHandler.tryGatherClientComponents(this.getLevel(), this.getPos(), this.getFrontFacing(), - this.getUpwardsFacing(), this.isFlipped); - } else { - hpcaHandler.clearClientComponents(); - } - } - for (int i = 0; i < 3; i++) { - for (int j = 0; j < 3; j++) { - final int index = i * 3 + j; - Supplier textureSupplier = () -> hpcaHandler.getComponentTexture(index); - builder.addWidget(new ImageWidget(startX + (15 * j), startY + (15 * i), 13, 13, textureSupplier)); - } - } - return builder; - } - - @Override - public void addDisplayText(List textList) { - MultiblockDisplayText.builder(textList, isFormed()) - .setWorkingStatus(true, hpcaHandler.getAllocatedCWUt() > 0) // transform into two-state system for - // display - .setWorkingStatusKeys( - "gtceu.multiblock.idling", - "gtceu.multiblock.idling", - "gtceu.multiblock.data_bank.providing") - .addCustom(tl -> { - if (isFormed()) { - // Energy Usage - tl.add(Component.translatable( - "gtceu.multiblock.hpca.energy", - FormattingUtil.formatNumbers(hpcaHandler.cachedEUt), - FormattingUtil.formatNumbers(hpcaHandler.getMaxEUt()), - GTValues.VNF[GTUtil.getTierByVoltage(hpcaHandler.getMaxEUt())]) - .withStyle(ChatFormatting.GRAY)); - - // Provided Computation - Component cwutInfo = Component.literal( - hpcaHandler.cachedCWUt + " / " + hpcaHandler.getMaxCWUt() + " CWU/t") - .withStyle(ChatFormatting.AQUA); - tl.add(Component.translatable( - "gtceu.multiblock.hpca.computation", - cwutInfo).withStyle(ChatFormatting.GRAY)); - } - }) - .addWorkingStatusLine(); - } + //@Override + //public Widget createUIWidget() { + // WidgetGroup builder = (WidgetGroup) super.createUIWidget(); + // // Create the hover grid + // builder.addWidget(new ExtendedProgressWidget( + // () -> hpcaHandler.getAllocatedCWUt() > 0 ? progressSupplier.getAsDouble() : 0, + // 74, 57, 47, 47, GuiTextures.HPCA_COMPONENT_OUTLINE) + // .setServerTooltipSupplier(hpcaHandler::addInfo) + // .setFillDirection(ProgressTexture.FillDirection.LEFT_TO_RIGHT)); + // int startX = 76; + // int startY = 59; +// + // // we need to know what components we have on the client + // if (getLevel().isClientSide) { + // if (isFormed) { + // hpcaHandler.tryGatherClientComponents(this.getLevel(), this.getPos(), this.getFrontFacing(), + // this.getUpwardsFacing(), this.isFlipped); + // } else { + // hpcaHandler.clearClientComponents(); + // } + // } + // for (int i = 0; i < 3; i++) { + // for (int j = 0; j < 3; j++) { + // final int index = i * 3 + j; + // Supplier textureSupplier = () -> hpcaHandler.getComponentTexture(index); + // builder.addWidget(new ImageWidget(startX + (15 * j), startY + (15 * i), 13, 13, textureSupplier)); + // } + // } + // return builder; + //} +// + //@Override + //public void addDisplayText(List textList) { + // MultiblockDisplayText.builder(textList, isFormed()) + // .setWorkingStatus(true, hpcaHandler.getAllocatedCWUt() > 0) // transform into two-state system for + // // display + // .setWorkingStatusKeys( + // "gtceu.multiblock.idling", + // "gtceu.multiblock.idling", + // "gtceu.multiblock.data_bank.providing") + // .addCustom(tl -> { + // if (isFormed()) { + // // Energy Usage + // tl.add(Component.translatable( + // "gtceu.multiblock.hpca.energy", + // FormattingUtil.formatNumbers(hpcaHandler.cachedEUt), + // FormattingUtil.formatNumbers(hpcaHandler.getMaxEUt()), + // GTValues.VNF[GTUtil.getTierByVoltage(hpcaHandler.getMaxEUt())]) + // .withStyle(ChatFormatting.GRAY)); +// + // // Provided Computation + // Component cwutInfo = Component.literal( + // hpcaHandler.cachedCWUt + " / " + hpcaHandler.getMaxCWUt() + " CWU/t") + // .withStyle(ChatFormatting.AQUA); + // tl.add(Component.translatable( + // "gtceu.multiblock.hpca.computation", + // cwutInfo).withStyle(ChatFormatting.GRAY)); + // } + // }) + // .addWorkingStatusLine(); + //} private ChatFormatting getDisplayTemperatureColor() { if (temperature < 500) { diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/NetworkSwitchMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/NetworkSwitchMachine.java index a06ff3d977d..a5193e5d851 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/NetworkSwitchMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/NetworkSwitchMachine.java @@ -116,18 +116,18 @@ public boolean canBridge(@NotNull Collection seen) return true; } - @Override - public void addDisplayText(List textList) { - MultiblockDisplayText.builder(textList, isFormed()) - .setWorkingStatus(true, isActive() && isWorkingEnabled()) // transform into two-state system for display - .setWorkingStatusKeys( - "gtceu.multiblock.idling", - "gtceu.multiblock.idling", - "gtceu.multiblock.data_bank.providing") - .addEnergyUsageExactLine(getEnergyUsage()) - .addComputationUsageLine(computationHandler.getMaxCWUtForDisplay()) - .addWorkingStatusLine(); - } + //@Override + //public void addDisplayText(List textList) { + // MultiblockDisplayText.builder(textList, isFormed()) + // .setWorkingStatus(true, isActive() && isWorkingEnabled()) // transform into two-state system for display + // .setWorkingStatusKeys( + // "gtceu.multiblock.idling", + // "gtceu.multiblock.idling", + // "gtceu.multiblock.data_bank.providing") + // .addEnergyUsageExactLine(getEnergyUsage()) + // .addComputationUsageLine(computationHandler.getMaxCWUtForDisplay()) + // .addWorkingStatusLine(); + //} /* * @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/ResearchStationMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/ResearchStationMachine.java index 9dc28e9ec59..48defe9d7b8 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/ResearchStationMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/ResearchStationMachine.java @@ -33,7 +33,7 @@ @MethodsReturnNonnullByDefault @ParametersAreNonnullByDefault public class ResearchStationMachine extends WorkableElectricMultiblockMachine - implements IOpticalComputationReceiver, IDisplayUIMachine { + implements IOpticalComputationReceiver { @Getter private IOpticalComputationProvider computationProvider; @@ -107,18 +107,18 @@ public boolean regressWhenWaiting() { return false; } - @Override - public void addDisplayText(List textList) { - MultiblockDisplayText.builder(textList, isFormed()) - .setWorkingStatus(recipeLogic.isWorkingEnabled(), recipeLogic.isActive()) - .setWorkingStatusKeys("gtceu.multiblock.idling", "gtceu.multiblock.work_paused", - "gtceu.multiblock.research_station.researching") - .addEnergyUsageLine(energyContainer) - .addEnergyTierLine(tier) - .addWorkingStatusLine() - // .addComputationUsageExactLine(computationProvider.getMaxCWUt()) // TODO: (Onion) - .addProgressLineOnlyPercent(recipeLogic.getProgressPercent()); - } + //@Override + //public void addDisplayText(List textList) { + // MultiblockDisplayText.builder(textList, isFormed()) + // .setWorkingStatus(recipeLogic.isWorkingEnabled(), recipeLogic.isActive()) + // .setWorkingStatusKeys("gtceu.multiblock.idling", "gtceu.multiblock.work_paused", + // "gtceu.multiblock.research_station.researching") + // .addEnergyUsageLine(energyContainer) + // .addEnergyTierLine(tier) + // .addWorkingStatusLine() + // // .addComputationUsageExactLine(computationProvider.getMaxCWUt()) // TODO: (Onion) + // .addProgressLineOnlyPercent(recipeLogic.getProgressPercent()); + //} public static class ResearchStationRecipeLogic extends RecipeLogic { diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/generator/LargeCombustionEngineMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/generator/LargeCombustionEngineMachine.java index 88a93bb3c37..de3b8f9c47a 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/generator/LargeCombustionEngineMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/generator/LargeCombustionEngineMachine.java @@ -184,33 +184,33 @@ public boolean regressWhenWaiting() { // ******* GUI ********// ////////////////////////////////////// - @Override - public void addDisplayText(List textList) { - MultiblockDisplayText.Builder builder = MultiblockDisplayText.builder(textList, isFormed()) - .setWorkingStatus(recipeLogic.isWorkingEnabled(), recipeLogic.isActive()); - - long lastEUt = recipeLogic.getLastRecipe() != null ? - recipeLogic.getLastRecipe().getOutputEUt().getTotalEU() : 0; - if (isExtreme()) { - builder.addEnergyProductionLine(GTValues.V[tier + 1], lastEUt); - } else { - builder.addEnergyProductionAmpsLine(GTValues.V[tier] * 3, 3); - } - - if (isActive() && isWorkingEnabled()) { - builder.addCurrentEnergyProductionLine(lastEUt); - } - - builder.addFuelNeededLine(getRecipeFluidInputInfo(), recipeLogic.getDuration()); - - if (isFormed && isOxygenBoosted) { - final var key = isExtreme() ? "gtceu.multiblock.large_combustion_engine.liquid_oxygen_boosted" : - "gtceu.multiblock.large_combustion_engine.oxygen_boosted"; - builder.addCustom(tl -> tl.add(Component.translatable(key).withStyle(ChatFormatting.AQUA))); - } - - builder.addWorkingStatusLine(); - } + //@Override + //public void addDisplayText(List textList) { + // MultiblockDisplayText.Builder builder = MultiblockDisplayText.builder(textList, isFormed()) + // .setWorkingStatus(recipeLogic.isWorkingEnabled(), recipeLogic.isActive()); +// + // long lastEUt = recipeLogic.getLastRecipe() != null ? + // recipeLogic.getLastRecipe().getOutputEUt().getTotalEU() : 0; + // if (isExtreme()) { + // builder.addEnergyProductionLine(GTValues.V[tier + 1], lastEUt); + // } else { + // builder.addEnergyProductionAmpsLine(GTValues.V[tier] * 3, 3); + // } +// + // if (isActive() && isWorkingEnabled()) { + // builder.addCurrentEnergyProductionLine(lastEUt); + // } +// + // builder.addFuelNeededLine(getRecipeFluidInputInfo(), recipeLogic.getDuration()); +// + // if (isFormed && isOxygenBoosted) { + // final var key = isExtreme() ? "gtceu.multiblock.large_combustion_engine.liquid_oxygen_boosted" : + // "gtceu.multiblock.large_combustion_engine.oxygen_boosted"; + // builder.addCustom(tl -> tl.add(Component.translatable(key).withStyle(ChatFormatting.AQUA))); + // } +// + // builder.addWorkingStatusLine(); + //} @Nullable public String getRecipeFluidInputInfo() { @@ -228,16 +228,16 @@ public String getRecipeFluidInputInfo() { return ChatFormatting.RED + FormattingUtil.formatNumbers(neededAmount) + "mB"; } - @Override - public void attachTooltips(TooltipsPanel tooltipsPanel) { - super.attachTooltips(tooltipsPanel); - tooltipsPanel.attachTooltips(new IFancyTooltip.Basic( - () -> GuiTextures.INDICATOR_NO_STEAM.get(false), - () -> List.of(Component.translatable("gtceu.multiblock.large_combustion_engine.obstructed") - .setStyle(Style.EMPTY.withColor(ChatFormatting.RED))), - this::isIntakesObstructed, - () -> null)); - } + //@Override + //public void attachTooltips(TooltipsPanel tooltipsPanel) { + // super.attachTooltips(tooltipsPanel); + // tooltipsPanel.attachTooltips(new IFancyTooltip.Basic( + // () -> GuiTextures.INDICATOR_NO_STEAM.get(false), + // () -> List.of(Component.translatable("gtceu.multiblock.large_combustion_engine.obstructed") + // .setStyle(Style.EMPTY.withColor(ChatFormatting.RED))), + // this::isIntakesObstructed, + // () -> null)); + //} @Override public ManagedFieldHolder getFieldHolder() { diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/generator/LargeTurbineMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/generator/LargeTurbineMachine.java index 757ee5ce326..ab91e948d1f 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/generator/LargeTurbineMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/generator/LargeTurbineMachine.java @@ -189,36 +189,36 @@ public boolean canVoidRecipeOutputs(RecipeCapability capability) { // ******* GUI ********// ////////////////////////////////////// - @Override - public void addDisplayText(List textList) { - super.addDisplayText(textList); - if (isFormed()) { - var rotorHolder = getRotorHolder(); - - if (rotorHolder != null && rotorHolder.getRotorEfficiency() > 0) { - textList.add(Component.translatable("gtceu.multiblock.turbine.rotor_speed", - FormattingUtil.formatNumbers(rotorHolder.getRotorSpeed()), - FormattingUtil.formatNumbers(rotorHolder.getMaxRotorHolderSpeed()))); - textList.add(Component.translatable("gtceu.multiblock.turbine.efficiency", - rotorHolder.getTotalEfficiency())); - - long maxProduction = getOverclockVoltage(); - long currentProduction = getCurrentProduction(); - - if (isActive()) { - textList.add(3, Component.translatable("gtceu.multiblock.turbine.energy_per_tick", - FormattingUtil.formatNumbers(currentProduction), - FormattingUtil.formatNumbers(maxProduction))); - } - - int rotorDurability = rotorHolder.getRotorDurabilityPercent(); - if (rotorDurability > MIN_DURABILITY_TO_WARN) { - textList.add(Component.translatable("gtceu.multiblock.turbine.rotor_durability", rotorDurability)); - } else { - textList.add(Component.translatable("gtceu.multiblock.turbine.rotor_durability", rotorDurability) - .setStyle(Style.EMPTY.withColor(ChatFormatting.RED))); - } - } - } - } + //@Override + //public void addDisplayText(List textList) { + // super.addDisplayText(textList); + // if (isFormed()) { + // var rotorHolder = getRotorHolder(); +// + // if (rotorHolder != null && rotorHolder.getRotorEfficiency() > 0) { + // textList.add(Component.translatable("gtceu.multiblock.turbine.rotor_speed", + // FormattingUtil.formatNumbers(rotorHolder.getRotorSpeed()), + // FormattingUtil.formatNumbers(rotorHolder.getMaxRotorHolderSpeed()))); + // textList.add(Component.translatable("gtceu.multiblock.turbine.efficiency", + // rotorHolder.getTotalEfficiency())); +// + // long maxProduction = getOverclockVoltage(); + // long currentProduction = getCurrentProduction(); +// + // if (isActive()) { + // textList.add(3, Component.translatable("gtceu.multiblock.turbine.energy_per_tick", + // FormattingUtil.formatNumbers(currentProduction), + // FormattingUtil.formatNumbers(maxProduction))); + // } +// + // int rotorDurability = rotorHolder.getRotorDurabilityPercent(); + // if (rotorDurability > MIN_DURABILITY_TO_WARN) { + // textList.add(Component.translatable("gtceu.multiblock.turbine.rotor_durability", rotorDurability)); + // } else { + // textList.add(Component.translatable("gtceu.multiblock.turbine.rotor_durability", rotorDurability) + // .setStyle(Style.EMPTY.withColor(ChatFormatting.RED))); + // } + // } + // } + //} } From 664727183cc2a17374a1608d4dd48468d76a757f Mon Sep 17 00:00:00 2001 From: YoungOnion <39562198+YoungOnionMC@users.noreply.github.com> Date: Mon, 22 Dec 2025 01:21:36 -0700 Subject: [PATCH 02/22] blah --- ...CoilWorkableElectricMultiblockMachine.java | 33 ++++++++++++++----- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/CoilWorkableElectricMultiblockMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/CoilWorkableElectricMultiblockMachine.java index 06466eaa1bf..ab97cf75eee 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/CoilWorkableElectricMultiblockMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/CoilWorkableElectricMultiblockMachine.java @@ -9,8 +9,10 @@ import com.gregtechceu.gtceu.api.mui.factory.PosGuiData; import com.gregtechceu.gtceu.api.mui.utils.Alignment; import com.gregtechceu.gtceu.api.mui.utils.Color; +import com.gregtechceu.gtceu.api.mui.value.sync.IntSyncValue; import com.gregtechceu.gtceu.api.mui.value.sync.PanelSyncManager; import com.gregtechceu.gtceu.api.mui.widget.ParentWidget; +import com.gregtechceu.gtceu.api.mui.widgets.ListWidget; import com.gregtechceu.gtceu.api.mui.widgets.SlotGroupWidget; import com.gregtechceu.gtceu.api.mui.widgets.layout.Column; import com.gregtechceu.gtceu.api.mui.widgets.layout.Row; @@ -23,6 +25,7 @@ import com.gregtechceu.gtceu.common.mui.GTGuiTextures; import com.gregtechceu.gtceu.common.mui.GTGuis; import com.lowdragmc.lowdraglib.syncdata.annotation.DescSynced; +import com.lowdragmc.lowdraglib.syncdata.annotation.RequireRerender; import net.minecraft.MethodsReturnNonnullByDefault; import lombok.Getter; @@ -36,8 +39,6 @@ public class CoilWorkableElectricMultiblockMachine extends WorkableElectricMulti @Getter private ICoilType coilType = CoilBlock.CoilType.CUPRONICKEL; - @DescSynced - private int coilTier = coilType.getTier(); public CoilWorkableElectricMultiblockMachine(IMachineBlockEntity holder) { super(holder); @@ -52,7 +53,6 @@ public void onStructureFormed() { var type = getMultiblockState().getMatchContext().get("CoilType"); if (type instanceof ICoilType coil) { this.coilType = coil; - coilTier = coil.getTier(); } } @@ -65,7 +65,10 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet var panel = GTGuis.createPanel(this, 176 + 32, 164 + 36); - UITexture coilTexture = new UITexture.Builder().location(CoilBlock.CoilType.values()[coilTier].getTexture()) + //IntSyncValue coilTierSV = new IntSyncValue(() -> this.coilTier); + //syncManager.syncValue("coil", coilTierSV); + + UITexture coilTexture = new UITexture.Builder().location(CoilBlock.CoilType.values()[0].getTexture()) .imageSize(16, 16).colorType(ColorType.DEFAULT).tiled().build(); //var coilWidget = coilTexture.asWidget().size(4, 16).heightRel(1.0f); @@ -80,14 +83,26 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet .margin(4, 0) .left(3).top(3) .child(new Row() - .child(widget1.size(16, 16)) + .child(widget1.size(15, 16)) .child(new IDrawable.DrawableWidget(GTGuiTextures.MUI_DISPLAY).widthRel(.95f).heightRel(1.0f)) .child(widget2) ) - .child(IKey.dynamic(() -> - GTMultiblockTextUtil.addProgressLine(isFormed, isActive(), getRecipeLogic().getProgress(), getRecipeLogic().getMaxProgress(), getRecipeLogic().getProgressPercent())) - .color(0xffffff) - .asWidget().left(7).top(3)) + .child(new Column() + .widthRel(1) + .crossAxisAlignment(Alignment.CrossAxis.START) + .childPadding(1) + .child(new Rectangle().setColor(0xFF606060).asWidget() + .size(40, 1)) + .child(IKey.dynamic(() -> + GTMultiblockTextUtil.addProgressLine(isFormed, isActive(), getRecipeLogic().getProgress(), getRecipeLogic().getMaxProgress(), getRecipeLogic().getProgressPercent())) + .color(0xffffff) + .asWidget() + ) + .child(GTMultiblockTextUtil.addEnergyTierLine(isFormed, getTier()).color(0xffffff).asWidget()) + .child(GTMultiblockTextUtil.addEnergyUsageLine(isFormed, getEnergyContainer()).color(0xffffff).asWidget()) + .left(20) + ) + ) .child(new Column() .coverChildren() From 57bbd8e940cbe7ec52262af65746b23e588ac53c Mon Sep 17 00:00:00 2001 From: YoungOnion <39562198+YoungOnionMC@users.noreply.github.com> Date: Mon, 5 Jan 2026 10:50:36 -0700 Subject: [PATCH 03/22] some stuff --- ...CoilWorkableElectricMultiblockMachine.java | 2 +- .../gtceu/api/machine/trait/RecipeLogic.java | 1 + .../data/mui/GTMultiblockPanelUtil.java | 37 +++++++++++++++++++ .../gtceu/config/ConfigHolder.java | 5 +++ .../MetaTileEntityMachineRecipeLoader.java | 9 +++++ 5 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/CoilWorkableElectricMultiblockMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/CoilWorkableElectricMultiblockMachine.java index ab97cf75eee..c54592e518e 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/CoilWorkableElectricMultiblockMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/CoilWorkableElectricMultiblockMachine.java @@ -83,7 +83,7 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet .margin(4, 0) .left(3).top(3) .child(new Row() - .child(widget1.size(15, 16)) + .child(widget1) .child(new IDrawable.DrawableWidget(GTGuiTextures.MUI_DISPLAY).widthRel(.95f).heightRel(1.0f)) .child(widget2) ) diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/RecipeLogic.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/RecipeLogic.java index 2a9093f8de3..68bfb560c05 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/RecipeLogic.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/RecipeLogic.java @@ -78,6 +78,7 @@ public enum Status implements StringRepresentable { @Nullable @SaveField @SyncToClient + @Getter private Component waitingReason = null; /** * unsafe, it may not be found from {@link RecipeManager}. Do not index it. diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java new file mode 100644 index 00000000000..0c6538d561c --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java @@ -0,0 +1,37 @@ +package com.gregtechceu.gtceu.common.data.mui; + +import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; +import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; +import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; +import com.gregtechceu.gtceu.api.mui.base.drawable.IDrawable; +import com.gregtechceu.gtceu.api.mui.base.widget.IWidget; +import com.gregtechceu.gtceu.api.mui.widget.EmptyWidget; +import com.gregtechceu.gtceu.api.mui.widget.Widget; +import com.gregtechceu.gtceu.api.mui.widgets.DynamicSyncedWidget; + +public class GTMultiblockPanelUtil { + + private MultiblockControllerMachine controller; + + public GTMultiblockPanelUtil(MultiblockControllerMachine controller) { + this.controller = controller; + } + + public Widget getMainTextPanel() { + return null; + } + + public IWidget getRecipeActionWidget() { + if (controller instanceof IRecipeLogicMachine recipeLogicMachine) { + RecipeLogic rl = recipeLogicMachine.getRecipeLogic(); + DynamicSyncedWidget recipeActionResultWidget = new DynamicSyncedWidget<>(); + + if (rl.isWaiting()) { + var reason = rl.getWaitingReason(); + //recipeActionResultWidget. + //recipeActionResultWidget = rl + } + } + return new EmptyWidget(); + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java b/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java index 81debf0b686..b1ead3484ca 100644 --- a/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java +++ b/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java @@ -25,6 +25,11 @@ public static void init() { } } + void myMethod() { + + } + + @Configurable.ValueUpdateCallback(method = "myMethod") @Configurable public RecipeConfigs recipes = new RecipeConfigs(); @Configurable diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityMachineRecipeLoader.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityMachineRecipeLoader.java index c364c53af52..7b32b8e3e53 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityMachineRecipeLoader.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityMachineRecipeLoader.java @@ -18,6 +18,7 @@ import appeng.core.definitions.AEBlocks; import appeng.core.definitions.AEItems; import appeng.core.definitions.AEParts; +import net.minecraft.world.item.Items; import java.util.Locale; import java.util.function.Consumer; @@ -35,6 +36,14 @@ public class MetaTileEntityMachineRecipeLoader { public static void init(Consumer provider) { + + ASSEMBLER_RECIPES.recipeBuilder("test_drum") + .inputItems(STEEL_DRUM, 2) + .outputItems(Items.DIRT, 3) + .duration((int)SECONDS * 3) + .EUt(400) + .save(provider); + // Reservoir Hatch ASSEMBLER_RECIPES.recipeBuilder("reservoir_hatch") .inputItems(COVER_INFINITE_WATER) From 0ac9b05f0034df18f5de0d366a6e455a3bd0dd9b Mon Sep 17 00:00:00 2001 From: YoungOnion <39562198+YoungOnionMC@users.noreply.github.com> Date: Mon, 5 Jan 2026 11:55:16 -0700 Subject: [PATCH 04/22] more multiblock testing --- ...CoilWorkableElectricMultiblockMachine.java | 7 +++--- .../data/mui/GTMultiblockPanelUtil.java | 25 ++++++++++++++++++- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/CoilWorkableElectricMultiblockMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/CoilWorkableElectricMultiblockMachine.java index c54592e518e..ce555fd340d 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/CoilWorkableElectricMultiblockMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/CoilWorkableElectricMultiblockMachine.java @@ -21,11 +21,10 @@ import com.gregtechceu.gtceu.common.block.CoilBlock; import com.gregtechceu.gtceu.common.data.mui.GTMuiWidgets; +import com.gregtechceu.gtceu.common.data.mui.GTMultiblockPanelUtil; import com.gregtechceu.gtceu.common.data.mui.GTMultiblockTextUtil; import com.gregtechceu.gtceu.common.mui.GTGuiTextures; import com.gregtechceu.gtceu.common.mui.GTGuis; -import com.lowdragmc.lowdraglib.syncdata.annotation.DescSynced; -import com.lowdragmc.lowdraglib.syncdata.annotation.RequireRerender; import net.minecraft.MethodsReturnNonnullByDefault; import lombok.Getter; @@ -65,6 +64,8 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet var panel = GTGuis.createPanel(this, 176 + 32, 164 + 36); + var panelUtil = new GTMultiblockPanelUtil(this); + //IntSyncValue coilTierSV = new IntSyncValue(() -> this.coilTier); //syncManager.syncValue("coil", coilTierSV); @@ -84,7 +85,7 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet .left(3).top(3) .child(new Row() .child(widget1) - .child(new IDrawable.DrawableWidget(GTGuiTextures.MUI_DISPLAY).widthRel(.95f).heightRel(1.0f)) + .child(panelUtil.getMainTextPanel()) .child(widget2) ) .child(new Column() diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java index 0c6538d561c..1565ad73c25 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java @@ -4,10 +4,17 @@ import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; import com.gregtechceu.gtceu.api.mui.base.drawable.IDrawable; +import com.gregtechceu.gtceu.api.mui.base.drawable.IKey; import com.gregtechceu.gtceu.api.mui.base.widget.IWidget; import com.gregtechceu.gtceu.api.mui.widget.EmptyWidget; +import com.gregtechceu.gtceu.api.mui.widget.ParentWidget; +import com.gregtechceu.gtceu.api.mui.widget.ScrollWidget; import com.gregtechceu.gtceu.api.mui.widget.Widget; +import com.gregtechceu.gtceu.api.mui.widget.scroll.ScrollArea; import com.gregtechceu.gtceu.api.mui.widgets.DynamicSyncedWidget; +import com.gregtechceu.gtceu.api.mui.widgets.ListWidget; +import com.gregtechceu.gtceu.api.mui.widgets.ScrollingTextWidget; +import com.gregtechceu.gtceu.common.mui.GTGuiTextures; public class GTMultiblockPanelUtil { @@ -18,7 +25,23 @@ public GTMultiblockPanelUtil(MultiblockControllerMachine controller) { } public Widget getMainTextPanel() { - return null; + + boolean isFormed = controller.isFormed(); + + var parentWidget = new ListWidget<>(); + parentWidget.size(187, 90) + .child(new IDrawable.DrawableWidget(GTGuiTextures.MUI_DISPLAY).widthRel(1.0f).heightRel(1.0f)); + + if (controller instanceof IRecipeLogicMachine rlMachine) { + var recipeLogic = rlMachine.getRecipeLogic(); + boolean isActive = recipeLogic.isActive(); + boolean isWorking = recipeLogic.isWorking(); + + parentWidget.child(IKey.dynamic(() -> + GTMultiblockTextUtil.addProgressLine(isFormed, isActive, recipeLogic.getProgress(), + recipeLogic.getMaxProgress(), recipeLogic.getProgressPercent())).asWidget()); + } + return parentWidget; } public IWidget getRecipeActionWidget() { From 1bf1b568781dbc162c32dbb3aa587638e917dff2 Mon Sep 17 00:00:00 2001 From: YoungOnion <39562198+YoungOnionMC@users.noreply.github.com> Date: Mon, 5 Jan 2026 14:33:15 -0700 Subject: [PATCH 05/22] try to start on dynamic text for the stuff --- ...CoilWorkableElectricMultiblockMachine.java | 61 +- .../WorkableElectricMultiblockMachine.java | 184 +++-- .../gtceu/common/data/mui/GTMuiWidgets.java | 2 +- .../data/mui/GTMultiblockPanelUtil.java | 21 +- .../common/data/mui/GTMultiblockTextUtil.java | 9 +- .../electric/ActiveTransformerMachine.java | 108 ++- .../electric/BedrockOreMinerMachine.java | 90 +-- .../electric/CentralMonitorMachine.java | 699 +++++++++--------- .../multiblock/electric/CleanroomMachine.java | 98 ++- .../electric/FluidDrillMachine.java | 80 +- .../electric/FusionReactorMachine.java | 18 +- .../electric/LargeMinerMachine.java | 101 ++- .../electric/research/DataBankMachine.java | 25 +- .../electric/research/HPCAMachine.java | 132 ++-- .../research/NetworkSwitchMachine.java | 26 +- .../research/ResearchStationMachine.java | 28 +- .../LargeCombustionEngineMachine.java | 81 +- .../generator/LargeTurbineMachine.java | 70 +- .../gtceu/config/ConfigHolder.java | 4 +- .../MetaTileEntityMachineRecipeLoader.java | 5 +- 20 files changed, 874 insertions(+), 968 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/CoilWorkableElectricMultiblockMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/CoilWorkableElectricMultiblockMachine.java index ce555fd340d..b978d0e80b3 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/CoilWorkableElectricMultiblockMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/CoilWorkableElectricMultiblockMachine.java @@ -2,33 +2,25 @@ import com.gregtechceu.gtceu.api.block.ICoilType; import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; -import com.gregtechceu.gtceu.api.machine.feature.IVoidable; -import com.gregtechceu.gtceu.api.mui.base.drawable.IDrawable; -import com.gregtechceu.gtceu.api.mui.base.drawable.IKey; import com.gregtechceu.gtceu.api.mui.drawable.*; import com.gregtechceu.gtceu.api.mui.factory.PosGuiData; import com.gregtechceu.gtceu.api.mui.utils.Alignment; -import com.gregtechceu.gtceu.api.mui.utils.Color; -import com.gregtechceu.gtceu.api.mui.value.sync.IntSyncValue; import com.gregtechceu.gtceu.api.mui.value.sync.PanelSyncManager; import com.gregtechceu.gtceu.api.mui.widget.ParentWidget; -import com.gregtechceu.gtceu.api.mui.widgets.ListWidget; import com.gregtechceu.gtceu.api.mui.widgets.SlotGroupWidget; import com.gregtechceu.gtceu.api.mui.widgets.layout.Column; import com.gregtechceu.gtceu.api.mui.widgets.layout.Row; import com.gregtechceu.gtceu.client.mui.screen.ModularPanel; import com.gregtechceu.gtceu.client.mui.screen.UISettings; import com.gregtechceu.gtceu.common.block.CoilBlock; - import com.gregtechceu.gtceu.common.data.mui.GTMuiWidgets; import com.gregtechceu.gtceu.common.data.mui.GTMultiblockPanelUtil; -import com.gregtechceu.gtceu.common.data.mui.GTMultiblockTextUtil; import com.gregtechceu.gtceu.common.mui.GTGuiTextures; import com.gregtechceu.gtceu.common.mui.GTGuis; + import net.minecraft.MethodsReturnNonnullByDefault; import lombok.Getter; -import net.minecraft.client.renderer.texture.TextureAtlasSprite; import javax.annotation.ParametersAreNonnullByDefault; @@ -61,18 +53,17 @@ public int getCoilTier() { @Override public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISettings settings) { - var panel = GTGuis.createPanel(this, 176 + 32, 164 + 36); var panelUtil = new GTMultiblockPanelUtil(this); - //IntSyncValue coilTierSV = new IntSyncValue(() -> this.coilTier); - //syncManager.syncValue("coil", coilTierSV); + // IntSyncValue coilTierSV = new IntSyncValue(() -> this.coilTier); + // syncManager.syncValue("coil", coilTierSV); UITexture coilTexture = new UITexture.Builder().location(CoilBlock.CoilType.values()[0].getTexture()) .imageSize(16, 16).colorType(ColorType.DEFAULT).tiled().build(); - //var coilWidget = coilTexture.asWidget().size(4, 16).heightRel(1.0f); + // var coilWidget = coilTexture.asWidget().size(4, 16).heightRel(1.0f); var widget1 = coilTexture.asWidget().size(4, 16).heightRel(1.0f); var widget2 = coilTexture.asWidget().size(4, 16).heightRel(1.0f); @@ -83,26 +74,30 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet .heightRel(.45f) .margin(4, 0) .left(3).top(3) - .child(new Row() - .child(widget1) - .child(panelUtil.getMainTextPanel()) - .child(widget2) - ) - .child(new Column() - .widthRel(1) - .crossAxisAlignment(Alignment.CrossAxis.START) - .childPadding(1) - .child(new Rectangle().setColor(0xFF606060).asWidget() - .size(40, 1)) - .child(IKey.dynamic(() -> - GTMultiblockTextUtil.addProgressLine(isFormed, isActive(), getRecipeLogic().getProgress(), getRecipeLogic().getMaxProgress(), getRecipeLogic().getProgressPercent())) - .color(0xffffff) - .asWidget() - ) - .child(GTMultiblockTextUtil.addEnergyTierLine(isFormed, getTier()).color(0xffffff).asWidget()) - .child(GTMultiblockTextUtil.addEnergyUsageLine(isFormed, getEnergyContainer()).color(0xffffff).asWidget()) - .left(20) - ) + .child(new Row() + .child(widget1) + .child(panelUtil.getMainTextPanel()) + .child(widget2)) + .child(new Column() + .widthRel(1) + .crossAxisAlignment(Alignment.CrossAxis.START) + .childPadding(1) + .child(new Rectangle().setColor(0xFF606060).asWidget() + .size(40, 1)) + /* + * .child(IKey.dynamic(() -> + * GTMultiblockTextUtil.addProgressLine(isFormed, isActive(), + * getRecipeLogic().getProgress(), getRecipeLogic().getMaxProgress(), + * getRecipeLogic().getProgressPercent())) + * .color(0xffffff) + * .asWidget() + * ) + */ + // .child(GTMultiblockTextUtil.addEnergyTierLine(isFormed, + // getTier()).color(0xffffff).asWidget()) + // .child(GTMultiblockTextUtil.addEnergyUsageLine(isFormed, + // getEnergyContainer()).color(0xffffff).asWidget()) + .left(20)) ) .child(new Column() diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableElectricMultiblockMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableElectricMultiblockMachine.java index 7fa70fd4b2a..2cf148776a8 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableElectricMultiblockMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableElectricMultiblockMachine.java @@ -2,50 +2,38 @@ import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.capability.IEnergyContainer; -import com.gregtechceu.gtceu.api.capability.IParallelHatch; import com.gregtechceu.gtceu.api.capability.recipe.EURecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.capability.recipe.IRecipeHandler; -import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.fancy.*; import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; -import com.gregtechceu.gtceu.api.machine.feature.IFancyUIMachine; import com.gregtechceu.gtceu.api.machine.feature.IMuiMachine; import com.gregtechceu.gtceu.api.machine.feature.IOverclockMachine; import com.gregtechceu.gtceu.api.machine.feature.ITieredMachine; -import com.gregtechceu.gtceu.api.machine.feature.IVoidable; -import com.gregtechceu.gtceu.api.machine.feature.multiblock.IDisplayUIMachine; -import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiPart; import com.gregtechceu.gtceu.api.misc.EnergyContainerList; import com.gregtechceu.gtceu.api.mui.factory.PosGuiData; import com.gregtechceu.gtceu.api.mui.value.sync.PanelSyncManager; -import com.gregtechceu.gtceu.api.recipe.modifier.RecipeModifierList; import com.gregtechceu.gtceu.client.mui.screen.ModularPanel; import com.gregtechceu.gtceu.client.mui.screen.UISettings; -import com.gregtechceu.gtceu.common.data.GTRecipeModifiers; import com.gregtechceu.gtceu.common.mui.GTGuis; import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; import com.gregtechceu.gtceu.utils.GTUtil; -import com.lowdragmc.lowdraglib.gui.modular.ModularUI; import com.lowdragmc.lowdraglib.gui.widget.*; import net.minecraft.MethodsReturnNonnullByDefault; -import net.minecraft.network.chat.Component; -import net.minecraft.world.entity.player.Player; import lombok.Getter; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import java.util.Objects; import javax.annotation.ParametersAreNonnullByDefault; @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault -public class WorkableElectricMultiblockMachine extends WorkableMultiblockMachine implements IMuiMachine, ITieredMachine, IOverclockMachine { +public class WorkableElectricMultiblockMachine extends WorkableMultiblockMachine + implements IMuiMachine, ITieredMachine, IOverclockMachine { // runtime protected EnergyContainerList energyContainer; @@ -96,91 +84,91 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet return GTGuis.createPanel(this, 176, 164); } - //@Override - //public void addDisplayText(List textList) { - // int numParallels; - // int subtickParallels; - // int batchParallels; - // int totalRuns; - // boolean exact = false; - // if (recipeLogic.isActive() && recipeLogic.getLastRecipe() != null) { - // numParallels = recipeLogic.getLastRecipe().parallels; - // subtickParallels = recipeLogic.getLastRecipe().subtickParallels; - // batchParallels = recipeLogic.getLastRecipe().batchParallels; - // totalRuns = recipeLogic.getLastRecipe().getTotalRuns(); - // exact = true; - // } else { - // numParallels = getParallelHatch() - // .map(IParallelHatch::getCurrentParallel) - // .orElse(0); - // subtickParallels = 0; - // batchParallels = 0; - // totalRuns = 0; - // } -// - // MultiblockDisplayText.builder(textList, isFormed()) - // .setWorkingStatus(recipeLogic.isWorkingEnabled(), recipeLogic.isActive()) - // .addEnergyUsageLine(energyContainer) - // .addEnergyTierLine(tier) - // .addMachineModeLine(getRecipeType(), getRecipeTypes().length > 1) - // .addTotalRunsLine(totalRuns) - // .addParallelsLine(numParallels, exact) - // .addSubtickParallelsLine(subtickParallels) - // .addBatchModeLine(isBatchEnabled(), batchParallels) - // .addWorkingStatusLine() - // .addProgressLine(recipeLogic.getProgress(), recipeLogic.getMaxProgress(), - // recipeLogic.getProgressPercent()) - // .addOutputLines(recipeLogic.getLastRecipe()); - // getDefinition().getAdditionalDisplay().accept(this, textList); - // IDisplayUIMachine.super.addDisplayText(textList); - //} + // @Override + // public void addDisplayText(List textList) { + // int numParallels; + // int subtickParallels; + // int batchParallels; + // int totalRuns; + // boolean exact = false; + // if (recipeLogic.isActive() && recipeLogic.getLastRecipe() != null) { + // numParallels = recipeLogic.getLastRecipe().parallels; + // subtickParallels = recipeLogic.getLastRecipe().subtickParallels; + // batchParallels = recipeLogic.getLastRecipe().batchParallels; + // totalRuns = recipeLogic.getLastRecipe().getTotalRuns(); + // exact = true; + // } else { + // numParallels = getParallelHatch() + // .map(IParallelHatch::getCurrentParallel) + // .orElse(0); + // subtickParallels = 0; + // batchParallels = 0; + // totalRuns = 0; + // } + // + // MultiblockDisplayText.builder(textList, isFormed()) + // .setWorkingStatus(recipeLogic.isWorkingEnabled(), recipeLogic.isActive()) + // .addEnergyUsageLine(energyContainer) + // .addEnergyTierLine(tier) + // .addMachineModeLine(getRecipeType(), getRecipeTypes().length > 1) + // .addTotalRunsLine(totalRuns) + // .addParallelsLine(numParallels, exact) + // .addSubtickParallelsLine(subtickParallels) + // .addBatchModeLine(isBatchEnabled(), batchParallels) + // .addWorkingStatusLine() + // .addProgressLine(recipeLogic.getProgress(), recipeLogic.getMaxProgress(), + // recipeLogic.getProgressPercent()) + // .addOutputLines(recipeLogic.getLastRecipe()); + // getDefinition().getAdditionalDisplay().accept(this, textList); + // IDisplayUIMachine.super.addDisplayText(textList); + // } - //@Override - //public Widget createUIWidget() { - // var group = new WidgetGroup(0, 0, 182 + 8, 117 + 8); - // group.addWidget(new DraggableScrollableWidgetGroup(4, 4, 182, 117).setBackground(getScreenTexture()) - // .addWidget(new LabelWidget(4, 5, self().getBlockState().getBlock().getDescriptionId())) - // .addWidget(new ComponentPanelWidget(4, 17, this::addDisplayText) - // .textSupplier(this.getLevel().isClientSide ? null : this::addDisplayText) - // .setMaxWidthLimit(200) - // .clickHandler(this::handleDisplayClick))); - // group.setBackground(GuiTextures.BACKGROUND_INVERSE); - // return group; - //} -// - //@Override - //public ModularUI createUI(Player entityPlayer) { - // return new ModularUI(198, 208, this, entityPlayer).widget(new FancyMachineUIWidget(this, 198, 208)); - //} -// - //@Override - //public List getSubTabs() { - // return getParts().stream().filter(Objects::nonNull).map(IFancyUIProvider.class::cast).toList(); - //} -// - //@Override - //public void attachConfigurators(ConfiguratorPanel configuratorPanel) { - // if (getDefinition().getRecipeModifier() instanceof RecipeModifierList list && Arrays.stream(list.getModifiers()) - // .anyMatch(modifier -> modifier == GTRecipeModifiers.BATCH_MODE)) { - // configuratorPanel.attachConfigurators(new IFancyConfiguratorButton.Toggle( - // GuiTextures.BUTTON_BATCH.getSubTexture(0, 0, 1, 0.5), - // GuiTextures.BUTTON_BATCH.getSubTexture(0, 0.5, 1, 0.5), - // this::isBatchEnabled, - // (cd, p) -> setBatchEnabled(p)) - // .setTooltipsSupplier( - // p -> List.of( - // Component.translatable("gtceu.machine.batch_" + (p ? "enabled" : "disabled"))))); - // } -// - // IFancyUIMachine.super.attachConfigurators(configuratorPanel); - //} -// - //@Override - //public void attachTooltips(TooltipsPanel tooltipsPanel) { - // for (IMultiPart part : getParts()) { - // part.attachFancyTooltipsToController(this, tooltipsPanel); - // } - //} + // @Override + // public Widget createUIWidget() { + // var group = new WidgetGroup(0, 0, 182 + 8, 117 + 8); + // group.addWidget(new DraggableScrollableWidgetGroup(4, 4, 182, 117).setBackground(getScreenTexture()) + // .addWidget(new LabelWidget(4, 5, self().getBlockState().getBlock().getDescriptionId())) + // .addWidget(new ComponentPanelWidget(4, 17, this::addDisplayText) + // .textSupplier(this.getLevel().isClientSide ? null : this::addDisplayText) + // .setMaxWidthLimit(200) + // .clickHandler(this::handleDisplayClick))); + // group.setBackground(GuiTextures.BACKGROUND_INVERSE); + // return group; + // } + // + // @Override + // public ModularUI createUI(Player entityPlayer) { + // return new ModularUI(198, 208, this, entityPlayer).widget(new FancyMachineUIWidget(this, 198, 208)); + // } + // + // @Override + // public List getSubTabs() { + // return getParts().stream().filter(Objects::nonNull).map(IFancyUIProvider.class::cast).toList(); + // } + // + // @Override + // public void attachConfigurators(ConfiguratorPanel configuratorPanel) { + // if (getDefinition().getRecipeModifier() instanceof RecipeModifierList list && Arrays.stream(list.getModifiers()) + // .anyMatch(modifier -> modifier == GTRecipeModifiers.BATCH_MODE)) { + // configuratorPanel.attachConfigurators(new IFancyConfiguratorButton.Toggle( + // GuiTextures.BUTTON_BATCH.getSubTexture(0, 0, 1, 0.5), + // GuiTextures.BUTTON_BATCH.getSubTexture(0, 0.5, 1, 0.5), + // this::isBatchEnabled, + // (cd, p) -> setBatchEnabled(p)) + // .setTooltipsSupplier( + // p -> List.of( + // Component.translatable("gtceu.machine.batch_" + (p ? "enabled" : "disabled"))))); + // } + // + // IFancyUIMachine.super.attachConfigurators(configuratorPanel); + // } + // + // @Override + // public void attachTooltips(TooltipsPanel tooltipsPanel) { + // for (IMultiPart part : getParts()) { + // part.attachFancyTooltipsToController(this, tooltipsPanel); + // } + // } ////////////////////////////////////// // ******** OVERCLOCK *********// diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMuiWidgets.java b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMuiWidgets.java index e806f09c15a..e41ca9ec2db 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMuiWidgets.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMuiWidgets.java @@ -137,7 +137,7 @@ public static ItemSlot createBatterySlot(IItemHandler itemHandler, int slot, Pan public static ToggleButton createVoidingButton(IVoidable machine, PanelSyncManager syncManager) { // TODO pull in voiding mode pr return new ToggleButton(); - //EnumSyncValue voidMode = new EnumSyncValue(IVoidable.VoidingMode.class, machine.) + // EnumSyncValue voidMode = new EnumSyncValue(IVoidable.VoidingMode.class, machine.) } public static ToggleButton createAutoOutputItemButton(IAutoOutputItem machine, PanelSyncManager syncManager) { diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java index 1565ad73c25..51c1c062b37 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java @@ -8,12 +8,9 @@ import com.gregtechceu.gtceu.api.mui.base.widget.IWidget; import com.gregtechceu.gtceu.api.mui.widget.EmptyWidget; import com.gregtechceu.gtceu.api.mui.widget.ParentWidget; -import com.gregtechceu.gtceu.api.mui.widget.ScrollWidget; import com.gregtechceu.gtceu.api.mui.widget.Widget; -import com.gregtechceu.gtceu.api.mui.widget.scroll.ScrollArea; import com.gregtechceu.gtceu.api.mui.widgets.DynamicSyncedWidget; import com.gregtechceu.gtceu.api.mui.widgets.ListWidget; -import com.gregtechceu.gtceu.api.mui.widgets.ScrollingTextWidget; import com.gregtechceu.gtceu.common.mui.GTGuiTextures; public class GTMultiblockPanelUtil { @@ -25,10 +22,11 @@ public GTMultiblockPanelUtil(MultiblockControllerMachine controller) { } public Widget getMainTextPanel() { - boolean isFormed = controller.isFormed(); - var parentWidget = new ListWidget<>(); + var parentWidget = new ParentWidget<>(); + var listWidget = new ListWidget<>() + .coverChildren(); parentWidget.size(187, 90) .child(new IDrawable.DrawableWidget(GTGuiTextures.MUI_DISPLAY).widthRel(1.0f).heightRel(1.0f)); @@ -37,10 +35,13 @@ public Widget getMainTextPanel() { boolean isActive = recipeLogic.isActive(); boolean isWorking = recipeLogic.isWorking(); - parentWidget.child(IKey.dynamic(() -> - GTMultiblockTextUtil.addProgressLine(isFormed, isActive, recipeLogic.getProgress(), - recipeLogic.getMaxProgress(), recipeLogic.getProgressPercent())).asWidget()); + listWidget.child(IKey + .dynamic(() -> GTMultiblockTextUtil.addProgressLine(isFormed, isActive, recipeLogic.getProgress(), + recipeLogic.getMaxProgress(), recipeLogic.getProgressPercent())) + .asWidget() + .tooltipAutoUpdate(true)); } + parentWidget.child(listWidget.left(3).top(3)); return parentWidget; } @@ -51,8 +52,8 @@ public IWidget getRecipeActionWidget() { if (rl.isWaiting()) { var reason = rl.getWaitingReason(); - //recipeActionResultWidget. - //recipeActionResultWidget = rl + // recipeActionResultWidget. + // recipeActionResultWidget = rl } } return new EmptyWidget(); diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockTextUtil.java b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockTextUtil.java index 48ccebdb957..7e44a4f2f0a 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockTextUtil.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockTextUtil.java @@ -5,6 +5,7 @@ import com.gregtechceu.gtceu.api.mui.base.drawable.IKey; import com.gregtechceu.gtceu.utils.FormattingUtil; import com.gregtechceu.gtceu.utils.GTUtil; + import net.minecraft.ChatFormatting; import net.minecraft.network.chat.CommonComponents; import net.minecraft.network.chat.Component; @@ -34,8 +35,7 @@ public static IKey addEnergyUsageLine(boolean formed, IEnergyContainer energyCon } public static IKey addEnergyTierLine(boolean formed, int tier) { - - if(!formed || tier < GTValues.ULV || tier > GTValues.MAX) + if (!formed || tier < GTValues.ULV || tier > GTValues.MAX) return IKey.EMPTY; Component voltageName = Component.literal(GTValues.VNF[tier]); @@ -48,7 +48,8 @@ public static IKey addEnergyTierLine(boolean formed, int tier) { .withStyle(style -> style.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverText)))); } - public static Component addProgressLine(boolean formed, boolean active, double currentDuration, double maxDuration, double progressPercent) { + public static Component addProgressLine(boolean formed, boolean active, double currentDuration, double maxDuration, + double progressPercent) { if (!formed || !active) return CommonComponents.EMPTY; @@ -59,6 +60,4 @@ public static Component addProgressLine(boolean formed, boolean active, double c String.format("%.2f", (float) currentInSec), String.format("%.2f", (float) maxInSec), currentProgress); } - - } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/ActiveTransformerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/ActiveTransformerMachine.java index 82aa0ad977a..1f573d8b1a6 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/ActiveTransformerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/ActiveTransformerMachine.java @@ -4,14 +4,10 @@ import com.gregtechceu.gtceu.api.capability.IEnergyContainer; import com.gregtechceu.gtceu.api.capability.recipe.EURecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.IO; -import com.gregtechceu.gtceu.api.gui.GuiTextures; -import com.gregtechceu.gtceu.api.gui.fancy.FancyMachineUIWidget; import com.gregtechceu.gtceu.api.machine.ConditionalSubscriptionHandler; import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.feature.IExplosionMachine; -import com.gregtechceu.gtceu.api.machine.feature.IFancyUIMachine; -import com.gregtechceu.gtceu.api.machine.feature.multiblock.IDisplayUIMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiPart; import com.gregtechceu.gtceu.api.machine.multiblock.PartAbility; import com.gregtechceu.gtceu.api.machine.multiblock.WorkableElectricMultiblockMachine; @@ -19,13 +15,9 @@ import com.gregtechceu.gtceu.api.misc.EnergyContainerList; import com.gregtechceu.gtceu.api.pattern.TraceabilityPredicate; import com.gregtechceu.gtceu.config.ConfigHolder; -import com.gregtechceu.gtceu.utils.FormattingUtil; -import com.lowdragmc.lowdraglib.gui.modular.ModularUI; import com.lowdragmc.lowdraglib.gui.widget.*; -import net.minecraft.network.chat.Component; -import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.block.Block; import it.unimi.dsi.fastutil.longs.Long2ObjectMap; @@ -163,54 +155,54 @@ public static TraceabilityPredicate getHatchPredicates() { .or(abilities(PartAbility.OUTPUT_LASER).setPreviewCount(1)); } - //@Override - //public void addDisplayText(List textList) { - // // super.addDisplayText(textList); idek what it does stop doing what you do for a minute pls - // // Assume That the Structure is ALWAYS formed, and has at least 1 In and 1 Out, there is never a case where this - // // does not occur. - // if (isFormed()) { - // if (!isWorkingEnabled()) { - // textList.add(Component.translatable("gtceu.multiblock.work_paused")); - // } else if (isActive()) { - // textList.add(Component.translatable("gtceu.multiblock.running")); - // textList.add(Component - // .translatable("gtceu.multiblock.active_transformer.max_input", - // FormattingUtil.formatNumbers( - // Math.abs(powerInput.getInputVoltage() * powerInput.getInputAmperage())))); - // textList.add(Component - // .translatable("gtceu.multiblock.active_transformer.max_output", - // FormattingUtil.formatNumbers( - // Math.abs(powerOutput.getOutputVoltage() * powerOutput.getOutputAmperage())))); - // textList.add(Component - // .translatable("gtceu.multiblock.active_transformer.average_in", - // FormattingUtil.formatNumbers(Math.abs(powerInput.getInputPerSec() / 20)))); - // textList.add(Component - // .translatable("gtceu.multiblock.active_transformer.average_out", - // FormattingUtil.formatNumbers(Math.abs(powerOutput.getOutputPerSec() / 20)))); - // if (!ConfigHolder.INSTANCE.machines.harmlessActiveTransformers) { - // textList.add(Component - // .translatable("gtceu.multiblock.active_transformer.danger_enabled")); - // } - // } else { - // textList.add(Component.translatable("gtceu.multiblock.idling")); - // } - // } - //} -// - //@Override - //public @NotNull Widget createUIWidget() { - // var group = new WidgetGroup(0, 0, 182 + 8, 117 + 8); - // group.addWidget(new DraggableScrollableWidgetGroup(4, 4, 182, 117).setBackground(getScreenTexture()) - // .addWidget(new LabelWidget(4, 5, self().getBlockState().getBlock().getDescriptionId())) - // .addWidget(new ComponentPanelWidget(4, 17, this::addDisplayText) - // .setMaxWidthLimit(150) - // .clickHandler(this::handleDisplayClick))); - // group.setBackground(GuiTextures.BACKGROUND_INVERSE); - // return group; - //} - - //@Override - //public @NotNull ModularUI createUI(@NotNull Player entityPlayer) { - // return new ModularUI(198, 208, this, entityPlayer).widget(new FancyMachineUIWidget(this, 198, 208)); - //} + // @Override + // public void addDisplayText(List textList) { + // // super.addDisplayText(textList); idek what it does stop doing what you do for a minute pls + // // Assume That the Structure is ALWAYS formed, and has at least 1 In and 1 Out, there is never a case where this + // // does not occur. + // if (isFormed()) { + // if (!isWorkingEnabled()) { + // textList.add(Component.translatable("gtceu.multiblock.work_paused")); + // } else if (isActive()) { + // textList.add(Component.translatable("gtceu.multiblock.running")); + // textList.add(Component + // .translatable("gtceu.multiblock.active_transformer.max_input", + // FormattingUtil.formatNumbers( + // Math.abs(powerInput.getInputVoltage() * powerInput.getInputAmperage())))); + // textList.add(Component + // .translatable("gtceu.multiblock.active_transformer.max_output", + // FormattingUtil.formatNumbers( + // Math.abs(powerOutput.getOutputVoltage() * powerOutput.getOutputAmperage())))); + // textList.add(Component + // .translatable("gtceu.multiblock.active_transformer.average_in", + // FormattingUtil.formatNumbers(Math.abs(powerInput.getInputPerSec() / 20)))); + // textList.add(Component + // .translatable("gtceu.multiblock.active_transformer.average_out", + // FormattingUtil.formatNumbers(Math.abs(powerOutput.getOutputPerSec() / 20)))); + // if (!ConfigHolder.INSTANCE.machines.harmlessActiveTransformers) { + // textList.add(Component + // .translatable("gtceu.multiblock.active_transformer.danger_enabled")); + // } + // } else { + // textList.add(Component.translatable("gtceu.multiblock.idling")); + // } + // } + // } + // + // @Override + // public @NotNull Widget createUIWidget() { + // var group = new WidgetGroup(0, 0, 182 + 8, 117 + 8); + // group.addWidget(new DraggableScrollableWidgetGroup(4, 4, 182, 117).setBackground(getScreenTexture()) + // .addWidget(new LabelWidget(4, 5, self().getBlockState().getBlock().getDescriptionId())) + // .addWidget(new ComponentPanelWidget(4, 17, this::addDisplayText) + // .setMaxWidthLimit(150) + // .clickHandler(this::handleDisplayClick))); + // group.setBackground(GuiTextures.BACKGROUND_INVERSE); + // return group; + // } + + // @Override + // public @NotNull ModularUI createUI(@NotNull Player entityPlayer) { + // return new ModularUI(198, 208, this, entityPlayer).widget(new FancyMachineUIWidget(this, 198, 208)); + // } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/BedrockOreMinerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/BedrockOreMinerMachine.java index 1d96208dc89..817bfc78a5d 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/BedrockOreMinerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/BedrockOreMinerMachine.java @@ -6,7 +6,6 @@ import com.gregtechceu.gtceu.api.capability.recipe.EURecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.data.tag.TagPrefix; -import com.gregtechceu.gtceu.api.data.worldgen.bedrockore.WeightedMaterial; import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.feature.ITieredMachine; import com.gregtechceu.gtceu.api.machine.multiblock.WorkableElectricMultiblockMachine; @@ -16,21 +15,14 @@ import com.gregtechceu.gtceu.common.data.GTMaterialBlocks; import com.gregtechceu.gtceu.common.data.GTMaterials; import com.gregtechceu.gtceu.common.machine.trait.BedrockOreMinerLogic; -import com.gregtechceu.gtceu.utils.FormattingUtil; import com.gregtechceu.gtceu.utils.GTUtil; -import net.minecraft.ChatFormatting; import net.minecraft.MethodsReturnNonnullByDefault; -import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.HoverEvent; -import net.minecraft.network.chat.Style; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.Block; import lombok.Getter; -import java.util.List; - import javax.annotation.ParametersAreNonnullByDefault; @ParametersAreNonnullByDefault @@ -63,47 +55,47 @@ public int getEnergyTier() { return Math.min(this.tier + 1, Math.max(this.tier, GTUtil.getFloorTierByVoltage(energyCont.getInputVoltage()))); } - //@Override - //public void addDisplayText(List textList) { - // if (isFormed()) { - // int energyContainer = getEnergyTier(); - // long maxVoltage = GTValues.V[energyContainer]; - // String voltageName = GTValues.VNF[energyContainer]; - // textList.add(Component.translatable("gtceu.multiblock.max_energy_per_tick", maxVoltage, voltageName)); -// - // if (getRecipeLogic().getVeinMaterials() != null) { - // // Ore names - // textList.add(Component.translatable("gtceu.multiblock.ore_rig.drilled_ores_list") - // .withStyle(ChatFormatting.GREEN)); - // List drilledOres = getRecipeLogic().getVeinMaterials(); - // for (var entry : drilledOres) { - // Component fluidInfo = entry.material().getLocalizedName().withStyle(ChatFormatting.GREEN); - // textList.add(Component.translatable("gtceu.multiblock.ore_rig.drilled_ore_entry", fluidInfo) - // .withStyle(ChatFormatting.GRAY)); - // } -// - // // Ore amount - // Component amountInfo = Component.literal(FormattingUtil.formatNumbers( - // getRecipeLogic().getOreToProduce() * 20L / BedrockOreMinerLogic.MAX_PROGRESS) + - // "/s").withStyle(ChatFormatting.BLUE); - // textList.add(Component.translatable("gtceu.multiblock.ore_rig.ore_amount", amountInfo) - // .withStyle(ChatFormatting.GRAY)); - // } else { - // Component noOre = Component.translatable("gtceu.multiblock.fluid_rig.no_fluid_in_area") - // .withStyle(ChatFormatting.RED); - // textList.add(Component.translatable("gtceu.multiblock.ore_rig.drilled_ores_list") - // .withStyle(ChatFormatting.GREEN)); - // textList.add(Component.translatable("gtceu.multiblock.ore_rig.drilled_ore_entry", noOre) - // .withStyle(ChatFormatting.GRAY)); - // } - // } else { - // Component tooltip = Component.translatable("gtceu.multiblock.invalid_structure.tooltip") - // .withStyle(ChatFormatting.GRAY); - // textList.add(Component.translatable("gtceu.multiblock.invalid_structure") - // .withStyle(Style.EMPTY.withColor(ChatFormatting.RED) - // .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, tooltip)))); - // } - //} + // @Override + // public void addDisplayText(List textList) { + // if (isFormed()) { + // int energyContainer = getEnergyTier(); + // long maxVoltage = GTValues.V[energyContainer]; + // String voltageName = GTValues.VNF[energyContainer]; + // textList.add(Component.translatable("gtceu.multiblock.max_energy_per_tick", maxVoltage, voltageName)); + // + // if (getRecipeLogic().getVeinMaterials() != null) { + // // Ore names + // textList.add(Component.translatable("gtceu.multiblock.ore_rig.drilled_ores_list") + // .withStyle(ChatFormatting.GREEN)); + // List drilledOres = getRecipeLogic().getVeinMaterials(); + // for (var entry : drilledOres) { + // Component fluidInfo = entry.material().getLocalizedName().withStyle(ChatFormatting.GREEN); + // textList.add(Component.translatable("gtceu.multiblock.ore_rig.drilled_ore_entry", fluidInfo) + // .withStyle(ChatFormatting.GRAY)); + // } + // + // // Ore amount + // Component amountInfo = Component.literal(FormattingUtil.formatNumbers( + // getRecipeLogic().getOreToProduce() * 20L / BedrockOreMinerLogic.MAX_PROGRESS) + + // "/s").withStyle(ChatFormatting.BLUE); + // textList.add(Component.translatable("gtceu.multiblock.ore_rig.ore_amount", amountInfo) + // .withStyle(ChatFormatting.GRAY)); + // } else { + // Component noOre = Component.translatable("gtceu.multiblock.fluid_rig.no_fluid_in_area") + // .withStyle(ChatFormatting.RED); + // textList.add(Component.translatable("gtceu.multiblock.ore_rig.drilled_ores_list") + // .withStyle(ChatFormatting.GREEN)); + // textList.add(Component.translatable("gtceu.multiblock.ore_rig.drilled_ore_entry", noOre) + // .withStyle(ChatFormatting.GRAY)); + // } + // } else { + // Component tooltip = Component.translatable("gtceu.multiblock.invalid_structure.tooltip") + // .withStyle(ChatFormatting.GRAY); + // textList.add(Component.translatable("gtceu.multiblock.invalid_structure") + // .withStyle(Style.EMPTY.withColor(ChatFormatting.RED) + // .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, tooltip)))); + // } + // } public static int getDepletionChance(int tier) { if (tier == GTValues.MV) diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CentralMonitorMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CentralMonitorMachine.java index bdff16bbc4a..8ba65b88c46 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CentralMonitorMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CentralMonitorMachine.java @@ -6,15 +6,12 @@ import com.gregtechceu.gtceu.api.capability.IMonitorComponent; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.gui.GuiTextures; -import com.gregtechceu.gtceu.api.gui.widget.IntInputWidget; -import com.gregtechceu.gtceu.api.gui.widget.SlotWidget; import com.gregtechceu.gtceu.api.item.IComponentItem; import com.gregtechceu.gtceu.api.item.component.IItemComponent; import com.gregtechceu.gtceu.api.item.component.IMonitorModuleItem; import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.feature.IDataInfoProvider; import com.gregtechceu.gtceu.api.machine.feature.IMachineLife; -import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockDisplayText; import com.gregtechceu.gtceu.api.machine.multiblock.PartAbility; import com.gregtechceu.gtceu.api.machine.multiblock.WorkableElectricMultiblockMachine; import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; @@ -28,12 +25,9 @@ import com.gregtechceu.gtceu.common.machine.trait.CentralMonitorLogic; import com.gregtechceu.gtceu.common.network.GTNetwork; import com.gregtechceu.gtceu.common.network.packets.SCPacketMonitorGroupNBTChange; -import com.gregtechceu.gtceu.data.lang.LangHandler; import com.gregtechceu.gtceu.syncsystem.annotations.RerenderOnChanged; import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; -import com.gregtechceu.gtceu.utils.GTStringUtils; -import com.gregtechceu.gtceu.utils.GTUtil; import com.lowdragmc.lowdraglib.gui.texture.*; import com.lowdragmc.lowdraglib.gui.widget.*; @@ -42,11 +36,9 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.network.chat.Component; -import net.minecraft.util.Mth; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; -import net.minecraftforge.items.IItemHandler; import lombok.Getter; import org.jetbrains.annotations.NotNull; @@ -55,7 +47,6 @@ import java.awt.*; import java.util.*; import java.util.List; -import java.util.function.Consumer; import java.util.stream.Stream; import javax.annotation.ParametersAreNonnullByDefault; @@ -309,351 +300,351 @@ private boolean isInAnyGroup(IMonitorComponent component) { return monitorGroups.stream().anyMatch(group -> group.contains(component.getPos())); } - //@Override - //public void addDisplayText(List textList) { - // MultiblockDisplayText.builder(textList, isFormed()) - // .addWorkingStatusLine(); - // getDefinition().getAdditionalDisplay().accept(this, textList); - //} -// - //@Override - //public Widget createUIWidget() { - // updateStructureDimensions(); - // selectedComponents.clear(); - // WidgetGroup builder = (WidgetGroup) super.createUIWidget(); -// - // WidgetGroup main = new WidgetGroup(); - // DraggableScrollableWidgetGroup componentSelection = new DraggableScrollableWidgetGroup(0, 10, 200, 110); - // main.addWidget(componentSelection); - // WidgetGroup options = new WidgetGroup(-100, 20, 60, 20); - // WidgetGroup groupConfig = new WidgetGroup(10, 30, 100, 100); - // groupConfig.setVisible(false); -// - // ButtonWidget infoWidget = new ButtonWidget(200, 10, 20, 20, null); - // infoWidget.setButtonTexture(GuiTextures.INFO_ICON); - // infoWidget.setHoverTooltips( - // GTStringUtils.toImmutable(LangHandler.getSingleOrMultiLang("gtceu.central_monitor.info_tooltip"))); - // builder.addWidget(infoWidget); - // List configGroup = new ArrayList<>(); - // configGroup.add(null); -// - // Consumer openGroupConfig = (group) -> { - // configGroup.set(0, group); - // if (group == null) { - // main.setVisible(true); - // groupConfig.setVisible(false); - // return; - // } - // groupConfig.clearAllWidgets(); - // groupConfig.addWidget(new LabelWidget(0, 5, () -> { - // String currentName = ""; - // if (configGroup.get(0) != null) { - // currentName = configGroup.get(0).getName(); - // } - // return Component.translatable("gtceu.central_monitor.gui.currently_editing", currentName).getString(); - // })); - // for (int i = 0; i < 8; i++) { - // SlotWidget slot = new SlotWidget(group.getPlaceholderSlotsHandler(), i, -38, 16 * i + 46); - // slot.setHoverTooltips(GTStringUtils - // .toImmutable(LangHandler.getMultiLang("gtceu.gui.computer_monitor_cover.slot_tooltip", i + 1))); - // groupConfig.addWidget(slot); - // } - // SlotWidget slot = new SlotWidget( - // group.getItemStackHandler(), 0, - // 0, 20); - // WidgetGroup itemUI = new WidgetGroup(40, 20, 100, 100); - // Runnable changeListener = () -> { - // if (slot.getLastItem().is(slot.getItem().getItem())) return; - // itemUI.clearAllWidgets(); - // if (slot.getItem().getItem() instanceof IComponentItem item) { - // for (IItemComponent component : item.getComponents()) { - // if (component instanceof IMonitorModuleItem module) { - // itemUI.addWidget(module.createUIWidget(slot.getItem(), this, group)); - // } - // } - // } - // }; - // slot.setChangeListener(changeListener); - // changeListener.run(); - // groupConfig.addWidget(itemUI); - // groupConfig.addWidget(slot); - // main.setVisible(false); - // groupConfig.setVisible(true); - // }; - // builder.addWidget(groupConfig); - // DraggableScrollableWidgetGroup groupList = new DraggableScrollableWidgetGroup(-100, 50, 70, 80); -// - // List>>> imageButtons = new ArrayList<>(); - // Map rightClickCallbacks = new HashMap<>(); - // int[] dataSlot = new int[2]; // list to be able to modify it in lambdas - // dataSlot[0] = 1; // the slot (index starts from 1) - // dataSlot[1] = 9; // amount of slots - // IntInputWidget dataSlotInput = new IntInputWidget(120, 20, 60, -20, () -> dataSlot[0], - // n -> dataSlot[0] = Mth.clamp(n, 1, dataSlot[1])); - // dataSlotInput.setVisible(false); - // builder.addWidget(dataSlotInput); -// - // Consumer addGroupToList = group -> { - // ButtonWidget label = new ButtonWidget(20, groupList.widgets.size() * 15 + 5, 60, 10, null); - // TextTexture text = new TextTexture(group.getName()); - // text.setType(TextTexture.TextType.LEFT); - // label.setButtonTexture(text); - // label.setOnPressCallback(click -> { - // group.getRelativePositions().forEach(pos -> { - // BlockPos rel = toRelative(pos); - // if (imageButtons.size() - 1 < rel.getY()) return; - // if (imageButtons.get(rel.getY()).size() - 1 < rel.getX()) return; - // imageButtons.get(rel.getY()).get(rel.getX()).accept(null); - // }); - // if (group.getTargetRaw() != null) { - // rightClickCallbacks.getOrDefault(group.getTargetRaw(), () -> {}).run(); - // } - // }); - // groupList.addWidget(label); -// - // ButtonWidget configButton = new ButtonWidget( - // 0, label.getSelfPositionY() - 3, - // 16, 16, - // GuiTextures.IO_CONFIG_COVER_SETTINGS, - // click -> { - // if (configGroup.get(0) == null) { - // openGroupConfig.accept(group); - // } else { - // openGroupConfig.accept(null); - // } - // }); - // groupList.addWidget(configButton); - // }; -// - // monitorGroups.forEach(addGroupToList); - // builder.addWidget(groupList); - // main.addWidget(options); - // ButtonWidget removeFromGroupButton = new ButtonWidget(0, 0, 60, 20, null); - // removeFromGroupButton.setButtonTexture(new TextTexture("gtceu.central_monitor.gui.remove_from_group")); - // removeFromGroupButton.setVisible(false); - // ButtonWidget setTargetButton = new ButtonWidget(0, 15, 60, 20, null); - // setTargetButton.setButtonTexture(new TextTexture("gtceu.central_monitor.gui.set_target")); - // setTargetButton.setVisible(false); - // ButtonWidget createGroupButton = new ButtonWidget(0, 0, 60, 20, null); - // createGroupButton.setOnPressCallback(click -> { - // MonitorGroup group = new MonitorGroup( - // Component.translatable("gtceu.gui.central_monitor.group_default_name", monitorGroups.size() + 1) - // .getString()); - // for (IMonitorComponent component : selectedComponents) { - // if (isInAnyGroup(component)) return; - // group.add(component.getPos()); - // } - // monitorGroups.add(group); - // addGroupToList.accept(group); -// - // createGroupButton.setVisible(false); - // removeFromGroupButton.setVisible(true); - // Iterator it = selectedComponents.iterator(); - // while (it.hasNext()) { - // IMonitorComponent c = it.next(); - // BlockPos rel = toRelative(c.getPos()); - // imageButtons.get(rel.getY()).get(rel.getX()).accept(it); - // } - // if (!selectedTargets.isEmpty()) { - // rightClickCallbacks.getOrDefault(selectedTargets.get(0).getPos(), () -> {}).run(); - // } - // }); - // setTargetButton.setOnPressCallback(click -> { - // MonitorGroup group = null; - // for (MonitorGroup group2 : monitorGroups) { - // for (IMonitorComponent component : selectedComponents) { - // if (group2.contains(component.getPos())) { - // group = group2; - // break; - // } - // } - // if (group != null) break; - // } - // if (group == null) return; - // if (selectedTargets.isEmpty()) group.setTarget(null); - // else { - // group.setTarget(selectedTargets.get(0).getPos()); - // group.setDataSlot(dataSlot[0] - 1); - // } - // }); - // removeFromGroupButton.setOnPressCallback(click -> { - // for (MonitorGroup group : monitorGroups) { - // for (IMonitorComponent component : selectedComponents) group.remove(component.getPos()); - // } - // Iterator itg = monitorGroups.iterator(); - // while (itg.hasNext()) { - // MonitorGroup group = itg.next(); - // if (group.isEmpty()) { - // clearInventory(group.getItemStackHandler()); - // clearInventory(group.getPlaceholderSlotsHandler()); - // itg.remove(); - // } - // } - // groupList.clearAllWidgets(); - // monitorGroups.forEach(addGroupToList); -// - // removeFromGroupButton.setVisible(false); - // createGroupButton.setVisible(true); - // Iterator it = selectedComponents.iterator(); - // while (it.hasNext()) { - // IMonitorComponent c = it.next(); - // BlockPos rel = toRelative(c.getPos()); - // if (imageButtons.size() - 1 < rel.getY()) continue; - // if (imageButtons.get(rel.getY()).size() - 1 < rel.getX()) continue; - // imageButtons.get(rel.getY()).get(rel.getX()).accept(it); - // } - // if (!selectedTargets.isEmpty()) { - // rightClickCallbacks.getOrDefault(selectedTargets.get(0).getPos(), () -> {}).run(); - // } - // }); - // createGroupButton.setButtonTexture(new TextTexture("gtceu.central_monitor.gui.create_group")); - // createGroupButton.setVisible(false); - // options.addWidget(removeFromGroupButton); - // options.addWidget(createGroupButton); - // options.addWidget(setTargetButton); - // int startX = 20; - // int startY = 30; - // for (int row = 0; row <= downDist + upDist; row++) { - // imageButtons.add(new ArrayList<>()); - // for (int col = 0; col <= leftDist + rightDist; col++) { - // IGuiTexture texture = getComponentTexture(row, col); - // GuiTextureGroup textures = new GuiTextureGroup(texture, new ColorBorderTexture(2, 0xFFFFFF)); - // IMonitorComponent component = getComponent(row, col); - // if (component == null) { - // GTUtil.getLast(imageButtons).add(it -> {}); - // continue; - // } - // ButtonWidget img = new ButtonWidget(startX + (16 * col), startY + (16 * row), 16, 16, textures, null); - // Consumer> callback = (it) -> { - // if (!component.isMonitor()) return; - // if (selectedComponents.contains(component)) { - // if (it == null) { - // selectedComponents.remove(component); - // } else { - // it.remove(); - // } -// - // if (!selectedTargets.isEmpty() && selectedTargets.get(0) == component) { - // ColorRectTexture rect = new ColorRectTexture(Color.BLUE); - // textures.setTextures(rect, texture); - // } else { - // textures.setTextures(texture); - // } -// - // createGroupButton.setVisible(selectedComponents.stream().noneMatch(this::isInAnyGroup)); - // removeFromGroupButton.setVisible(selectedComponents.stream().allMatch(this::isInAnyGroup)); - // setTargetButton.setVisible(removeFromGroupButton.isVisible()); -// - // if (selectedComponents.isEmpty()) { - // createGroupButton.setVisible(false); - // removeFromGroupButton.setVisible(false); - // setTargetButton.setVisible(false); - // } - // } else { - // boolean inAnyGroup = isInAnyGroup(component); - // // yes I know this is terrible but if it works don't touch it :) - // if (selectedComponents.isEmpty() && !inAnyGroup) createGroupButton.setVisible(true); - // if (inAnyGroup) createGroupButton.setVisible(false); - // if (selectedComponents.isEmpty() && inAnyGroup) { - // removeFromGroupButton.setVisible(true); - // setTargetButton.setVisible(true); - // } - // if (!inAnyGroup) { - // removeFromGroupButton.setVisible(false); - // setTargetButton.setVisible(false); - // } - // selectedComponents.add(component); - // ColorRectTexture rect = new ColorRectTexture( - // (selectedTargets.isEmpty() || selectedTargets.get(0) != component) ? Color.RED : - // Color.PINK); - // textures.setTextures(rect, texture); - // } - // if (isInAnyGroup(component)) { - // monitorGroups.forEach(group -> { - // if (group.contains(component.getPos())) { - // img.setHoverTooltips( - // Component.translatable("gtceu.gui.central_monitor.group", group.getName())); - // } - // }); - // } else { - // img.setHoverTooltips(Component.translatable("gtceu.gui.central_monitor.group", - // Component.translatable("gtceu.gui.central_monitor.none"))); - // } - // }; - // Runnable rightClickCallback = () -> { - // if (!selectedTargets.isEmpty()) { - // if (selectedTargets.get(0).getPos() == component.getPos()) { - // selectedTargets.clear(); - // if (selectedComponents.contains(component)) { - // ColorRectTexture rect = new ColorRectTexture(Color.RED); - // textures.setTextures(rect, texture); - // } else { - // textures.setTextures(texture); - // } - // dataSlotInput.setVisible(false); - // return; - // } else { - // try { - // rightClickCallbacks.get(selectedTargets.get(0).getPos()).run(); - // } catch (StackOverflowError e) { - // GTCEu.LOGGER.error( - // "Stack overflow when right-clicking monitor component {} at {} (selectedTarget is {} at {})", - // component, component.getPos(), selectedTargets.get(0), - // selectedTargets.get(0).getPos()); - // } - // } - // } - // selectedTargets.add(component); - // ColorRectTexture rect; - // if (selectedComponents.contains(component)) { - // rect = new ColorRectTexture(Color.PINK); - // } else { - // rect = new ColorRectTexture(Color.BLUE); - // } - // textures.setTextures(rect, texture); - // if (component.getDataItems() != null) { - // IItemHandler dataItems = component.getDataItems(); - // MonitorGroup selectedGroup = null; - // for (MonitorGroup group : monitorGroups) { - // for (IMonitorComponent c : selectedComponents) { - // if (group.contains(c.getPos())) { - // if (selectedGroup == null || selectedGroup == group) { - // selectedGroup = group; - // } else { - // selectedGroup = null; - // break; - // } - // } - // } - // } - // if (selectedGroup != null) { - // dataSlot[0] = selectedGroup.getDataSlot() + 1; - // } - // dataSlot[1] = dataItems.getSlots(); - // dataSlotInput.setVisible(true); - // } - // }; - // if (isInAnyGroup(component)) { - // monitorGroups.forEach(group -> { - // if (group.contains(component.getPos())) img.setHoverTooltips( - // Component.translatable("gtceu.gui.central_monitor.group", group.getName())); - // }); - // } else { - // img.setHoverTooltips(Component.translatable("gtceu.gui.central_monitor.group", - // Component.translatable("gtceu.gui.central_monitor.none"))); - // } - // img.setOnPressCallback(click -> { - // if (click.button == 0) callback.accept(null); - // else if (click.button == 1) rightClickCallback.run(); - // }); - // componentSelection.addWidget(img); - // GTUtil.getLast(imageButtons).add(callback); - // rightClickCallbacks.put(component.getPos(), rightClickCallback); - // } - // } - // builder.addWidget(main); - // return builder; - //} + // @Override + // public void addDisplayText(List textList) { + // MultiblockDisplayText.builder(textList, isFormed()) + // .addWorkingStatusLine(); + // getDefinition().getAdditionalDisplay().accept(this, textList); + // } + // + // @Override + // public Widget createUIWidget() { + // updateStructureDimensions(); + // selectedComponents.clear(); + // WidgetGroup builder = (WidgetGroup) super.createUIWidget(); + // + // WidgetGroup main = new WidgetGroup(); + // DraggableScrollableWidgetGroup componentSelection = new DraggableScrollableWidgetGroup(0, 10, 200, 110); + // main.addWidget(componentSelection); + // WidgetGroup options = new WidgetGroup(-100, 20, 60, 20); + // WidgetGroup groupConfig = new WidgetGroup(10, 30, 100, 100); + // groupConfig.setVisible(false); + // + // ButtonWidget infoWidget = new ButtonWidget(200, 10, 20, 20, null); + // infoWidget.setButtonTexture(GuiTextures.INFO_ICON); + // infoWidget.setHoverTooltips( + // GTStringUtils.toImmutable(LangHandler.getSingleOrMultiLang("gtceu.central_monitor.info_tooltip"))); + // builder.addWidget(infoWidget); + // List configGroup = new ArrayList<>(); + // configGroup.add(null); + // + // Consumer openGroupConfig = (group) -> { + // configGroup.set(0, group); + // if (group == null) { + // main.setVisible(true); + // groupConfig.setVisible(false); + // return; + // } + // groupConfig.clearAllWidgets(); + // groupConfig.addWidget(new LabelWidget(0, 5, () -> { + // String currentName = ""; + // if (configGroup.get(0) != null) { + // currentName = configGroup.get(0).getName(); + // } + // return Component.translatable("gtceu.central_monitor.gui.currently_editing", currentName).getString(); + // })); + // for (int i = 0; i < 8; i++) { + // SlotWidget slot = new SlotWidget(group.getPlaceholderSlotsHandler(), i, -38, 16 * i + 46); + // slot.setHoverTooltips(GTStringUtils + // .toImmutable(LangHandler.getMultiLang("gtceu.gui.computer_monitor_cover.slot_tooltip", i + 1))); + // groupConfig.addWidget(slot); + // } + // SlotWidget slot = new SlotWidget( + // group.getItemStackHandler(), 0, + // 0, 20); + // WidgetGroup itemUI = new WidgetGroup(40, 20, 100, 100); + // Runnable changeListener = () -> { + // if (slot.getLastItem().is(slot.getItem().getItem())) return; + // itemUI.clearAllWidgets(); + // if (slot.getItem().getItem() instanceof IComponentItem item) { + // for (IItemComponent component : item.getComponents()) { + // if (component instanceof IMonitorModuleItem module) { + // itemUI.addWidget(module.createUIWidget(slot.getItem(), this, group)); + // } + // } + // } + // }; + // slot.setChangeListener(changeListener); + // changeListener.run(); + // groupConfig.addWidget(itemUI); + // groupConfig.addWidget(slot); + // main.setVisible(false); + // groupConfig.setVisible(true); + // }; + // builder.addWidget(groupConfig); + // DraggableScrollableWidgetGroup groupList = new DraggableScrollableWidgetGroup(-100, 50, 70, 80); + // + // List>>> imageButtons = new ArrayList<>(); + // Map rightClickCallbacks = new HashMap<>(); + // int[] dataSlot = new int[2]; // list to be able to modify it in lambdas + // dataSlot[0] = 1; // the slot (index starts from 1) + // dataSlot[1] = 9; // amount of slots + // IntInputWidget dataSlotInput = new IntInputWidget(120, 20, 60, -20, () -> dataSlot[0], + // n -> dataSlot[0] = Mth.clamp(n, 1, dataSlot[1])); + // dataSlotInput.setVisible(false); + // builder.addWidget(dataSlotInput); + // + // Consumer addGroupToList = group -> { + // ButtonWidget label = new ButtonWidget(20, groupList.widgets.size() * 15 + 5, 60, 10, null); + // TextTexture text = new TextTexture(group.getName()); + // text.setType(TextTexture.TextType.LEFT); + // label.setButtonTexture(text); + // label.setOnPressCallback(click -> { + // group.getRelativePositions().forEach(pos -> { + // BlockPos rel = toRelative(pos); + // if (imageButtons.size() - 1 < rel.getY()) return; + // if (imageButtons.get(rel.getY()).size() - 1 < rel.getX()) return; + // imageButtons.get(rel.getY()).get(rel.getX()).accept(null); + // }); + // if (group.getTargetRaw() != null) { + // rightClickCallbacks.getOrDefault(group.getTargetRaw(), () -> {}).run(); + // } + // }); + // groupList.addWidget(label); + // + // ButtonWidget configButton = new ButtonWidget( + // 0, label.getSelfPositionY() - 3, + // 16, 16, + // GuiTextures.IO_CONFIG_COVER_SETTINGS, + // click -> { + // if (configGroup.get(0) == null) { + // openGroupConfig.accept(group); + // } else { + // openGroupConfig.accept(null); + // } + // }); + // groupList.addWidget(configButton); + // }; + // + // monitorGroups.forEach(addGroupToList); + // builder.addWidget(groupList); + // main.addWidget(options); + // ButtonWidget removeFromGroupButton = new ButtonWidget(0, 0, 60, 20, null); + // removeFromGroupButton.setButtonTexture(new TextTexture("gtceu.central_monitor.gui.remove_from_group")); + // removeFromGroupButton.setVisible(false); + // ButtonWidget setTargetButton = new ButtonWidget(0, 15, 60, 20, null); + // setTargetButton.setButtonTexture(new TextTexture("gtceu.central_monitor.gui.set_target")); + // setTargetButton.setVisible(false); + // ButtonWidget createGroupButton = new ButtonWidget(0, 0, 60, 20, null); + // createGroupButton.setOnPressCallback(click -> { + // MonitorGroup group = new MonitorGroup( + // Component.translatable("gtceu.gui.central_monitor.group_default_name", monitorGroups.size() + 1) + // .getString()); + // for (IMonitorComponent component : selectedComponents) { + // if (isInAnyGroup(component)) return; + // group.add(component.getPos()); + // } + // monitorGroups.add(group); + // addGroupToList.accept(group); + // + // createGroupButton.setVisible(false); + // removeFromGroupButton.setVisible(true); + // Iterator it = selectedComponents.iterator(); + // while (it.hasNext()) { + // IMonitorComponent c = it.next(); + // BlockPos rel = toRelative(c.getPos()); + // imageButtons.get(rel.getY()).get(rel.getX()).accept(it); + // } + // if (!selectedTargets.isEmpty()) { + // rightClickCallbacks.getOrDefault(selectedTargets.get(0).getPos(), () -> {}).run(); + // } + // }); + // setTargetButton.setOnPressCallback(click -> { + // MonitorGroup group = null; + // for (MonitorGroup group2 : monitorGroups) { + // for (IMonitorComponent component : selectedComponents) { + // if (group2.contains(component.getPos())) { + // group = group2; + // break; + // } + // } + // if (group != null) break; + // } + // if (group == null) return; + // if (selectedTargets.isEmpty()) group.setTarget(null); + // else { + // group.setTarget(selectedTargets.get(0).getPos()); + // group.setDataSlot(dataSlot[0] - 1); + // } + // }); + // removeFromGroupButton.setOnPressCallback(click -> { + // for (MonitorGroup group : monitorGroups) { + // for (IMonitorComponent component : selectedComponents) group.remove(component.getPos()); + // } + // Iterator itg = monitorGroups.iterator(); + // while (itg.hasNext()) { + // MonitorGroup group = itg.next(); + // if (group.isEmpty()) { + // clearInventory(group.getItemStackHandler()); + // clearInventory(group.getPlaceholderSlotsHandler()); + // itg.remove(); + // } + // } + // groupList.clearAllWidgets(); + // monitorGroups.forEach(addGroupToList); + // + // removeFromGroupButton.setVisible(false); + // createGroupButton.setVisible(true); + // Iterator it = selectedComponents.iterator(); + // while (it.hasNext()) { + // IMonitorComponent c = it.next(); + // BlockPos rel = toRelative(c.getPos()); + // if (imageButtons.size() - 1 < rel.getY()) continue; + // if (imageButtons.get(rel.getY()).size() - 1 < rel.getX()) continue; + // imageButtons.get(rel.getY()).get(rel.getX()).accept(it); + // } + // if (!selectedTargets.isEmpty()) { + // rightClickCallbacks.getOrDefault(selectedTargets.get(0).getPos(), () -> {}).run(); + // } + // }); + // createGroupButton.setButtonTexture(new TextTexture("gtceu.central_monitor.gui.create_group")); + // createGroupButton.setVisible(false); + // options.addWidget(removeFromGroupButton); + // options.addWidget(createGroupButton); + // options.addWidget(setTargetButton); + // int startX = 20; + // int startY = 30; + // for (int row = 0; row <= downDist + upDist; row++) { + // imageButtons.add(new ArrayList<>()); + // for (int col = 0; col <= leftDist + rightDist; col++) { + // IGuiTexture texture = getComponentTexture(row, col); + // GuiTextureGroup textures = new GuiTextureGroup(texture, new ColorBorderTexture(2, 0xFFFFFF)); + // IMonitorComponent component = getComponent(row, col); + // if (component == null) { + // GTUtil.getLast(imageButtons).add(it -> {}); + // continue; + // } + // ButtonWidget img = new ButtonWidget(startX + (16 * col), startY + (16 * row), 16, 16, textures, null); + // Consumer> callback = (it) -> { + // if (!component.isMonitor()) return; + // if (selectedComponents.contains(component)) { + // if (it == null) { + // selectedComponents.remove(component); + // } else { + // it.remove(); + // } + // + // if (!selectedTargets.isEmpty() && selectedTargets.get(0) == component) { + // ColorRectTexture rect = new ColorRectTexture(Color.BLUE); + // textures.setTextures(rect, texture); + // } else { + // textures.setTextures(texture); + // } + // + // createGroupButton.setVisible(selectedComponents.stream().noneMatch(this::isInAnyGroup)); + // removeFromGroupButton.setVisible(selectedComponents.stream().allMatch(this::isInAnyGroup)); + // setTargetButton.setVisible(removeFromGroupButton.isVisible()); + // + // if (selectedComponents.isEmpty()) { + // createGroupButton.setVisible(false); + // removeFromGroupButton.setVisible(false); + // setTargetButton.setVisible(false); + // } + // } else { + // boolean inAnyGroup = isInAnyGroup(component); + // // yes I know this is terrible but if it works don't touch it :) + // if (selectedComponents.isEmpty() && !inAnyGroup) createGroupButton.setVisible(true); + // if (inAnyGroup) createGroupButton.setVisible(false); + // if (selectedComponents.isEmpty() && inAnyGroup) { + // removeFromGroupButton.setVisible(true); + // setTargetButton.setVisible(true); + // } + // if (!inAnyGroup) { + // removeFromGroupButton.setVisible(false); + // setTargetButton.setVisible(false); + // } + // selectedComponents.add(component); + // ColorRectTexture rect = new ColorRectTexture( + // (selectedTargets.isEmpty() || selectedTargets.get(0) != component) ? Color.RED : + // Color.PINK); + // textures.setTextures(rect, texture); + // } + // if (isInAnyGroup(component)) { + // monitorGroups.forEach(group -> { + // if (group.contains(component.getPos())) { + // img.setHoverTooltips( + // Component.translatable("gtceu.gui.central_monitor.group", group.getName())); + // } + // }); + // } else { + // img.setHoverTooltips(Component.translatable("gtceu.gui.central_monitor.group", + // Component.translatable("gtceu.gui.central_monitor.none"))); + // } + // }; + // Runnable rightClickCallback = () -> { + // if (!selectedTargets.isEmpty()) { + // if (selectedTargets.get(0).getPos() == component.getPos()) { + // selectedTargets.clear(); + // if (selectedComponents.contains(component)) { + // ColorRectTexture rect = new ColorRectTexture(Color.RED); + // textures.setTextures(rect, texture); + // } else { + // textures.setTextures(texture); + // } + // dataSlotInput.setVisible(false); + // return; + // } else { + // try { + // rightClickCallbacks.get(selectedTargets.get(0).getPos()).run(); + // } catch (StackOverflowError e) { + // GTCEu.LOGGER.error( + // "Stack overflow when right-clicking monitor component {} at {} (selectedTarget is {} at {})", + // component, component.getPos(), selectedTargets.get(0), + // selectedTargets.get(0).getPos()); + // } + // } + // } + // selectedTargets.add(component); + // ColorRectTexture rect; + // if (selectedComponents.contains(component)) { + // rect = new ColorRectTexture(Color.PINK); + // } else { + // rect = new ColorRectTexture(Color.BLUE); + // } + // textures.setTextures(rect, texture); + // if (component.getDataItems() != null) { + // IItemHandler dataItems = component.getDataItems(); + // MonitorGroup selectedGroup = null; + // for (MonitorGroup group : monitorGroups) { + // for (IMonitorComponent c : selectedComponents) { + // if (group.contains(c.getPos())) { + // if (selectedGroup == null || selectedGroup == group) { + // selectedGroup = group; + // } else { + // selectedGroup = null; + // break; + // } + // } + // } + // } + // if (selectedGroup != null) { + // dataSlot[0] = selectedGroup.getDataSlot() + 1; + // } + // dataSlot[1] = dataItems.getSlots(); + // dataSlotInput.setVisible(true); + // } + // }; + // if (isInAnyGroup(component)) { + // monitorGroups.forEach(group -> { + // if (group.contains(component.getPos())) img.setHoverTooltips( + // Component.translatable("gtceu.gui.central_monitor.group", group.getName())); + // }); + // } else { + // img.setHoverTooltips(Component.translatable("gtceu.gui.central_monitor.group", + // Component.translatable("gtceu.gui.central_monitor.none"))); + // } + // img.setOnPressCallback(click -> { + // if (click.button == 0) callback.accept(null); + // else if (click.button == 1) rightClickCallback.run(); + // }); + // componentSelection.addWidget(img); + // GTUtil.getLast(imageButtons).add(callback); + // rightClickCallbacks.put(component.getPos(), rightClickCallback); + // } + // } + // builder.addWidget(main); + // return builder; + // } @Override public IGuiTexture getComponentIcon() { diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CleanroomMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CleanroomMachine.java index bd58f825d77..0adc4c86c8a 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CleanroomMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CleanroomMachine.java @@ -12,7 +12,6 @@ import com.gregtechceu.gtceu.api.machine.SimpleGeneratorMachine; import com.gregtechceu.gtceu.api.machine.feature.ICleanroomProvider; import com.gregtechceu.gtceu.api.machine.feature.IDataInfoProvider; -import com.gregtechceu.gtceu.api.machine.feature.multiblock.IDisplayUIMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMaintenanceMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMufflerMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiPart; @@ -43,13 +42,10 @@ import com.lowdragmc.lowdraglib.utils.BlockInfo; -import net.minecraft.ChatFormatting; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.HoverEvent; -import net.minecraft.network.chat.Style; import net.minecraft.util.Mth; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Blocks; @@ -467,53 +463,53 @@ protected boolean isMachineBanned(MetaMachine machine) { return machine instanceof PrimitivePumpMachine; } - //@Override - //public void addDisplayText(List textList) { - // if (isFormed()) { - // var maxVoltage = getMaxVoltage(); - // if (maxVoltage > 0) { - // String voltageName = GTValues.VNF[GTUtil.getFloorTierByVoltage(maxVoltage)]; - // textList.add(Component.translatable("gtceu.multiblock.max_energy_per_tick", maxVoltage, voltageName)); - // } -// - // if (cleanroomType != null) { - // textList.add(Component.translatable(cleanroomType.getTranslationKey())); - // } -// - // if (!isWorkingEnabled()) { - // textList.add(Component.translatable("gtceu.multiblock.work_paused")); -// - // } else if (isActive()) { - // textList.add(Component.translatable("gtceu.multiblock.running")); - // int currentProgress = (int) (recipeLogic.getProgressPercent() * 100); - // double maxInSec = (float) recipeLogic.getDuration() / 20.0f; - // double currentInSec = (float) recipeLogic.getProgress() / 20.0f; - // textList.add( - // Component.translatable("gtceu.multiblock.progress", String.format("%.2f", (float) currentInSec), - // String.format("%.2f", (float) maxInSec), currentProgress)); - // } else { - // textList.add(Component.translatable("gtceu.multiblock.idling")); - // } -// - // if (recipeLogic.isWaiting()) { - // textList.add(Component.translatable("gtceu.multiblock.waiting") - // .setStyle(Style.EMPTY.withColor(ChatFormatting.RED))); - // } -// - // if (isClean()) textList.add(Component.translatable("gtceu.multiblock.cleanroom.clean_state")); - // else textList.add(Component.translatable("gtceu.multiblock.cleanroom.dirty_state")); - // textList.add(Component.translatable("gtceu.multiblock.cleanroom.clean_amount", this.cleanAmount)); - // textList.add(Component.translatable("gtceu.multiblock.dimensions.0")); - // textList.add(Component.translatable("gtceu.multiblock.dimensions.1", lDist + rDist + 1, hDist + 1, - // fDist + bDist + 1)); - // } else { - // Component tooltip = Component.translatable("gtceu.multiblock.invalid_structure.tooltip") - // .withStyle(ChatFormatting.GRAY); - // textList.add(Component.translatable("gtceu.multiblock.invalid_structure") - // .withStyle(Style.EMPTY.withColor(ChatFormatting.RED) - // .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, tooltip)))); - // } - //} + // @Override + // public void addDisplayText(List textList) { + // if (isFormed()) { + // var maxVoltage = getMaxVoltage(); + // if (maxVoltage > 0) { + // String voltageName = GTValues.VNF[GTUtil.getFloorTierByVoltage(maxVoltage)]; + // textList.add(Component.translatable("gtceu.multiblock.max_energy_per_tick", maxVoltage, voltageName)); + // } + // + // if (cleanroomType != null) { + // textList.add(Component.translatable(cleanroomType.getTranslationKey())); + // } + // + // if (!isWorkingEnabled()) { + // textList.add(Component.translatable("gtceu.multiblock.work_paused")); + // + // } else if (isActive()) { + // textList.add(Component.translatable("gtceu.multiblock.running")); + // int currentProgress = (int) (recipeLogic.getProgressPercent() * 100); + // double maxInSec = (float) recipeLogic.getDuration() / 20.0f; + // double currentInSec = (float) recipeLogic.getProgress() / 20.0f; + // textList.add( + // Component.translatable("gtceu.multiblock.progress", String.format("%.2f", (float) currentInSec), + // String.format("%.2f", (float) maxInSec), currentProgress)); + // } else { + // textList.add(Component.translatable("gtceu.multiblock.idling")); + // } + // + // if (recipeLogic.isWaiting()) { + // textList.add(Component.translatable("gtceu.multiblock.waiting") + // .setStyle(Style.EMPTY.withColor(ChatFormatting.RED))); + // } + // + // if (isClean()) textList.add(Component.translatable("gtceu.multiblock.cleanroom.clean_state")); + // else textList.add(Component.translatable("gtceu.multiblock.cleanroom.dirty_state")); + // textList.add(Component.translatable("gtceu.multiblock.cleanroom.clean_amount", this.cleanAmount)); + // textList.add(Component.translatable("gtceu.multiblock.dimensions.0")); + // textList.add(Component.translatable("gtceu.multiblock.dimensions.1", lDist + rDist + 1, hDist + 1, + // fDist + bDist + 1)); + // } else { + // Component tooltip = Component.translatable("gtceu.multiblock.invalid_structure.tooltip") + // .withStyle(ChatFormatting.GRAY); + // textList.add(Component.translatable("gtceu.multiblock.invalid_structure") + // .withStyle(Style.EMPTY.withColor(ChatFormatting.RED) + // .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, tooltip)))); + // } + // } @Override public Set getTypes() { diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/FluidDrillMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/FluidDrillMachine.java index 57286ccad18..502c69bece2 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/FluidDrillMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/FluidDrillMachine.java @@ -15,23 +15,15 @@ import com.gregtechceu.gtceu.common.data.GTMaterialBlocks; import com.gregtechceu.gtceu.common.data.GTMaterials; import com.gregtechceu.gtceu.common.machine.trait.FluidDrillLogic; -import com.gregtechceu.gtceu.utils.FormattingUtil; import com.gregtechceu.gtceu.utils.GTUtil; -import net.minecraft.ChatFormatting; import net.minecraft.MethodsReturnNonnullByDefault; -import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.HoverEvent; -import net.minecraft.network.chat.Style; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.material.Fluid; import lombok.Getter; import org.jetbrains.annotations.NotNull; -import java.util.List; - import javax.annotation.ParametersAreNonnullByDefault; @ParametersAreNonnullByDefault @@ -66,42 +58,42 @@ public int getEnergyTier() { return Math.min(this.tier + 1, Math.max(this.tier, GTUtil.getFloorTierByVoltage(energyCont.getInputVoltage()))); } - //@Override - //public void addDisplayText(List textList) { - // if (isFormed()) { - // int energyContainer = getEnergyTier(); - // long maxVoltage = GTValues.V[energyContainer]; - // String voltageName = GTValues.VNF[energyContainer]; - // textList.add(Component.translatable("gtceu.multiblock.max_energy_per_tick", maxVoltage, voltageName)); -// - // if (getRecipeLogic().getVeinFluid() != null) { - // // Fluid name - // Fluid drilledFluid = getRecipeLogic().getVeinFluid(); - // Component fluidInfo = drilledFluid.getFluidType().getDescription().copy() - // .withStyle(ChatFormatting.GREEN); - // textList.add(Component.translatable("gtceu.multiblock.fluid_rig.drilled_fluid", fluidInfo) - // .withStyle(ChatFormatting.GRAY)); -// - // // Fluid amount - // Component amountInfo = Component.literal(FormattingUtil.formatNumbers( - // getRecipeLogic().getFluidToProduce() * 20L / FluidDrillLogic.MAX_PROGRESS) + - // " mB/s").withStyle(ChatFormatting.BLUE); - // textList.add(Component.translatable("gtceu.multiblock.fluid_rig.fluid_amount", amountInfo) - // .withStyle(ChatFormatting.GRAY)); - // } else { - // Component noFluid = Component.translatable("gtceu.multiblock.fluid_rig.no_fluid_in_area") - // .withStyle(ChatFormatting.RED); - // textList.add(Component.translatable("gtceu.multiblock.fluid_rig.drilled_fluid", noFluid) - // .withStyle(ChatFormatting.GRAY)); - // } - // } else { - // Component tooltip = Component.translatable("gtceu.multiblock.invalid_structure.tooltip") - // .withStyle(ChatFormatting.GRAY); - // textList.add(Component.translatable("gtceu.multiblock.invalid_structure") - // .withStyle(Style.EMPTY.withColor(ChatFormatting.RED) - // .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, tooltip)))); - // } - //} + // @Override + // public void addDisplayText(List textList) { + // if (isFormed()) { + // int energyContainer = getEnergyTier(); + // long maxVoltage = GTValues.V[energyContainer]; + // String voltageName = GTValues.VNF[energyContainer]; + // textList.add(Component.translatable("gtceu.multiblock.max_energy_per_tick", maxVoltage, voltageName)); + // + // if (getRecipeLogic().getVeinFluid() != null) { + // // Fluid name + // Fluid drilledFluid = getRecipeLogic().getVeinFluid(); + // Component fluidInfo = drilledFluid.getFluidType().getDescription().copy() + // .withStyle(ChatFormatting.GREEN); + // textList.add(Component.translatable("gtceu.multiblock.fluid_rig.drilled_fluid", fluidInfo) + // .withStyle(ChatFormatting.GRAY)); + // + // // Fluid amount + // Component amountInfo = Component.literal(FormattingUtil.formatNumbers( + // getRecipeLogic().getFluidToProduce() * 20L / FluidDrillLogic.MAX_PROGRESS) + + // " mB/s").withStyle(ChatFormatting.BLUE); + // textList.add(Component.translatable("gtceu.multiblock.fluid_rig.fluid_amount", amountInfo) + // .withStyle(ChatFormatting.GRAY)); + // } else { + // Component noFluid = Component.translatable("gtceu.multiblock.fluid_rig.no_fluid_in_area") + // .withStyle(ChatFormatting.RED); + // textList.add(Component.translatable("gtceu.multiblock.fluid_rig.drilled_fluid", noFluid) + // .withStyle(ChatFormatting.GRAY)); + // } + // } else { + // Component tooltip = Component.translatable("gtceu.multiblock.invalid_structure.tooltip") + // .withStyle(ChatFormatting.GRAY); + // textList.add(Component.translatable("gtceu.multiblock.invalid_structure") + // .withStyle(Style.EMPTY.withColor(ChatFormatting.RED) + // .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, tooltip)))); + // } + // } public static int getDepletionChance(int tier) { if (tier == GTValues.MV) diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/FusionReactorMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/FusionReactorMachine.java index e96415093ac..46782f9c3fb 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/FusionReactorMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/FusionReactorMachine.java @@ -272,15 +272,15 @@ public long getMaxVoltage() { ////////////////////////////////////// // ******** GUI *********// ////////////////////////////////////// - //@Override - //public void addDisplayText(List textList) { - // super.addDisplayText(textList); - // if (isFormed()) { - // textList.add(Component.translatable("gtceu.multiblock.fusion_reactor.energy", - // this.energyContainer.getEnergyStored(), this.energyContainer.getEnergyCapacity())); - // textList.add(Component.translatable("gtceu.multiblock.fusion_reactor.heat", heat)); - // } - //} + // @Override + // public void addDisplayText(List textList) { + // super.addDisplayText(textList); + // if (isFormed()) { + // textList.add(Component.translatable("gtceu.multiblock.fusion_reactor.energy", + // this.energyContainer.getEnergyStored(), this.energyContainer.getEnergyCapacity())); + // textList.add(Component.translatable("gtceu.multiblock.fusion_reactor.heat", heat)); + // } + // } public static void addEUToStartLabel(GTRecipe recipe, WidgetGroup group) { long euToStart = recipe.data.getLong("eu_to_start"); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/LargeMinerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/LargeMinerMachine.java index 477765392eb..80c13544edc 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/LargeMinerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/LargeMinerMachine.java @@ -22,14 +22,9 @@ import com.gregtechceu.gtceu.utils.GTTransferUtils; import com.gregtechceu.gtceu.utils.GTUtil; -import com.lowdragmc.lowdraglib.gui.util.ClickData; -import com.lowdragmc.lowdraglib.gui.widget.ComponentPanelWidget; - -import net.minecraft.ChatFormatting; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.Direction; import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.Style; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; @@ -198,54 +193,54 @@ public boolean drainInput(boolean simulate) { ////////////////////////////////////// // *********** GUI ***********// ////////////////////////////////////// - //@Override - //public void addDisplayText(List textList) { - // super.addDisplayText(textList); - // if (this.isFormed()) { - // int workingAreaChunks = getRecipeLogic().getCurrentRadius() * 2 / CHUNK_LENGTH; - // int workingArea = IMiner.getWorkingArea(getRecipeLogic().getCurrentRadius()); - // textList.add(Component.translatable("gtceu.machine.miner.startx", - // getRecipeLogic().getX() == Integer.MAX_VALUE ? 0 : getRecipeLogic().getX())); - // textList.add(Component.translatable("gtceu.machine.miner.starty", - // getRecipeLogic().getY() == Integer.MAX_VALUE ? 0 : getRecipeLogic().getY())); - // textList.add(Component.translatable("gtceu.machine.miner.startz", - // getRecipeLogic().getZ() == Integer.MAX_VALUE ? 0 : getRecipeLogic().getZ())); - // textList.add(Component.translatable("gtceu.universal.tooltip.silk_touch") - // .append(ComponentPanelWidget.withButton(Component.literal("[") - // .append(getRecipeLogic().isSilkTouchMode() ? - // Component.translatable("gtceu.creative.activity.on") : - // Component.translatable("gtceu.creative.activity.off")) - // .append(Component.literal("]")), "silk_touch"))); - // textList.add(Component.translatable("gtceu.universal.tooltip.chunk_mode") - // .append(ComponentPanelWidget.withButton(Component.literal("[") - // .append(getRecipeLogic().isChunkMode() ? - // Component.translatable("gtceu.creative.activity.on") : - // Component.translatable("gtceu.creative.activity.off")) - // .append(Component.literal("]")), "chunk_mode"))); - // if (getRecipeLogic().isChunkMode()) { - // textList.add(Component.translatable("gtceu.universal.tooltip.working_area_chunks", workingAreaChunks, - // workingAreaChunks)); - // } else { - // textList.add(Component.translatable("gtceu.universal.tooltip.working_area", workingArea, workingArea)); - // } - // if (getRecipeLogic().isDone()) { - // textList.add(Component.translatable("gtceu.multiblock.large_miner.done") - // .setStyle(Style.EMPTY.withColor(ChatFormatting.GREEN))); - // } - // } - //} -// - //@Override - //public void handleDisplayClick(String componentData, ClickData clickData) { - // if (!clickData.isRemote) { - // if (componentData.equals("chunk_mode")) { - // getRecipeLogic().setChunkMode(!getRecipeLogic().isChunkMode()); - // } - // if (componentData.equals("silk_touch")) { - // getRecipeLogic().setSilkTouchMode(!getRecipeLogic().isSilkTouchMode()); - // } - // } - //} + // @Override + // public void addDisplayText(List textList) { + // super.addDisplayText(textList); + // if (this.isFormed()) { + // int workingAreaChunks = getRecipeLogic().getCurrentRadius() * 2 / CHUNK_LENGTH; + // int workingArea = IMiner.getWorkingArea(getRecipeLogic().getCurrentRadius()); + // textList.add(Component.translatable("gtceu.machine.miner.startx", + // getRecipeLogic().getX() == Integer.MAX_VALUE ? 0 : getRecipeLogic().getX())); + // textList.add(Component.translatable("gtceu.machine.miner.starty", + // getRecipeLogic().getY() == Integer.MAX_VALUE ? 0 : getRecipeLogic().getY())); + // textList.add(Component.translatable("gtceu.machine.miner.startz", + // getRecipeLogic().getZ() == Integer.MAX_VALUE ? 0 : getRecipeLogic().getZ())); + // textList.add(Component.translatable("gtceu.universal.tooltip.silk_touch") + // .append(ComponentPanelWidget.withButton(Component.literal("[") + // .append(getRecipeLogic().isSilkTouchMode() ? + // Component.translatable("gtceu.creative.activity.on") : + // Component.translatable("gtceu.creative.activity.off")) + // .append(Component.literal("]")), "silk_touch"))); + // textList.add(Component.translatable("gtceu.universal.tooltip.chunk_mode") + // .append(ComponentPanelWidget.withButton(Component.literal("[") + // .append(getRecipeLogic().isChunkMode() ? + // Component.translatable("gtceu.creative.activity.on") : + // Component.translatable("gtceu.creative.activity.off")) + // .append(Component.literal("]")), "chunk_mode"))); + // if (getRecipeLogic().isChunkMode()) { + // textList.add(Component.translatable("gtceu.universal.tooltip.working_area_chunks", workingAreaChunks, + // workingAreaChunks)); + // } else { + // textList.add(Component.translatable("gtceu.universal.tooltip.working_area", workingArea, workingArea)); + // } + // if (getRecipeLogic().isDone()) { + // textList.add(Component.translatable("gtceu.multiblock.large_miner.done") + // .setStyle(Style.EMPTY.withColor(ChatFormatting.GREEN))); + // } + // } + // } + // + // @Override + // public void handleDisplayClick(String componentData, ClickData clickData) { + // if (!clickData.isRemote) { + // if (componentData.equals("chunk_mode")) { + // getRecipeLogic().setChunkMode(!getRecipeLogic().isChunkMode()); + // } + // if (componentData.equals("silk_touch")) { + // getRecipeLogic().setSilkTouchMode(!getRecipeLogic().isSilkTouchMode()); + // } + // } + // } ////////////////////////////////////// // ******* Interaction *******// diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/DataBankMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/DataBankMachine.java index e36bb1cf230..bd5c15f9e8a 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/DataBankMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/DataBankMachine.java @@ -7,11 +7,8 @@ import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.TickableSubscription; -import com.gregtechceu.gtceu.api.machine.feature.IFancyUIMachine; -import com.gregtechceu.gtceu.api.machine.feature.multiblock.IDisplayUIMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMaintenanceMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiPart; -import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockDisplayText; import com.gregtechceu.gtceu.api.machine.multiblock.PartAbility; import com.gregtechceu.gtceu.api.machine.multiblock.WorkableElectricMultiblockMachine; import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; @@ -175,17 +172,17 @@ public void tick() { updateTickSubscription(); } - //@Override - //public void addDisplayText(List textList) { - // MultiblockDisplayText.builder(textList, isFormed()) - // .setWorkingStatus(true, isActive() && isWorkingEnabled()) // transform into two-state system for display - // .setWorkingStatusKeys( - // "gtceu.multiblock.idling", - // "gtceu.multiblock.idling", - // "gtceu.multiblock.data_bank.providing") - // .addEnergyUsageExactLine(getEnergyUsage()) - // .addWorkingStatusLine(); - //} + // @Override + // public void addDisplayText(List textList) { + // MultiblockDisplayText.builder(textList, isFormed()) + // .setWorkingStatus(true, isActive() && isWorkingEnabled()) // transform into two-state system for display + // .setWorkingStatusKeys( + // "gtceu.multiblock.idling", + // "gtceu.multiblock.idling", + // "gtceu.multiblock.data_bank.providing") + // .addEnergyUsageExactLine(getEnergyUsage()) + // .addWorkingStatusLine(); + // } /* * @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/HPCAMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/HPCAMachine.java index 110cca15ca1..31ea2ac29ac 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/HPCAMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/HPCAMachine.java @@ -7,13 +7,11 @@ import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.util.TimedProgressSupplier; -import com.gregtechceu.gtceu.api.gui.widget.ExtendedProgressWidget; import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMaintenanceMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiPart; -import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockDisplayText; import com.gregtechceu.gtceu.api.machine.multiblock.WorkableElectricMultiblockMachine; import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; import com.gregtechceu.gtceu.api.misc.EnergyContainerList; @@ -24,16 +22,9 @@ import com.gregtechceu.gtceu.syncsystem.SyncDataHolder; import com.gregtechceu.gtceu.syncsystem.annotations.SaveField; import com.gregtechceu.gtceu.syncsystem.annotations.SyncToClient; -import com.gregtechceu.gtceu.utils.FormattingUtil; import com.gregtechceu.gtceu.utils.GTTransferUtils; -import com.gregtechceu.gtceu.utils.GTUtil; -import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; -import com.lowdragmc.lowdraglib.gui.texture.ProgressTexture; import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; -import com.lowdragmc.lowdraglib.gui.widget.ImageWidget; -import com.lowdragmc.lowdraglib.gui.widget.Widget; -import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; import net.minecraft.ChatFormatting; import net.minecraft.MethodsReturnNonnullByDefault; @@ -58,7 +49,6 @@ import org.jetbrains.annotations.Nullable; import java.util.*; -import java.util.function.Supplier; import javax.annotation.ParametersAreNonnullByDefault; @@ -249,67 +239,67 @@ private void consumeEnergy() { } } - //@Override - //public Widget createUIWidget() { - // WidgetGroup builder = (WidgetGroup) super.createUIWidget(); - // // Create the hover grid - // builder.addWidget(new ExtendedProgressWidget( - // () -> hpcaHandler.getAllocatedCWUt() > 0 ? progressSupplier.getAsDouble() : 0, - // 74, 57, 47, 47, GuiTextures.HPCA_COMPONENT_OUTLINE) - // .setServerTooltipSupplier(hpcaHandler::addInfo) - // .setFillDirection(ProgressTexture.FillDirection.LEFT_TO_RIGHT)); - // int startX = 76; - // int startY = 59; -// - // // we need to know what components we have on the client - // if (getLevel().isClientSide) { - // if (isFormed) { - // hpcaHandler.tryGatherClientComponents(this.getLevel(), this.getPos(), this.getFrontFacing(), - // this.getUpwardsFacing(), this.isFlipped); - // } else { - // hpcaHandler.clearClientComponents(); - // } - // } - // for (int i = 0; i < 3; i++) { - // for (int j = 0; j < 3; j++) { - // final int index = i * 3 + j; - // Supplier textureSupplier = () -> hpcaHandler.getComponentTexture(index); - // builder.addWidget(new ImageWidget(startX + (15 * j), startY + (15 * i), 13, 13, textureSupplier)); - // } - // } - // return builder; - //} -// - //@Override - //public void addDisplayText(List textList) { - // MultiblockDisplayText.builder(textList, isFormed()) - // .setWorkingStatus(true, hpcaHandler.getAllocatedCWUt() > 0) // transform into two-state system for - // // display - // .setWorkingStatusKeys( - // "gtceu.multiblock.idling", - // "gtceu.multiblock.idling", - // "gtceu.multiblock.data_bank.providing") - // .addCustom(tl -> { - // if (isFormed()) { - // // Energy Usage - // tl.add(Component.translatable( - // "gtceu.multiblock.hpca.energy", - // FormattingUtil.formatNumbers(hpcaHandler.cachedEUt), - // FormattingUtil.formatNumbers(hpcaHandler.getMaxEUt()), - // GTValues.VNF[GTUtil.getTierByVoltage(hpcaHandler.getMaxEUt())]) - // .withStyle(ChatFormatting.GRAY)); -// - // // Provided Computation - // Component cwutInfo = Component.literal( - // hpcaHandler.cachedCWUt + " / " + hpcaHandler.getMaxCWUt() + " CWU/t") - // .withStyle(ChatFormatting.AQUA); - // tl.add(Component.translatable( - // "gtceu.multiblock.hpca.computation", - // cwutInfo).withStyle(ChatFormatting.GRAY)); - // } - // }) - // .addWorkingStatusLine(); - //} + // @Override + // public Widget createUIWidget() { + // WidgetGroup builder = (WidgetGroup) super.createUIWidget(); + // // Create the hover grid + // builder.addWidget(new ExtendedProgressWidget( + // () -> hpcaHandler.getAllocatedCWUt() > 0 ? progressSupplier.getAsDouble() : 0, + // 74, 57, 47, 47, GuiTextures.HPCA_COMPONENT_OUTLINE) + // .setServerTooltipSupplier(hpcaHandler::addInfo) + // .setFillDirection(ProgressTexture.FillDirection.LEFT_TO_RIGHT)); + // int startX = 76; + // int startY = 59; + // + // // we need to know what components we have on the client + // if (getLevel().isClientSide) { + // if (isFormed) { + // hpcaHandler.tryGatherClientComponents(this.getLevel(), this.getPos(), this.getFrontFacing(), + // this.getUpwardsFacing(), this.isFlipped); + // } else { + // hpcaHandler.clearClientComponents(); + // } + // } + // for (int i = 0; i < 3; i++) { + // for (int j = 0; j < 3; j++) { + // final int index = i * 3 + j; + // Supplier textureSupplier = () -> hpcaHandler.getComponentTexture(index); + // builder.addWidget(new ImageWidget(startX + (15 * j), startY + (15 * i), 13, 13, textureSupplier)); + // } + // } + // return builder; + // } + // + // @Override + // public void addDisplayText(List textList) { + // MultiblockDisplayText.builder(textList, isFormed()) + // .setWorkingStatus(true, hpcaHandler.getAllocatedCWUt() > 0) // transform into two-state system for + // // display + // .setWorkingStatusKeys( + // "gtceu.multiblock.idling", + // "gtceu.multiblock.idling", + // "gtceu.multiblock.data_bank.providing") + // .addCustom(tl -> { + // if (isFormed()) { + // // Energy Usage + // tl.add(Component.translatable( + // "gtceu.multiblock.hpca.energy", + // FormattingUtil.formatNumbers(hpcaHandler.cachedEUt), + // FormattingUtil.formatNumbers(hpcaHandler.getMaxEUt()), + // GTValues.VNF[GTUtil.getTierByVoltage(hpcaHandler.getMaxEUt())]) + // .withStyle(ChatFormatting.GRAY)); + // + // // Provided Computation + // Component cwutInfo = Component.literal( + // hpcaHandler.cachedCWUt + " / " + hpcaHandler.getMaxCWUt() + " CWU/t") + // .withStyle(ChatFormatting.AQUA); + // tl.add(Component.translatable( + // "gtceu.multiblock.hpca.computation", + // cwutInfo).withStyle(ChatFormatting.GRAY)); + // } + // }) + // .addWorkingStatusLine(); + // } private ChatFormatting getDisplayTemperatureColor() { if (temperature < 500) { diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/NetworkSwitchMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/NetworkSwitchMachine.java index a5193e5d851..957ebdd43cf 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/NetworkSwitchMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/NetworkSwitchMachine.java @@ -7,12 +7,10 @@ import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MetaMachine; -import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockDisplayText; import com.gregtechceu.gtceu.api.machine.multiblock.PartAbility; import com.gregtechceu.gtceu.api.machine.trait.NotifiableComputationContainer; import net.minecraft.MethodsReturnNonnullByDefault; -import net.minecraft.network.chat.Component; import net.minecraft.world.level.block.Block; import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; @@ -116,18 +114,18 @@ public boolean canBridge(@NotNull Collection seen) return true; } - //@Override - //public void addDisplayText(List textList) { - // MultiblockDisplayText.builder(textList, isFormed()) - // .setWorkingStatus(true, isActive() && isWorkingEnabled()) // transform into two-state system for display - // .setWorkingStatusKeys( - // "gtceu.multiblock.idling", - // "gtceu.multiblock.idling", - // "gtceu.multiblock.data_bank.providing") - // .addEnergyUsageExactLine(getEnergyUsage()) - // .addComputationUsageLine(computationHandler.getMaxCWUtForDisplay()) - // .addWorkingStatusLine(); - //} + // @Override + // public void addDisplayText(List textList) { + // MultiblockDisplayText.builder(textList, isFormed()) + // .setWorkingStatus(true, isActive() && isWorkingEnabled()) // transform into two-state system for display + // .setWorkingStatusKeys( + // "gtceu.multiblock.idling", + // "gtceu.multiblock.idling", + // "gtceu.multiblock.data_bank.providing") + // .addEnergyUsageExactLine(getEnergyUsage()) + // .addComputationUsageLine(computationHandler.getMaxCWUtForDisplay()) + // .addWorkingStatusLine(); + // } /* * @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/ResearchStationMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/ResearchStationMachine.java index 446f7b254b2..0a83a479fcf 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/ResearchStationMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/ResearchStationMachine.java @@ -8,9 +8,7 @@ import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; -import com.gregtechceu.gtceu.api.machine.feature.multiblock.IDisplayUIMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiPart; -import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockDisplayText; import com.gregtechceu.gtceu.api.machine.multiblock.WorkableElectricMultiblockMachine; import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; import com.gregtechceu.gtceu.api.recipe.ActionResult; @@ -18,14 +16,12 @@ import com.gregtechceu.gtceu.api.recipe.RecipeHelper; import net.minecraft.MethodsReturnNonnullByDefault; -import net.minecraft.network.chat.Component; import net.minecraft.world.item.ItemStack; import lombok.Getter; import org.jetbrains.annotations.NotNull; import java.util.Collections; -import java.util.List; import javax.annotation.ParametersAreNonnullByDefault; @@ -105,18 +101,18 @@ public boolean regressWhenWaiting() { return false; } - //@Override - //public void addDisplayText(List textList) { - // MultiblockDisplayText.builder(textList, isFormed()) - // .setWorkingStatus(recipeLogic.isWorkingEnabled(), recipeLogic.isActive()) - // .setWorkingStatusKeys("gtceu.multiblock.idling", "gtceu.multiblock.work_paused", - // "gtceu.multiblock.research_station.researching") - // .addEnergyUsageLine(energyContainer) - // .addEnergyTierLine(tier) - // .addWorkingStatusLine() - // // .addComputationUsageExactLine(computationProvider.getMaxCWUt()) // TODO: (Onion) - // .addProgressLineOnlyPercent(recipeLogic.getProgressPercent()); - //} + // @Override + // public void addDisplayText(List textList) { + // MultiblockDisplayText.builder(textList, isFormed()) + // .setWorkingStatus(recipeLogic.isWorkingEnabled(), recipeLogic.isActive()) + // .setWorkingStatusKeys("gtceu.multiblock.idling", "gtceu.multiblock.work_paused", + // "gtceu.multiblock.research_station.researching") + // .addEnergyUsageLine(energyContainer) + // .addEnergyTierLine(tier) + // .addWorkingStatusLine() + // // .addComputationUsageExactLine(computationProvider.getMaxCWUt()) // TODO: (Onion) + // .addProgressLineOnlyPercent(recipeLogic.getProgressPercent()); + // } public static class ResearchStationRecipeLogic extends RecipeLogic { diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/generator/LargeCombustionEngineMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/generator/LargeCombustionEngineMachine.java index 99ec541b6bb..e115cfa543f 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/generator/LargeCombustionEngineMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/generator/LargeCombustionEngineMachine.java @@ -3,13 +3,9 @@ import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.fluids.store.FluidStorageKeys; -import com.gregtechceu.gtceu.api.gui.GuiTextures; -import com.gregtechceu.gtceu.api.gui.fancy.IFancyTooltip; -import com.gregtechceu.gtceu.api.gui.fancy.TooltipsPanel; import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.feature.ITieredMachine; -import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockDisplayText; import com.gregtechceu.gtceu.api.machine.multiblock.WorkableElectricMultiblockMachine; import com.gregtechceu.gtceu.api.pattern.util.RelativeDirection; import com.gregtechceu.gtceu.api.recipe.GTRecipe; @@ -27,8 +23,6 @@ import net.minecraft.ChatFormatting; import net.minecraft.MethodsReturnNonnullByDefault; -import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.Style; import net.minecraftforge.fluids.FluidStack; import lombok.Getter; @@ -36,7 +30,6 @@ import org.jetbrains.annotations.Nullable; import java.util.Iterator; -import java.util.List; import javax.annotation.ParametersAreNonnullByDefault; @@ -179,33 +172,33 @@ public boolean regressWhenWaiting() { // ******* GUI ********// ////////////////////////////////////// - //@Override - //public void addDisplayText(List textList) { - // MultiblockDisplayText.Builder builder = MultiblockDisplayText.builder(textList, isFormed()) - // .setWorkingStatus(recipeLogic.isWorkingEnabled(), recipeLogic.isActive()); -// - // long lastEUt = recipeLogic.getLastRecipe() != null ? - // recipeLogic.getLastRecipe().getOutputEUt().getTotalEU() : 0; - // if (isExtreme()) { - // builder.addEnergyProductionLine(GTValues.V[tier + 1], lastEUt); - // } else { - // builder.addEnergyProductionAmpsLine(GTValues.V[tier] * 3, 3); - // } -// - // if (isActive() && isWorkingEnabled()) { - // builder.addCurrentEnergyProductionLine(lastEUt); - // } -// - // builder.addFuelNeededLine(getRecipeFluidInputInfo(), recipeLogic.getDuration()); -// - // if (isFormed && isOxygenBoosted) { - // final var key = isExtreme() ? "gtceu.multiblock.large_combustion_engine.liquid_oxygen_boosted" : - // "gtceu.multiblock.large_combustion_engine.oxygen_boosted"; - // builder.addCustom(tl -> tl.add(Component.translatable(key).withStyle(ChatFormatting.AQUA))); - // } -// - // builder.addWorkingStatusLine(); - //} + // @Override + // public void addDisplayText(List textList) { + // MultiblockDisplayText.Builder builder = MultiblockDisplayText.builder(textList, isFormed()) + // .setWorkingStatus(recipeLogic.isWorkingEnabled(), recipeLogic.isActive()); + // + // long lastEUt = recipeLogic.getLastRecipe() != null ? + // recipeLogic.getLastRecipe().getOutputEUt().getTotalEU() : 0; + // if (isExtreme()) { + // builder.addEnergyProductionLine(GTValues.V[tier + 1], lastEUt); + // } else { + // builder.addEnergyProductionAmpsLine(GTValues.V[tier] * 3, 3); + // } + // + // if (isActive() && isWorkingEnabled()) { + // builder.addCurrentEnergyProductionLine(lastEUt); + // } + // + // builder.addFuelNeededLine(getRecipeFluidInputInfo(), recipeLogic.getDuration()); + // + // if (isFormed && isOxygenBoosted) { + // final var key = isExtreme() ? "gtceu.multiblock.large_combustion_engine.liquid_oxygen_boosted" : + // "gtceu.multiblock.large_combustion_engine.oxygen_boosted"; + // builder.addCustom(tl -> tl.add(Component.translatable(key).withStyle(ChatFormatting.AQUA))); + // } + // + // builder.addWorkingStatusLine(); + // } @Nullable public String getRecipeFluidInputInfo() { @@ -223,14 +216,14 @@ public String getRecipeFluidInputInfo() { return ChatFormatting.RED + FormattingUtil.formatNumbers(neededAmount) + "mB"; } - //@Override - //public void attachTooltips(TooltipsPanel tooltipsPanel) { - // super.attachTooltips(tooltipsPanel); - // tooltipsPanel.attachTooltips(new IFancyTooltip.Basic( - // () -> GuiTextures.INDICATOR_NO_STEAM.get(false), - // () -> List.of(Component.translatable("gtceu.multiblock.large_combustion_engine.obstructed") - // .setStyle(Style.EMPTY.withColor(ChatFormatting.RED))), - // this::isIntakesObstructed, - // () -> null)); - //} + // @Override + // public void attachTooltips(TooltipsPanel tooltipsPanel) { + // super.attachTooltips(tooltipsPanel); + // tooltipsPanel.attachTooltips(new IFancyTooltip.Basic( + // () -> GuiTextures.INDICATOR_NO_STEAM.get(false), + // () -> List.of(Component.translatable("gtceu.multiblock.large_combustion_engine.obstructed") + // .setStyle(Style.EMPTY.withColor(ChatFormatting.RED))), + // this::isIntakesObstructed, + // () -> null)); + // } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/generator/LargeTurbineMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/generator/LargeTurbineMachine.java index 575645ff57a..bd7d07790e5 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/generator/LargeTurbineMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/generator/LargeTurbineMachine.java @@ -15,19 +15,13 @@ import com.gregtechceu.gtceu.api.recipe.modifier.ModifierFunction; import com.gregtechceu.gtceu.api.recipe.modifier.ParallelLogic; import com.gregtechceu.gtceu.api.recipe.modifier.RecipeModifier; -import com.gregtechceu.gtceu.utils.FormattingUtil; -import net.minecraft.ChatFormatting; import net.minecraft.MethodsReturnNonnullByDefault; -import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.Style; import lombok.Getter; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.List; - import javax.annotation.ParametersAreNonnullByDefault; @ParametersAreNonnullByDefault @@ -189,36 +183,36 @@ public boolean canVoidRecipeOutputs(RecipeCapability capability) { // ******* GUI ********// ////////////////////////////////////// - //@Override - //public void addDisplayText(List textList) { - // super.addDisplayText(textList); - // if (isFormed()) { - // var rotorHolder = getRotorHolder(); -// - // if (rotorHolder != null && rotorHolder.getRotorEfficiency() > 0) { - // textList.add(Component.translatable("gtceu.multiblock.turbine.rotor_speed", - // FormattingUtil.formatNumbers(rotorHolder.getRotorSpeed()), - // FormattingUtil.formatNumbers(rotorHolder.getMaxRotorHolderSpeed()))); - // textList.add(Component.translatable("gtceu.multiblock.turbine.efficiency", - // rotorHolder.getTotalEfficiency())); -// - // long maxProduction = getOverclockVoltage(); - // long currentProduction = getCurrentProduction(); -// - // if (isActive()) { - // textList.add(3, Component.translatable("gtceu.multiblock.turbine.energy_per_tick", - // FormattingUtil.formatNumbers(currentProduction), - // FormattingUtil.formatNumbers(maxProduction))); - // } -// - // int rotorDurability = rotorHolder.getRotorDurabilityPercent(); - // if (rotorDurability > MIN_DURABILITY_TO_WARN) { - // textList.add(Component.translatable("gtceu.multiblock.turbine.rotor_durability", rotorDurability)); - // } else { - // textList.add(Component.translatable("gtceu.multiblock.turbine.rotor_durability", rotorDurability) - // .setStyle(Style.EMPTY.withColor(ChatFormatting.RED))); - // } - // } - // } - //} + // @Override + // public void addDisplayText(List textList) { + // super.addDisplayText(textList); + // if (isFormed()) { + // var rotorHolder = getRotorHolder(); + // + // if (rotorHolder != null && rotorHolder.getRotorEfficiency() > 0) { + // textList.add(Component.translatable("gtceu.multiblock.turbine.rotor_speed", + // FormattingUtil.formatNumbers(rotorHolder.getRotorSpeed()), + // FormattingUtil.formatNumbers(rotorHolder.getMaxRotorHolderSpeed()))); + // textList.add(Component.translatable("gtceu.multiblock.turbine.efficiency", + // rotorHolder.getTotalEfficiency())); + // + // long maxProduction = getOverclockVoltage(); + // long currentProduction = getCurrentProduction(); + // + // if (isActive()) { + // textList.add(3, Component.translatable("gtceu.multiblock.turbine.energy_per_tick", + // FormattingUtil.formatNumbers(currentProduction), + // FormattingUtil.formatNumbers(maxProduction))); + // } + // + // int rotorDurability = rotorHolder.getRotorDurabilityPercent(); + // if (rotorDurability > MIN_DURABILITY_TO_WARN) { + // textList.add(Component.translatable("gtceu.multiblock.turbine.rotor_durability", rotorDurability)); + // } else { + // textList.add(Component.translatable("gtceu.multiblock.turbine.rotor_durability", rotorDurability) + // .setStyle(Style.EMPTY.withColor(ChatFormatting.RED))); + // } + // } + // } + // } } diff --git a/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java b/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java index b1ead3484ca..36d9c9511d8 100644 --- a/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java +++ b/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java @@ -25,9 +25,7 @@ public static void init() { } } - void myMethod() { - - } + void myMethod() {} @Configurable.ValueUpdateCallback(method = "myMethod") @Configurable diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityMachineRecipeLoader.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityMachineRecipeLoader.java index 7b32b8e3e53..0ed200e7499 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityMachineRecipeLoader.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityMachineRecipeLoader.java @@ -14,11 +14,11 @@ import net.minecraft.data.recipes.FinishedRecipe; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; import appeng.core.definitions.AEBlocks; import appeng.core.definitions.AEItems; import appeng.core.definitions.AEParts; -import net.minecraft.world.item.Items; import java.util.Locale; import java.util.function.Consumer; @@ -36,11 +36,10 @@ public class MetaTileEntityMachineRecipeLoader { public static void init(Consumer provider) { - ASSEMBLER_RECIPES.recipeBuilder("test_drum") .inputItems(STEEL_DRUM, 2) .outputItems(Items.DIRT, 3) - .duration((int)SECONDS * 3) + .duration((int) SECONDS * 3) .EUt(400) .save(provider); From 63dfe6863171de57a72e38ad3a8f0c443552c524 Mon Sep 17 00:00:00 2001 From: YoungOnion <39562198+YoungOnionMC@users.noreply.github.com> Date: Mon, 5 Jan 2026 15:33:47 -0700 Subject: [PATCH 06/22] test2 --- ...CoilWorkableElectricMultiblockMachine.java | 2 +- .../data/mui/GTMultiblockPanelUtil.java | 32 +++++++++++++------ 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/CoilWorkableElectricMultiblockMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/CoilWorkableElectricMultiblockMachine.java index b978d0e80b3..b64768d1311 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/CoilWorkableElectricMultiblockMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/CoilWorkableElectricMultiblockMachine.java @@ -76,7 +76,7 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet .left(3).top(3) .child(new Row() .child(widget1) - .child(panelUtil.getMainTextPanel()) + .child(panelUtil.getMainTextPanel(syncManager)) .child(widget2)) .child(new Column() .widthRel(1) diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java index 51c1c062b37..4258100bb02 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java @@ -6,12 +6,17 @@ import com.gregtechceu.gtceu.api.mui.base.drawable.IDrawable; import com.gregtechceu.gtceu.api.mui.base.drawable.IKey; import com.gregtechceu.gtceu.api.mui.base.widget.IWidget; +import com.gregtechceu.gtceu.api.mui.value.sync.BooleanSyncValue; +import com.gregtechceu.gtceu.api.mui.value.sync.DoubleSyncValue; +import com.gregtechceu.gtceu.api.mui.value.sync.IntSyncValue; +import com.gregtechceu.gtceu.api.mui.value.sync.PanelSyncManager; import com.gregtechceu.gtceu.api.mui.widget.EmptyWidget; import com.gregtechceu.gtceu.api.mui.widget.ParentWidget; import com.gregtechceu.gtceu.api.mui.widget.Widget; import com.gregtechceu.gtceu.api.mui.widgets.DynamicSyncedWidget; import com.gregtechceu.gtceu.api.mui.widgets.ListWidget; import com.gregtechceu.gtceu.common.mui.GTGuiTextures; +import net.minecraft.network.chat.Component; public class GTMultiblockPanelUtil { @@ -21,25 +26,34 @@ public GTMultiblockPanelUtil(MultiblockControllerMachine controller) { this.controller = controller; } - public Widget getMainTextPanel() { + public Widget getMainTextPanel(PanelSyncManager syncManager) { boolean isFormed = controller.isFormed(); var parentWidget = new ParentWidget<>(); var listWidget = new ListWidget<>() - .coverChildren(); + .coverChildrenWidth(); parentWidget.size(187, 90) .child(new IDrawable.DrawableWidget(GTGuiTextures.MUI_DISPLAY).widthRel(1.0f).heightRel(1.0f)); if (controller instanceof IRecipeLogicMachine rlMachine) { - var recipeLogic = rlMachine.getRecipeLogic(); - boolean isActive = recipeLogic.isActive(); - boolean isWorking = recipeLogic.isWorking(); + //var recipeLogic = rlMachine.getRecipeLogic(); - listWidget.child(IKey - .dynamic(() -> GTMultiblockTextUtil.addProgressLine(isFormed, isActive, recipeLogic.getProgress(), - recipeLogic.getMaxProgress(), recipeLogic.getProgressPercent())) + //boolean isWorking = recipeLogic.isWorking(); + + /*var isActiveSync = new BooleanSyncValue(rlMachine.getRecipeLogic()::isActive); + syncManager.syncValue("isActive", isActiveSync); + var isWorkingSync = new BooleanSyncValue(rlMachine.getRecipeLogic()::isWorking); + syncManager.syncValue("isWorking", isWorkingSync);*/ + var currentProgressSync = new IntSyncValue(() -> rlMachine.getRecipeLogic().getProgress(), (i) -> {}); + syncManager.syncValue("currentProgress", currentProgressSync); + + listWidget.child(IKey.dynamic(() -> Component.translatable("gtceu.multiblock.progress", + String.format("%.2f", (float) currentProgressSync.getIntValue()), + String.format("%.2f", (float) 100.0f), 0.0f)) + //.dynamic(() -> GTMultiblockTextUtil.addProgressLine(controller.isFormed(), isActiveSync.getBoolValue(), currentProgressSync.getIntValue(), + // recipeLogic.getMaxProgress(), recipeLogic.getProgressPercent())) .asWidget() - .tooltipAutoUpdate(true)); + ); } parentWidget.child(listWidget.left(3).top(3)); return parentWidget; From 93f859fe7698d6a12184137ce3adb3b73c6266f1 Mon Sep 17 00:00:00 2001 From: YoungOnion <39562198+YoungOnionMC@users.noreply.github.com> Date: Tue, 6 Jan 2026 05:12:14 -0700 Subject: [PATCH 07/22] attempt 3 --- .../CoilWorkableElectricMultiblockMachine.java | 17 +++++++++-------- .../common/data/mui/GTMultiblockPanelUtil.java | 2 +- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/CoilWorkableElectricMultiblockMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/CoilWorkableElectricMultiblockMachine.java index b64768d1311..5d2ac904980 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/CoilWorkableElectricMultiblockMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/CoilWorkableElectricMultiblockMachine.java @@ -60,7 +60,7 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet // IntSyncValue coilTierSV = new IntSyncValue(() -> this.coilTier); // syncManager.syncValue("coil", coilTierSV); - UITexture coilTexture = new UITexture.Builder().location(CoilBlock.CoilType.values()[0].getTexture()) + UITexture coilTexture = new UITexture.Builder().location(CoilBlock.CoilType.values()[5].getTexture()) .imageSize(16, 16).colorType(ColorType.DEFAULT).tiled().build(); // var coilWidget = coilTexture.asWidget().size(4, 16).heightRel(1.0f); @@ -78,12 +78,13 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet .child(widget1) .child(panelUtil.getMainTextPanel(syncManager)) .child(widget2)) - .child(new Column() - .widthRel(1) - .crossAxisAlignment(Alignment.CrossAxis.START) - .childPadding(1) - .child(new Rectangle().setColor(0xFF606060).asWidget() - .size(40, 1)) + //.child(new Column() + // .widthRel(1) + // .crossAxisAlignment(Alignment.CrossAxis.START) + // .childPadding(1) + // .alignY(0.5f) + // .child(new Rectangle().setColor(0xFF606060).asWidget() + // .size(40, 1)) /* * .child(IKey.dynamic(() -> * GTMultiblockTextUtil.addProgressLine(isFormed, isActive(), @@ -97,7 +98,7 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet // getTier()).color(0xffffff).asWidget()) // .child(GTMultiblockTextUtil.addEnergyUsageLine(isFormed, // getEnergyContainer()).color(0xffffff).asWidget()) - .left(20)) + // .left(20)) ) .child(new Column() diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java index 4258100bb02..9ff2d7665ba 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java @@ -52,7 +52,7 @@ public Widget getMainTextPanel(PanelSyncManager syncManager) { String.format("%.2f", (float) 100.0f), 0.0f)) //.dynamic(() -> GTMultiblockTextUtil.addProgressLine(controller.isFormed(), isActiveSync.getBoolValue(), currentProgressSync.getIntValue(), // recipeLogic.getMaxProgress(), recipeLogic.getProgressPercent())) - .asWidget() + .asWidget().setEnabledIf((r) -> rlMachine.getRecipeLogic().isWorking()) ); } parentWidget.child(listWidget.left(3).top(3)); From d883c8c5631af80894e3f868e10dd87dc05923a7 Mon Sep 17 00:00:00 2001 From: YoungOnion <39562198+YoungOnionMC@users.noreply.github.com> Date: Wed, 7 Jan 2026 12:17:01 -0700 Subject: [PATCH 08/22] more text stuff --- .../data/mui/GTMultiblockPanelUtil.java | 39 +++++------ .../common/data/mui/GTMultiblockTextUtil.java | 67 ++++++++++++++++--- 2 files changed, 72 insertions(+), 34 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java index 9ff2d7665ba..7bf90b5d126 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java @@ -1,15 +1,17 @@ package com.gregtechceu.gtceu.common.data.mui; import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; +import com.gregtechceu.gtceu.api.machine.feature.ITieredMachine; +import com.gregtechceu.gtceu.api.machine.feature.multiblock.IWorkableMultiController; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; import com.gregtechceu.gtceu.api.mui.base.drawable.IDrawable; import com.gregtechceu.gtceu.api.mui.base.drawable.IKey; import com.gregtechceu.gtceu.api.mui.base.widget.IWidget; -import com.gregtechceu.gtceu.api.mui.value.sync.BooleanSyncValue; -import com.gregtechceu.gtceu.api.mui.value.sync.DoubleSyncValue; -import com.gregtechceu.gtceu.api.mui.value.sync.IntSyncValue; -import com.gregtechceu.gtceu.api.mui.value.sync.PanelSyncManager; +import com.gregtechceu.gtceu.api.mui.drawable.Icon; +import com.gregtechceu.gtceu.api.mui.utils.Alignment; +import com.gregtechceu.gtceu.api.mui.utils.Color; +import com.gregtechceu.gtceu.api.mui.value.sync.*; import com.gregtechceu.gtceu.api.mui.widget.EmptyWidget; import com.gregtechceu.gtceu.api.mui.widget.ParentWidget; import com.gregtechceu.gtceu.api.mui.widget.Widget; @@ -18,6 +20,8 @@ import com.gregtechceu.gtceu.common.mui.GTGuiTextures; import net.minecraft.network.chat.Component; +import java.util.Map; + public class GTMultiblockPanelUtil { private MultiblockControllerMachine controller; @@ -31,29 +35,18 @@ public Widget getMainTextPanel(PanelSyncManager syncManager) { var parentWidget = new ParentWidget<>(); var listWidget = new ListWidget<>() - .coverChildrenWidth(); + .widthRel(1f) + .heightRel(1f) + .childSeparator(Icon.EMPTY_2PX); parentWidget.size(187, 90) .child(new IDrawable.DrawableWidget(GTGuiTextures.MUI_DISPLAY).widthRel(1.0f).heightRel(1.0f)); - if (controller instanceof IRecipeLogicMachine rlMachine) { - //var recipeLogic = rlMachine.getRecipeLogic(); - - //boolean isWorking = recipeLogic.isWorking(); + if (controller instanceof IWorkableMultiController rlMachine) { + listWidget.child(GTMultiblockTextUtil.addProgressLine(rlMachine, syncManager).alignX(Alignment.CenterLeft)); - /*var isActiveSync = new BooleanSyncValue(rlMachine.getRecipeLogic()::isActive); - syncManager.syncValue("isActive", isActiveSync); - var isWorkingSync = new BooleanSyncValue(rlMachine.getRecipeLogic()::isWorking); - syncManager.syncValue("isWorking", isWorkingSync);*/ - var currentProgressSync = new IntSyncValue(() -> rlMachine.getRecipeLogic().getProgress(), (i) -> {}); - syncManager.syncValue("currentProgress", currentProgressSync); - - listWidget.child(IKey.dynamic(() -> Component.translatable("gtceu.multiblock.progress", - String.format("%.2f", (float) currentProgressSync.getIntValue()), - String.format("%.2f", (float) 100.0f), 0.0f)) - //.dynamic(() -> GTMultiblockTextUtil.addProgressLine(controller.isFormed(), isActiveSync.getBoolValue(), currentProgressSync.getIntValue(), - // recipeLogic.getMaxProgress(), recipeLogic.getProgressPercent())) - .asWidget().setEnabledIf((r) -> rlMachine.getRecipeLogic().isWorking()) - ); + if (rlMachine instanceof ITieredMachine tieredMachine) { + listWidget.child(GTMultiblockTextUtil.addEnergyTierLine(rlMachine, syncManager, tieredMachine.getTier()).alignX(Alignment.CenterLeft)); + } } parentWidget.child(listWidget.left(3).top(3)); return parentWidget; diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockTextUtil.java b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockTextUtil.java index 7e44a4f2f0a..b1142eeeb15 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockTextUtil.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockTextUtil.java @@ -2,7 +2,19 @@ import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.capability.IEnergyContainer; +import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; +import com.gregtechceu.gtceu.api.machine.feature.multiblock.IWorkableMultiController; +import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; import com.gregtechceu.gtceu.api.mui.base.drawable.IKey; +import com.gregtechceu.gtceu.api.mui.base.widget.IWidget; +import com.gregtechceu.gtceu.api.mui.utils.Color; +import com.gregtechceu.gtceu.api.mui.value.sync.BooleanSyncValue; +import com.gregtechceu.gtceu.api.mui.value.sync.DoubleSyncValue; +import com.gregtechceu.gtceu.api.mui.value.sync.IntSyncValue; +import com.gregtechceu.gtceu.api.mui.value.sync.PanelSyncManager; +import com.gregtechceu.gtceu.api.mui.widgets.ListWidget; +import com.gregtechceu.gtceu.api.mui.widgets.TextWidget; +import com.gregtechceu.gtceu.client.mui.screen.RichTooltip; import com.gregtechceu.gtceu.utils.FormattingUtil; import com.gregtechceu.gtceu.utils.GTUtil; @@ -48,16 +60,49 @@ public static IKey addEnergyTierLine(boolean formed, int tier) { .withStyle(style -> style.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverText)))); } - public static Component addProgressLine(boolean formed, boolean active, double currentDuration, double maxDuration, - double progressPercent) { - if (!formed || !active) - return CommonComponents.EMPTY; - - int currentProgress = (int) (progressPercent * 100); - double currentInSec = currentDuration / 20.0; - double maxInSec = maxDuration / 20.0; - return Component.translatable("gtceu.multiblock.progress", - String.format("%.2f", (float) currentInSec), - String.format("%.2f", (float) maxInSec), currentProgress); + public static TextWidget addProgressLine(IWorkableMultiController rlMachine, PanelSyncManager syncManager) { + BooleanSyncValue isFormed = syncManager.getOrCreateSyncHandler("isFormed", BooleanSyncValue.class, + () -> new BooleanSyncValue(rlMachine::isFormed)); + + BooleanSyncValue isActive = syncManager.getOrCreateSyncHandler("isActive", BooleanSyncValue.class, + () -> new BooleanSyncValue(() -> rlMachine.getRecipeLogic().isActive())); + IntSyncValue currentProgress = syncManager.getOrCreateSyncHandler("currentProgress", IntSyncValue.class, + () -> new IntSyncValue(() -> rlMachine.getRecipeLogic().getProgress())); + IntSyncValue maxProgress = syncManager.getOrCreateSyncHandler("maxProgress", IntSyncValue.class, + () -> new IntSyncValue(() -> rlMachine.getRecipeLogic().getMaxProgress())); + DoubleSyncValue progressPercent = syncManager.getOrCreateSyncHandler("progressPercent", DoubleSyncValue.class, + () -> new DoubleSyncValue(() -> rlMachine.getRecipeLogic().getProgressPercent())); + + return IKey.dynamic(() -> { + int progress = (int) (progressPercent.getDoubleValue() * 100.f); + float current = (float) currentProgress.getDoubleValue() / 20.f; + float max = (float) maxProgress.getDoubleValue() / 20.f; + return Component.translatable("gtceu.multiblock.progress", + String.format("%.2f", current), String.format("%.2f", max), progress); + }) + .color(Color.WHITE.main) + .asWidget() + .setEnabledIf(widget -> isFormed.getBoolValue() && isActive.getBoolValue()); + } + + public static TextWidget addEnergyTierLine(IWorkableMultiController rlMachine, PanelSyncManager syncManager, int tier) { + BooleanSyncValue isFormed = syncManager.getOrCreateSyncHandler("isFormed", BooleanSyncValue.class, + () -> new BooleanSyncValue(rlMachine::isFormed)); + + return IKey.dynamic(() -> { + Component voltageName = Component.literal(GTValues.VNF[tier]); + return Component.translatable( + "gtceu.multiblock.max_recipe_tier", + voltageName).withStyle(ChatFormatting.GRAY); + }) + .asWidget() + .tooltip(new RichTooltip().add(Component.translatable("gtceu.multiblock.max_recipe_tier_hover") + .withStyle(ChatFormatting.GRAY))) + .setEnabledIf(widget -> isFormed.getBoolValue()); + + } + + public static void addOutputLines(IWorkableMultiController rlmachine, PanelSyncManager syncManager, ListWidget listWidget) { + } } From e8cecbd84303b20f173d3eae05a1910c73650396 Mon Sep 17 00:00:00 2001 From: YoungOnionMC Date: Fri, 16 Jan 2026 14:31:54 -0700 Subject: [PATCH 09/22] some more text functions --- .../data/mui/GTMultiblockPanelUtil.java | 14 +++- .../common/data/mui/GTMultiblockTextUtil.java | 75 +++++++++++++++++++ 2 files changed, 86 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java index 7bf90b5d126..b8b18479017 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java @@ -37,16 +37,24 @@ public Widget getMainTextPanel(PanelSyncManager syncManager) { var listWidget = new ListWidget<>() .widthRel(1f) .heightRel(1f) - .childSeparator(Icon.EMPTY_2PX); + .childSeparator(Icon.EMPTY_2PX) + .alignX(Alignment.CenterLeft); parentWidget.size(187, 90) .child(new IDrawable.DrawableWidget(GTGuiTextures.MUI_DISPLAY).widthRel(1.0f).heightRel(1.0f)); if (controller instanceof IWorkableMultiController rlMachine) { - listWidget.child(GTMultiblockTextUtil.addProgressLine(rlMachine, syncManager).alignX(Alignment.CenterLeft)); + listWidget.child(GTMultiblockTextUtil.addProgressLine(rlMachine, syncManager) + .alignX(Alignment.CenterLeft)); if (rlMachine instanceof ITieredMachine tieredMachine) { - listWidget.child(GTMultiblockTextUtil.addEnergyTierLine(rlMachine, syncManager, tieredMachine.getTier()).alignX(Alignment.CenterLeft)); + listWidget.child(GTMultiblockTextUtil.addEnergyTierLine(rlMachine, syncManager, tieredMachine.getTier()) + .alignX(Alignment.CenterLeft)); } + + listWidget.child(GTMultiblockTextUtil.addParallelLine(rlMachine, syncManager)); + listWidget.child(GTMultiblockTextUtil.addBatchModeLine(rlMachine, syncManager)); + listWidget.child(GTMultiblockTextUtil.addSubtickParallelsLine(rlMachine, syncManager)); + listWidget.child(GTMultiblockTextUtil.addTotalRunsLine(rlMachine, syncManager)); } parentWidget.child(listWidget.left(3).top(3)); return parentWidget; diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockTextUtil.java b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockTextUtil.java index b1142eeeb15..096a8746d68 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockTextUtil.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockTextUtil.java @@ -5,6 +5,7 @@ import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IWorkableMultiController; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; +import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockDisplayText; import com.gregtechceu.gtceu.api.mui.base.drawable.IKey; import com.gregtechceu.gtceu.api.mui.base.widget.IWidget; import com.gregtechceu.gtceu.api.mui.utils.Color; @@ -102,6 +103,80 @@ public static TextWidget addEnergyTierLine(IWorkableMultiController rlMachine } + public static TextWidget addParallelLine(IWorkableMultiController rlMachine, PanelSyncManager syncManager) { + + IntSyncValue parallelAmount = syncManager.getOrCreateSyncHandler("parallelAmount", IntSyncValue.class, () -> + new IntSyncValue(() -> { + if (rlMachine.getRecipeLogic().getLastRecipe() == null) return 0; + return rlMachine.getRecipeLogic().getLastRecipe().parallels; + })); + + return IKey.dynamic(() -> { + Component runs = Component.literal(FormattingUtil.formatNumbers(parallelAmount.getIntValue())) + .withStyle(ChatFormatting.DARK_PURPLE); + String key = "gtceu.multiblock.parallel"; + return Component.translatable(key, runs) + .withStyle(ChatFormatting.GRAY); + }).asWidget() + .setEnabledIf(widget -> parallelAmount.getIntValue() != 0); + } + + public static TextWidget addBatchModeLine(IWorkableMultiController rlMachine, PanelSyncManager syncManager) { + + BooleanSyncValue batchEnabled = syncManager.getOrCreateSyncHandler("batchEnabled", BooleanSyncValue.class, () -> + new BooleanSyncValue(rlMachine::isBatchEnabled)); + IntSyncValue batchAmount = syncManager.getOrCreateSyncHandler("batchAmount", IntSyncValue.class, () -> + new IntSyncValue(() -> { + if (rlMachine.getRecipeLogic().getLastRecipe() == null) return 0; + return rlMachine.getRecipeLogic().getLastRecipe().batchParallels; + })); + + return IKey.dynamic(() -> { + Component runs = Component.literal(FormattingUtil.formatNumbers(batchAmount.getIntValue())) + .withStyle(ChatFormatting.DARK_PURPLE); + String key = "gtceu.multiblock.batch_enabled"; + return Component.translatable(key, runs) + .withStyle(ChatFormatting.GRAY); + }).asWidget() + .setEnabledIf(widget -> batchEnabled.getBoolValue() && batchAmount.getIntValue() != 0); + } + + public static TextWidget addSubtickParallelsLine(IWorkableMultiController rlMachine, PanelSyncManager syncManager) { + + IntSyncValue subtickAmount = syncManager.getOrCreateSyncHandler("subtickAmount", IntSyncValue.class, () -> + new IntSyncValue(() -> { + if (rlMachine.getRecipeLogic().getLastRecipe() == null) return 0; + return rlMachine.getRecipeLogic().getLastRecipe().subtickParallels; + })); + + return IKey.dynamic(() -> { + Component runs = Component.literal(FormattingUtil.formatNumbers(subtickAmount.getIntValue())) + .withStyle(ChatFormatting.DARK_PURPLE); + String key = "gtceu.multiblock.subtick_parallels"; + return Component.translatable(key, runs) + .withStyle(ChatFormatting.GRAY); + }).asWidget() + .setEnabledIf(widget -> subtickAmount.getIntValue() != 0); + } + + public static TextWidget addTotalRunsLine(IWorkableMultiController rlMachine, PanelSyncManager syncManager) { + + IntSyncValue totalRunAmount = syncManager.getOrCreateSyncHandler("totalRunAmount", IntSyncValue.class, () -> + new IntSyncValue(() -> { + if (rlMachine.getRecipeLogic().getLastRecipe() == null) return 0; + return rlMachine.getRecipeLogic().getLastRecipe().getTotalRuns(); + })); + + return IKey.dynamic(() -> { + Component runs = Component.literal(FormattingUtil.formatNumbers(totalRunAmount.getIntValue())) + .withStyle(ChatFormatting.DARK_PURPLE); + String key = "gtceu.multiblock.total_runs"; + return Component.translatable(key, runs) + .withStyle(ChatFormatting.GRAY); + }).asWidget() + .setEnabledIf(widget -> totalRunAmount.getIntValue() != 0); + } + public static void addOutputLines(IWorkableMultiController rlmachine, PanelSyncManager syncManager, ListWidget listWidget) { } From fb6f5ac371da57a7e04a17f48f4fcd05d42b52fc Mon Sep 17 00:00:00 2001 From: YoungOnion <39562198+YoungOnionMC@users.noreply.github.com> Date: Mon, 19 Jan 2026 10:21:03 -0700 Subject: [PATCH 10/22] more funcs p2 --- .../WorkableElectricMultiblockMachine.java | 1 - .../common/data/mui/GTMultiblockTextUtil.java | 22 ++++++++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableElectricMultiblockMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableElectricMultiblockMachine.java index c457740943d..bb13387b9a3 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableElectricMultiblockMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableElectricMultiblockMachine.java @@ -7,7 +7,6 @@ import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.capability.recipe.IRecipeHandler; import com.gregtechceu.gtceu.api.gui.fancy.*; -import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.feature.IMuiMachine; import com.gregtechceu.gtceu.api.machine.feature.IOverclockMachine; import com.gregtechceu.gtceu.api.machine.feature.ITieredMachine; diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockTextUtil.java b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockTextUtil.java index 096a8746d68..544ea5f061e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockTextUtil.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockTextUtil.java @@ -2,6 +2,8 @@ import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.capability.IEnergyContainer; +import com.gregtechceu.gtceu.api.capability.recipe.FluidRecipeCapability; +import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IWorkableMultiController; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; @@ -13,8 +15,13 @@ import com.gregtechceu.gtceu.api.mui.value.sync.DoubleSyncValue; import com.gregtechceu.gtceu.api.mui.value.sync.IntSyncValue; import com.gregtechceu.gtceu.api.mui.value.sync.PanelSyncManager; +import com.gregtechceu.gtceu.api.mui.widget.ParentWidget; import com.gregtechceu.gtceu.api.mui.widgets.ListWidget; import com.gregtechceu.gtceu.api.mui.widgets.TextWidget; +import com.gregtechceu.gtceu.api.recipe.GTRecipe; +import com.gregtechceu.gtceu.api.recipe.RecipeHelper; +import com.gregtechceu.gtceu.api.recipe.ingredient.IntProviderFluidIngredient; +import com.gregtechceu.gtceu.api.recipe.ingredient.IntProviderIngredient; import com.gregtechceu.gtceu.client.mui.screen.RichTooltip; import com.gregtechceu.gtceu.utils.FormattingUtil; import com.gregtechceu.gtceu.utils.GTUtil; @@ -24,6 +31,8 @@ import net.minecraft.network.chat.Component; import net.minecraft.network.chat.HoverEvent; import net.minecraft.network.chat.MutableComponent; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; public class GTMultiblockTextUtil { @@ -177,7 +186,18 @@ public static TextWidget addTotalRunsLine(IWorkableMultiController rlMachine, .setEnabledIf(widget -> totalRunAmount.getIntValue() != 0); } - public static void addOutputLines(IWorkableMultiController rlmachine, PanelSyncManager syncManager, ListWidget listWidget) { + public static ParentWidget addOutputLines(IWorkableMultiController rlmachine, PanelSyncManager syncManager, ListWidget listWidget) { + BooleanSyncValue hasOutputs = syncManager.getOrCreateSyncHandler("hasRecipeOutputs", BooleanSyncValue.class, () -> + new BooleanSyncValue(() -> { + if (rlmachine.getRecipeLogic().getLastRecipe() == null) return false; + return !rlmachine.getRecipeLogic().getLastRecipe().outputs.isEmpty() || + !rlmachine.getRecipeLogic().getLastRecipe().tickOutputs.isEmpty(); + })); + + return null; + /*return IKey.dynamic(() -> { + return Component.translatable(""); + });*/ } } From 41534aba49a863eadc6f3ca1f398f1105eae7203 Mon Sep 17 00:00:00 2001 From: YoungOnion <39562198+YoungOnionMC@users.noreply.github.com> Date: Tue, 3 Feb 2026 03:38:33 -0700 Subject: [PATCH 11/22] more methods --- ...CoilWorkableElectricMultiblockMachine.java | 6 +- .../data/mui/GTMultiblockPanelUtil.java | 7 ++- .../common/data/mui/GTMultiblockTextUtil.java | 55 +++++++++++-------- 3 files changed, 43 insertions(+), 25 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/CoilWorkableElectricMultiblockMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/CoilWorkableElectricMultiblockMachine.java index 6902c466246..2cf595cf5c8 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/CoilWorkableElectricMultiblockMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/CoilWorkableElectricMultiblockMachine.java @@ -5,6 +5,7 @@ import com.gregtechceu.gtceu.api.mui.drawable.*; import com.gregtechceu.gtceu.api.mui.factory.PosGuiData; import com.gregtechceu.gtceu.api.mui.utils.Alignment; +import com.gregtechceu.gtceu.api.mui.value.sync.IntSyncValue; import com.gregtechceu.gtceu.api.mui.value.sync.PanelSyncManager; import com.gregtechceu.gtceu.api.mui.widget.ParentWidget; import com.gregtechceu.gtceu.api.mui.widgets.SlotGroupWidget; @@ -60,7 +61,10 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet // IntSyncValue coilTierSV = new IntSyncValue(() -> this.coilTier); // syncManager.syncValue("coil", coilTierSV); - UITexture coilTexture = new UITexture.Builder().location(CoilBlock.CoilType.values()[5].getTexture()) + IntSyncValue coilTier = syncManager.getOrCreateSyncHandler("coilTier", IntSyncValue.class, + () -> new IntSyncValue(this::getCoilTier)); + + UITexture coilTexture = new UITexture.Builder().location(CoilBlock.CoilType.values()[coilTier.getIntValue()].getTexture()) .imageSize(16, 16).colorType(ColorType.DEFAULT).tiled().build(); // var coilWidget = coilTexture.asWidget().size(4, 16).heightRel(1.0f); diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java index b8b18479017..bec21a0a47e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java @@ -4,6 +4,7 @@ import com.gregtechceu.gtceu.api.machine.feature.ITieredMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IWorkableMultiController; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; +import com.gregtechceu.gtceu.api.machine.multiblock.WorkableElectricMultiblockMachine; import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; import com.gregtechceu.gtceu.api.mui.base.drawable.IDrawable; import com.gregtechceu.gtceu.api.mui.base.drawable.IKey; @@ -46,11 +47,13 @@ public Widget getMainTextPanel(PanelSyncManager syncManager) { listWidget.child(GTMultiblockTextUtil.addProgressLine(rlMachine, syncManager) .alignX(Alignment.CenterLeft)); - if (rlMachine instanceof ITieredMachine tieredMachine) { - listWidget.child(GTMultiblockTextUtil.addEnergyTierLine(rlMachine, syncManager, tieredMachine.getTier()) + if (rlMachine instanceof WorkableElectricMultiblockMachine workableElectricMachine) { + listWidget.child(GTMultiblockTextUtil.addEnergyTierLine(workableElectricMachine, syncManager) .alignX(Alignment.CenterLeft)); + listWidget.child(GTMultiblockTextUtil.addEnergyUsageLine(workableElectricMachine, syncManager)); } + listWidget.child(GTMultiblockTextUtil.addParallelLine(rlMachine, syncManager)); listWidget.child(GTMultiblockTextUtil.addBatchModeLine(rlMachine, syncManager)); listWidget.child(GTMultiblockTextUtil.addSubtickParallelsLine(rlMachine, syncManager)); diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockTextUtil.java b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockTextUtil.java index 544ea5f061e..417d50bcaec 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockTextUtil.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockTextUtil.java @@ -8,13 +8,11 @@ import com.gregtechceu.gtceu.api.machine.feature.multiblock.IWorkableMultiController; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockDisplayText; +import com.gregtechceu.gtceu.api.machine.multiblock.WorkableElectricMultiblockMachine; import com.gregtechceu.gtceu.api.mui.base.drawable.IKey; import com.gregtechceu.gtceu.api.mui.base.widget.IWidget; import com.gregtechceu.gtceu.api.mui.utils.Color; -import com.gregtechceu.gtceu.api.mui.value.sync.BooleanSyncValue; -import com.gregtechceu.gtceu.api.mui.value.sync.DoubleSyncValue; -import com.gregtechceu.gtceu.api.mui.value.sync.IntSyncValue; -import com.gregtechceu.gtceu.api.mui.value.sync.PanelSyncManager; +import com.gregtechceu.gtceu.api.mui.value.sync.*; import com.gregtechceu.gtceu.api.mui.widget.ParentWidget; import com.gregtechceu.gtceu.api.mui.widgets.ListWidget; import com.gregtechceu.gtceu.api.mui.widgets.TextWidget; @@ -36,24 +34,34 @@ public class GTMultiblockTextUtil { - public static IKey addEnergyUsageLine(boolean formed, IEnergyContainer energyContainer) { - if (formed && energyContainer != null && energyContainer.getEnergyCapacity() > 0) { - long maxVoltage = Math.max(energyContainer.getInputVoltage(), energyContainer.getOutputVoltage()); + public static TextWidget addEnergyUsageLine(WorkableElectricMultiblockMachine weMachine, PanelSyncManager syncManager) { - String energyFormatted = FormattingUtil.formatNumbers(maxVoltage); - // wrap in text component to keep it from being formatted - byte voltageTier = GTUtil.getFloorTierByVoltage(maxVoltage); - Component voltageName = Component.literal( - GTValues.VNF[voltageTier]); + LongSyncValue energyUsage = syncManager.getOrCreateSyncHandler("energyUsage", LongSyncValue.class, + () -> new LongSyncValue(() -> { + var energyList = weMachine.getEnergyContainer(); + return Math.max(energyList.getInputVoltage(), energyList.getOutputVoltage()); + })); + BooleanSyncValue isFormed = syncManager.getOrCreateSyncHandler("isFormed", BooleanSyncValue.class, + () -> new BooleanSyncValue(weMachine::isFormed)); + BooleanSyncValue isActive = syncManager.getOrCreateSyncHandler("isActive", BooleanSyncValue.class, + () -> new BooleanSyncValue(() -> weMachine.getRecipeLogic().isActive())); - MutableComponent bodyText = Component.translatable("gtceu.multiblock.max_energy_per_tick", - energyFormatted, voltageName).withStyle(ChatFormatting.GRAY); - Component hoverText = Component.translatable("gtceu.multiblock.max_energy_per_tick_hover") - .withStyle(ChatFormatting.GRAY); - return IKey.dynamic(() -> bodyText.withStyle( - style -> style.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverText)))); - } - return IKey.EMPTY; + return IKey.dynamic(() -> { + String energyFormatted = FormattingUtil.formatNumbers(energyUsage.getLongValue()); + + byte voltageTier = GTUtil.getFloorTierByVoltage(energyUsage.getLongValue()); + Component voltageName = Component.literal( + GTValues.VNF[voltageTier]); + + MutableComponent bodyText = Component.translatable("gtceu.multiblock.max_energy_per_tick", + energyFormatted, voltageName).withStyle(ChatFormatting.GRAY); + Component hoverText = Component.translatable("gtceu.multiblock.max_energy_per_tick_hover") + .withStyle(ChatFormatting.GRAY); + return bodyText.withStyle(style -> style.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverText))); + }) + .color(Color.WHITE.main) + .asWidget() + .setEnabledIf(widget -> isFormed.getBoolValue() && isActive.getBoolValue()); } public static IKey addEnergyTierLine(boolean formed, int tier) { @@ -95,12 +103,15 @@ public static TextWidget addProgressLine(IWorkableMultiController rlMachine, .setEnabledIf(widget -> isFormed.getBoolValue() && isActive.getBoolValue()); } - public static TextWidget addEnergyTierLine(IWorkableMultiController rlMachine, PanelSyncManager syncManager, int tier) { + public static TextWidget addEnergyTierLine(WorkableElectricMultiblockMachine rlMachine, PanelSyncManager syncManager) { BooleanSyncValue isFormed = syncManager.getOrCreateSyncHandler("isFormed", BooleanSyncValue.class, () -> new BooleanSyncValue(rlMachine::isFormed)); + IntSyncValue tier = syncManager.getOrCreateSyncHandler("energyTier", IntSyncValue.class, + () -> new IntSyncValue(rlMachine::getTier)); + return IKey.dynamic(() -> { - Component voltageName = Component.literal(GTValues.VNF[tier]); + Component voltageName = Component.literal(GTValues.VNF[tier.getIntValue()]); return Component.translatable( "gtceu.multiblock.max_recipe_tier", voltageName).withStyle(ChatFormatting.GRAY); From 64baa7256ee1df8fbe33311fc0a48dfbae6ce492 Mon Sep 17 00:00:00 2001 From: jurrejelle Date: Tue, 3 Feb 2026 14:02:53 +0100 Subject: [PATCH 12/22] Fix coil drawable syncing --- ...CoilWorkableElectricMultiblockMachine.java | 53 +++---- .../WorkableElectricMultiblockMachine.java | 4 - .../data/mui/GTMultiblockPanelUtil.java | 7 - .../common/data/mui/GTMultiblockTextUtil.java | 136 ++++++++---------- 4 files changed, 90 insertions(+), 110 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/CoilWorkableElectricMultiblockMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/CoilWorkableElectricMultiblockMachine.java index 2cf595cf5c8..22c503b8efe 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/CoilWorkableElectricMultiblockMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/CoilWorkableElectricMultiblockMachine.java @@ -2,9 +2,9 @@ import com.gregtechceu.gtceu.api.block.ICoilType; import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; +import com.gregtechceu.gtceu.api.mui.base.drawable.IDrawable; import com.gregtechceu.gtceu.api.mui.drawable.*; import com.gregtechceu.gtceu.api.mui.factory.PosGuiData; -import com.gregtechceu.gtceu.api.mui.utils.Alignment; import com.gregtechceu.gtceu.api.mui.value.sync.IntSyncValue; import com.gregtechceu.gtceu.api.mui.value.sync.PanelSyncManager; import com.gregtechceu.gtceu.api.mui.widget.ParentWidget; @@ -23,6 +23,8 @@ import lombok.Getter; +import java.util.function.Supplier; + import javax.annotation.ParametersAreNonnullByDefault; @ParametersAreNonnullByDefault @@ -64,13 +66,14 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet IntSyncValue coilTier = syncManager.getOrCreateSyncHandler("coilTier", IntSyncValue.class, () -> new IntSyncValue(this::getCoilTier)); - UITexture coilTexture = new UITexture.Builder().location(CoilBlock.CoilType.values()[coilTier.getIntValue()].getTexture()) + Supplier coilTexture = () -> new UITexture.Builder() + .location(CoilBlock.CoilType.values()[coilTier.getIntValue()].getTexture()) .imageSize(16, 16).colorType(ColorType.DEFAULT).tiled().build(); // var coilWidget = coilTexture.asWidget().size(4, 16).heightRel(1.0f); - var widget1 = coilTexture.asWidget().size(4, 16).heightRel(1.0f); - var widget2 = coilTexture.asWidget().size(4, 16).heightRel(1.0f); + var widget1 = new DynamicDrawable(coilTexture).asWidget().size(4, 16).heightRel(1.0f); + var widget2 = new DynamicDrawable(coilTexture).asWidget().size(4, 16).heightRel(1.0f); panel.child(GTMuiWidgets.createTitleBar(this.getDefinition(), 176 + 36)) .child(new ParentWidget<>() @@ -82,27 +85,27 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet .child(widget1) .child(panelUtil.getMainTextPanel(syncManager)) .child(widget2)) - //.child(new Column() - // .widthRel(1) - // .crossAxisAlignment(Alignment.CrossAxis.START) - // .childPadding(1) - // .alignY(0.5f) - // .child(new Rectangle().setColor(0xFF606060).asWidget() - // .size(40, 1)) - /* - * .child(IKey.dynamic(() -> - * GTMultiblockTextUtil.addProgressLine(isFormed, isActive(), - * getRecipeLogic().getProgress(), getRecipeLogic().getMaxProgress(), - * getRecipeLogic().getProgressPercent())) - * .color(0xffffff) - * .asWidget() - * ) - */ - // .child(GTMultiblockTextUtil.addEnergyTierLine(isFormed, - // getTier()).color(0xffffff).asWidget()) - // .child(GTMultiblockTextUtil.addEnergyUsageLine(isFormed, - // getEnergyContainer()).color(0xffffff).asWidget()) - // .left(20)) + // .child(new Column() + // .widthRel(1) + // .crossAxisAlignment(Alignment.CrossAxis.START) + // .childPadding(1) + // .alignY(0.5f) + // .child(new Rectangle().setColor(0xFF606060).asWidget() + // .size(40, 1)) + /* + * .child(IKey.dynamic(() -> + * GTMultiblockTextUtil.addProgressLine(isFormed, isActive(), + * getRecipeLogic().getProgress(), getRecipeLogic().getMaxProgress(), + * getRecipeLogic().getProgressPercent())) + * .color(0xffffff) + * .asWidget() + * ) + */ + // .child(GTMultiblockTextUtil.addEnergyTierLine(isFormed, + // getTier()).color(0xffffff).asWidget()) + // .child(GTMultiblockTextUtil.addEnergyUsageLine(isFormed, + // getEnergyContainer()).color(0xffffff).asWidget()) + // .left(20)) ) .child(new Column() diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableElectricMultiblockMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableElectricMultiblockMachine.java index bb13387b9a3..f22b725fac9 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableElectricMultiblockMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableElectricMultiblockMachine.java @@ -10,9 +10,6 @@ import com.gregtechceu.gtceu.api.machine.feature.IMuiMachine; import com.gregtechceu.gtceu.api.machine.feature.IOverclockMachine; import com.gregtechceu.gtceu.api.machine.feature.ITieredMachine; -import com.gregtechceu.gtceu.api.machine.feature.IVoidable; -import com.gregtechceu.gtceu.api.machine.feature.multiblock.IDisplayUIMachine; -import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiPart; import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; import com.gregtechceu.gtceu.api.misc.EnergyContainerList; import com.gregtechceu.gtceu.api.mui.factory.PosGuiData; @@ -31,7 +28,6 @@ import java.util.ArrayList; import java.util.List; -import java.util.Objects; import java.util.function.Function; import javax.annotation.ParametersAreNonnullByDefault; diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java index bec21a0a47e..1deb64e73b7 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java @@ -1,17 +1,14 @@ package com.gregtechceu.gtceu.common.data.mui; import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; -import com.gregtechceu.gtceu.api.machine.feature.ITieredMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IWorkableMultiController; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; import com.gregtechceu.gtceu.api.machine.multiblock.WorkableElectricMultiblockMachine; import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; import com.gregtechceu.gtceu.api.mui.base.drawable.IDrawable; -import com.gregtechceu.gtceu.api.mui.base.drawable.IKey; import com.gregtechceu.gtceu.api.mui.base.widget.IWidget; import com.gregtechceu.gtceu.api.mui.drawable.Icon; import com.gregtechceu.gtceu.api.mui.utils.Alignment; -import com.gregtechceu.gtceu.api.mui.utils.Color; import com.gregtechceu.gtceu.api.mui.value.sync.*; import com.gregtechceu.gtceu.api.mui.widget.EmptyWidget; import com.gregtechceu.gtceu.api.mui.widget.ParentWidget; @@ -19,9 +16,6 @@ import com.gregtechceu.gtceu.api.mui.widgets.DynamicSyncedWidget; import com.gregtechceu.gtceu.api.mui.widgets.ListWidget; import com.gregtechceu.gtceu.common.mui.GTGuiTextures; -import net.minecraft.network.chat.Component; - -import java.util.Map; public class GTMultiblockPanelUtil { @@ -53,7 +47,6 @@ public Widget getMainTextPanel(PanelSyncManager syncManager) { listWidget.child(GTMultiblockTextUtil.addEnergyUsageLine(workableElectricMachine, syncManager)); } - listWidget.child(GTMultiblockTextUtil.addParallelLine(rlMachine, syncManager)); listWidget.child(GTMultiblockTextUtil.addBatchModeLine(rlMachine, syncManager)); listWidget.child(GTMultiblockTextUtil.addSubtickParallelsLine(rlMachine, syncManager)); diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockTextUtil.java b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockTextUtil.java index 417d50bcaec..fc6286b9c2e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockTextUtil.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockTextUtil.java @@ -1,13 +1,7 @@ package com.gregtechceu.gtceu.common.data.mui; import com.gregtechceu.gtceu.api.GTValues; -import com.gregtechceu.gtceu.api.capability.IEnergyContainer; -import com.gregtechceu.gtceu.api.capability.recipe.FluidRecipeCapability; -import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; -import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IWorkableMultiController; -import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; -import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockDisplayText; import com.gregtechceu.gtceu.api.machine.multiblock.WorkableElectricMultiblockMachine; import com.gregtechceu.gtceu.api.mui.base.drawable.IKey; import com.gregtechceu.gtceu.api.mui.base.widget.IWidget; @@ -16,26 +10,19 @@ import com.gregtechceu.gtceu.api.mui.widget.ParentWidget; import com.gregtechceu.gtceu.api.mui.widgets.ListWidget; import com.gregtechceu.gtceu.api.mui.widgets.TextWidget; -import com.gregtechceu.gtceu.api.recipe.GTRecipe; -import com.gregtechceu.gtceu.api.recipe.RecipeHelper; -import com.gregtechceu.gtceu.api.recipe.ingredient.IntProviderFluidIngredient; -import com.gregtechceu.gtceu.api.recipe.ingredient.IntProviderIngredient; import com.gregtechceu.gtceu.client.mui.screen.RichTooltip; import com.gregtechceu.gtceu.utils.FormattingUtil; import com.gregtechceu.gtceu.utils.GTUtil; import net.minecraft.ChatFormatting; -import net.minecraft.network.chat.CommonComponents; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.HoverEvent; import net.minecraft.network.chat.MutableComponent; -import net.minecraft.world.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; public class GTMultiblockTextUtil { - public static TextWidget addEnergyUsageLine(WorkableElectricMultiblockMachine weMachine, PanelSyncManager syncManager) { - + public static TextWidget addEnergyUsageLine(WorkableElectricMultiblockMachine weMachine, + PanelSyncManager syncManager) { LongSyncValue energyUsage = syncManager.getOrCreateSyncHandler("energyUsage", LongSyncValue.class, () -> new LongSyncValue(() -> { var energyList = weMachine.getEnergyContainer(); @@ -47,18 +34,19 @@ public static TextWidget addEnergyUsageLine(WorkableElectricMultiblockMachine () -> new BooleanSyncValue(() -> weMachine.getRecipeLogic().isActive())); return IKey.dynamic(() -> { - String energyFormatted = FormattingUtil.formatNumbers(energyUsage.getLongValue()); - - byte voltageTier = GTUtil.getFloorTierByVoltage(energyUsage.getLongValue()); - Component voltageName = Component.literal( - GTValues.VNF[voltageTier]); - - MutableComponent bodyText = Component.translatable("gtceu.multiblock.max_energy_per_tick", - energyFormatted, voltageName).withStyle(ChatFormatting.GRAY); - Component hoverText = Component.translatable("gtceu.multiblock.max_energy_per_tick_hover") - .withStyle(ChatFormatting.GRAY); - return bodyText.withStyle(style -> style.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverText))); - }) + String energyFormatted = FormattingUtil.formatNumbers(energyUsage.getLongValue()); + + byte voltageTier = GTUtil.getFloorTierByVoltage(energyUsage.getLongValue()); + Component voltageName = Component.literal( + GTValues.VNF[voltageTier]); + + MutableComponent bodyText = Component.translatable("gtceu.multiblock.max_energy_per_tick", + energyFormatted, voltageName).withStyle(ChatFormatting.GRAY); + Component hoverText = Component.translatable("gtceu.multiblock.max_energy_per_tick_hover") + .withStyle(ChatFormatting.GRAY); + return bodyText + .withStyle(style -> style.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverText))); + }) .color(Color.WHITE.main) .asWidget() .setEnabledIf(widget -> isFormed.getBoolValue() && isActive.getBoolValue()); @@ -92,18 +80,19 @@ public static TextWidget addProgressLine(IWorkableMultiController rlMachine, () -> new DoubleSyncValue(() -> rlMachine.getRecipeLogic().getProgressPercent())); return IKey.dynamic(() -> { - int progress = (int) (progressPercent.getDoubleValue() * 100.f); - float current = (float) currentProgress.getDoubleValue() / 20.f; - float max = (float) maxProgress.getDoubleValue() / 20.f; - return Component.translatable("gtceu.multiblock.progress", - String.format("%.2f", current), String.format("%.2f", max), progress); - }) + int progress = (int) (progressPercent.getDoubleValue() * 100.f); + float current = (float) currentProgress.getDoubleValue() / 20.f; + float max = (float) maxProgress.getDoubleValue() / 20.f; + return Component.translatable("gtceu.multiblock.progress", + String.format("%.2f", current), String.format("%.2f", max), progress); + }) .color(Color.WHITE.main) .asWidget() .setEnabledIf(widget -> isFormed.getBoolValue() && isActive.getBoolValue()); } - public static TextWidget addEnergyTierLine(WorkableElectricMultiblockMachine rlMachine, PanelSyncManager syncManager) { + public static TextWidget addEnergyTierLine(WorkableElectricMultiblockMachine rlMachine, + PanelSyncManager syncManager) { BooleanSyncValue isFormed = syncManager.getOrCreateSyncHandler("isFormed", BooleanSyncValue.class, () -> new BooleanSyncValue(rlMachine::isFormed)); @@ -120,33 +109,30 @@ public static TextWidget addEnergyTierLine(WorkableElectricMultiblockMachine .tooltip(new RichTooltip().add(Component.translatable("gtceu.multiblock.max_recipe_tier_hover") .withStyle(ChatFormatting.GRAY))) .setEnabledIf(widget -> isFormed.getBoolValue()); - } public static TextWidget addParallelLine(IWorkableMultiController rlMachine, PanelSyncManager syncManager) { - - IntSyncValue parallelAmount = syncManager.getOrCreateSyncHandler("parallelAmount", IntSyncValue.class, () -> - new IntSyncValue(() -> { + IntSyncValue parallelAmount = syncManager.getOrCreateSyncHandler("parallelAmount", IntSyncValue.class, + () -> new IntSyncValue(() -> { if (rlMachine.getRecipeLogic().getLastRecipe() == null) return 0; return rlMachine.getRecipeLogic().getLastRecipe().parallels; })); return IKey.dynamic(() -> { - Component runs = Component.literal(FormattingUtil.formatNumbers(parallelAmount.getIntValue())) - .withStyle(ChatFormatting.DARK_PURPLE); - String key = "gtceu.multiblock.parallel"; - return Component.translatable(key, runs) - .withStyle(ChatFormatting.GRAY); - }).asWidget() + Component runs = Component.literal(FormattingUtil.formatNumbers(parallelAmount.getIntValue())) + .withStyle(ChatFormatting.DARK_PURPLE); + String key = "gtceu.multiblock.parallel"; + return Component.translatable(key, runs) + .withStyle(ChatFormatting.GRAY); + }).asWidget() .setEnabledIf(widget -> parallelAmount.getIntValue() != 0); } public static TextWidget addBatchModeLine(IWorkableMultiController rlMachine, PanelSyncManager syncManager) { - - BooleanSyncValue batchEnabled = syncManager.getOrCreateSyncHandler("batchEnabled", BooleanSyncValue.class, () -> - new BooleanSyncValue(rlMachine::isBatchEnabled)); - IntSyncValue batchAmount = syncManager.getOrCreateSyncHandler("batchAmount", IntSyncValue.class, () -> - new IntSyncValue(() -> { + BooleanSyncValue batchEnabled = syncManager.getOrCreateSyncHandler("batchEnabled", BooleanSyncValue.class, + () -> new BooleanSyncValue(rlMachine::isBatchEnabled)); + IntSyncValue batchAmount = syncManager.getOrCreateSyncHandler("batchAmount", IntSyncValue.class, + () -> new IntSyncValue(() -> { if (rlMachine.getRecipeLogic().getLastRecipe() == null) return 0; return rlMachine.getRecipeLogic().getLastRecipe().batchParallels; })); @@ -161,45 +147,45 @@ public static TextWidget addBatchModeLine(IWorkableMultiController rlMachine, .setEnabledIf(widget -> batchEnabled.getBoolValue() && batchAmount.getIntValue() != 0); } - public static TextWidget addSubtickParallelsLine(IWorkableMultiController rlMachine, PanelSyncManager syncManager) { - - IntSyncValue subtickAmount = syncManager.getOrCreateSyncHandler("subtickAmount", IntSyncValue.class, () -> - new IntSyncValue(() -> { + public static TextWidget addSubtickParallelsLine(IWorkableMultiController rlMachine, + PanelSyncManager syncManager) { + IntSyncValue subtickAmount = syncManager.getOrCreateSyncHandler("subtickAmount", IntSyncValue.class, + () -> new IntSyncValue(() -> { if (rlMachine.getRecipeLogic().getLastRecipe() == null) return 0; return rlMachine.getRecipeLogic().getLastRecipe().subtickParallels; })); return IKey.dynamic(() -> { - Component runs = Component.literal(FormattingUtil.formatNumbers(subtickAmount.getIntValue())) - .withStyle(ChatFormatting.DARK_PURPLE); - String key = "gtceu.multiblock.subtick_parallels"; - return Component.translatable(key, runs) - .withStyle(ChatFormatting.GRAY); - }).asWidget() + Component runs = Component.literal(FormattingUtil.formatNumbers(subtickAmount.getIntValue())) + .withStyle(ChatFormatting.DARK_PURPLE); + String key = "gtceu.multiblock.subtick_parallels"; + return Component.translatable(key, runs) + .withStyle(ChatFormatting.GRAY); + }).asWidget() .setEnabledIf(widget -> subtickAmount.getIntValue() != 0); } public static TextWidget addTotalRunsLine(IWorkableMultiController rlMachine, PanelSyncManager syncManager) { - - IntSyncValue totalRunAmount = syncManager.getOrCreateSyncHandler("totalRunAmount", IntSyncValue.class, () -> - new IntSyncValue(() -> { + IntSyncValue totalRunAmount = syncManager.getOrCreateSyncHandler("totalRunAmount", IntSyncValue.class, + () -> new IntSyncValue(() -> { if (rlMachine.getRecipeLogic().getLastRecipe() == null) return 0; return rlMachine.getRecipeLogic().getLastRecipe().getTotalRuns(); })); return IKey.dynamic(() -> { - Component runs = Component.literal(FormattingUtil.formatNumbers(totalRunAmount.getIntValue())) - .withStyle(ChatFormatting.DARK_PURPLE); - String key = "gtceu.multiblock.total_runs"; - return Component.translatable(key, runs) - .withStyle(ChatFormatting.GRAY); - }).asWidget() + Component runs = Component.literal(FormattingUtil.formatNumbers(totalRunAmount.getIntValue())) + .withStyle(ChatFormatting.DARK_PURPLE); + String key = "gtceu.multiblock.total_runs"; + return Component.translatable(key, runs) + .withStyle(ChatFormatting.GRAY); + }).asWidget() .setEnabledIf(widget -> totalRunAmount.getIntValue() != 0); } - public static ParentWidget addOutputLines(IWorkableMultiController rlmachine, PanelSyncManager syncManager, ListWidget listWidget) { - BooleanSyncValue hasOutputs = syncManager.getOrCreateSyncHandler("hasRecipeOutputs", BooleanSyncValue.class, () -> - new BooleanSyncValue(() -> { + public static ParentWidget addOutputLines(IWorkableMultiController rlmachine, PanelSyncManager syncManager, + ListWidget listWidget) { + BooleanSyncValue hasOutputs = syncManager.getOrCreateSyncHandler("hasRecipeOutputs", BooleanSyncValue.class, + () -> new BooleanSyncValue(() -> { if (rlmachine.getRecipeLogic().getLastRecipe() == null) return false; return !rlmachine.getRecipeLogic().getLastRecipe().outputs.isEmpty() || !rlmachine.getRecipeLogic().getLastRecipe().tickOutputs.isEmpty(); @@ -207,8 +193,10 @@ public static ParentWidget addOutputLines(IWorkableMultiController rlmachine, return null; - /*return IKey.dynamic(() -> { - return Component.translatable(""); - });*/ + /* + * return IKey.dynamic(() -> { + * return Component.translatable(""); + * }); + */ } } From 5a512b0c6cca19944ded49c1d28522ac9405f578 Mon Sep 17 00:00:00 2001 From: jurrejelle Date: Tue, 3 Feb 2026 15:56:33 +0100 Subject: [PATCH 13/22] Add GTRECIPE bytebufadapter and outputlines functions --- .../data/mui/GTMultiblockPanelUtil.java | 7 +- .../common/data/mui/GTMultiblockTextUtil.java | 64 +++++++++++++------ .../network/ByteBufAdapters.java | 31 +++++++++ 3 files changed, 80 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java index 1deb64e73b7..ee73cfe9cfd 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java @@ -30,12 +30,12 @@ public Widget getMainTextPanel(PanelSyncManager syncManager) { var parentWidget = new ParentWidget<>(); var listWidget = new ListWidget<>() - .widthRel(1f) - .heightRel(1f) + .width(187 - 3 - 3) + .height(90 - 3 - 3) .childSeparator(Icon.EMPTY_2PX) .alignX(Alignment.CenterLeft); parentWidget.size(187, 90) - .child(new IDrawable.DrawableWidget(GTGuiTextures.MUI_DISPLAY).widthRel(1.0f).heightRel(1.0f)); + .background(GTGuiTextures.MUI_DISPLAY); if (controller instanceof IWorkableMultiController rlMachine) { listWidget.child(GTMultiblockTextUtil.addProgressLine(rlMachine, syncManager) @@ -51,6 +51,7 @@ public Widget getMainTextPanel(PanelSyncManager syncManager) { listWidget.child(GTMultiblockTextUtil.addBatchModeLine(rlMachine, syncManager)); listWidget.child(GTMultiblockTextUtil.addSubtickParallelsLine(rlMachine, syncManager)); listWidget.child(GTMultiblockTextUtil.addTotalRunsLine(rlMachine, syncManager)); + listWidget.child(GTMultiblockTextUtil.addOutputLines(rlMachine, syncManager)); } parentWidget.child(listWidget.left(3).top(3)); return parentWidget; diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockTextUtil.java b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockTextUtil.java index fc6286b9c2e..d08f53869a5 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockTextUtil.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockTextUtil.java @@ -4,15 +4,16 @@ import com.gregtechceu.gtceu.api.machine.feature.multiblock.IWorkableMultiController; import com.gregtechceu.gtceu.api.machine.multiblock.WorkableElectricMultiblockMachine; import com.gregtechceu.gtceu.api.mui.base.drawable.IKey; -import com.gregtechceu.gtceu.api.mui.base.widget.IWidget; import com.gregtechceu.gtceu.api.mui.utils.Color; import com.gregtechceu.gtceu.api.mui.value.sync.*; -import com.gregtechceu.gtceu.api.mui.widget.ParentWidget; -import com.gregtechceu.gtceu.api.mui.widgets.ListWidget; +import com.gregtechceu.gtceu.api.mui.widgets.DynamicSyncedWidget; import com.gregtechceu.gtceu.api.mui.widgets.TextWidget; +import com.gregtechceu.gtceu.api.mui.widgets.layout.Flow; +import com.gregtechceu.gtceu.api.recipe.GTRecipe; import com.gregtechceu.gtceu.client.mui.screen.RichTooltip; import com.gregtechceu.gtceu.utils.FormattingUtil; import com.gregtechceu.gtceu.utils.GTUtil; +import com.gregtechceu.gtceu.utils.serialization.network.ByteBufAdapters; import net.minecraft.ChatFormatting; import net.minecraft.network.chat.Component; @@ -182,21 +183,46 @@ public static TextWidget addTotalRunsLine(IWorkableMultiController rlMachine, .setEnabledIf(widget -> totalRunAmount.getIntValue() != 0); } - public static ParentWidget addOutputLines(IWorkableMultiController rlmachine, PanelSyncManager syncManager, - ListWidget listWidget) { - BooleanSyncValue hasOutputs = syncManager.getOrCreateSyncHandler("hasRecipeOutputs", BooleanSyncValue.class, - () -> new BooleanSyncValue(() -> { - if (rlmachine.getRecipeLogic().getLastRecipe() == null) return false; - return !rlmachine.getRecipeLogic().getLastRecipe().outputs.isEmpty() || - !rlmachine.getRecipeLogic().getLastRecipe().tickOutputs.isEmpty(); - })); - - return null; - - /* - * return IKey.dynamic(() -> { - * return Component.translatable(""); - * }); - */ + public static DynamicSyncedWidget addOutputLines(IWorkableMultiController rlmachine, + PanelSyncManager syncManager) { + GenericSyncValue recipeSyncValue = syncManager.getOrCreateSyncHandler("GTRecipe", + GenericSyncValue.class, + () -> new GenericSyncValue.Builder<>(GTRecipe.class) + .getter(() -> rlmachine.getRecipeLogic().getLastRecipe()) + .setter((newRecipe) -> {}) + .adapter(ByteBufAdapters.GTRECIPE) + .copy((toCopy) -> { + if (toCopy == null) return null; + return toCopy.copy(); + }) + .build()); + + DynamicLinkedSyncHandler> dynamicLinkedSyncHandler = new DynamicLinkedSyncHandler<>( + recipeSyncValue) + .widgetProvider((syncManager1, recipeSyncHandler) -> { + var list = Flow.column() + .widthRel(1) + .coverChildrenHeight(); + GTRecipe recipe = recipeSyncHandler.getValue(); + if (recipe == null) return list; + for (var outputCap : recipe.outputs.keySet()) { + // Maybe do checking per output capability? + // Render items and fluids some way? + for (var output : recipe.outputs.get(outputCap)) { + list.child(IKey.str(output.toString()).asWidget().width(187 - 3 - 3 - 2 - 2)); + } + } + + for (var outputCap : recipe.tickOutputs.keySet()) { + for (var output : recipe.tickOutputs.get(outputCap)) { + list.child(IKey.str(output.toString()).asWidget()); + } + } + return list; + }); + + return new DynamicSyncedWidget<>() + .widthRel(1) + .syncHandler(dynamicLinkedSyncHandler); } } diff --git a/src/main/java/com/gregtechceu/gtceu/utils/serialization/network/ByteBufAdapters.java b/src/main/java/com/gregtechceu/gtceu/utils/serialization/network/ByteBufAdapters.java index 74e14ce9bea..4e538697023 100644 --- a/src/main/java/com/gregtechceu/gtceu/utils/serialization/network/ByteBufAdapters.java +++ b/src/main/java/com/gregtechceu/gtceu/utils/serialization/network/ByteBufAdapters.java @@ -1,10 +1,13 @@ package com.gregtechceu.gtceu.utils.serialization.network; +import com.gregtechceu.gtceu.api.recipe.GTRecipe; +import com.gregtechceu.gtceu.api.recipe.GTRecipeSerializer; import com.gregtechceu.gtceu.utils.EqualityTest; import com.gregtechceu.gtceu.utils.NetworkUtils; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; import net.minecraftforge.fluids.FluidStack; @@ -108,6 +111,34 @@ public boolean areEqual(@NotNull BigDecimal t1, @NotNull BigDecimal t2) { } }; + public static final IByteBufAdapter GTRECIPE = new IByteBufAdapter<>() { + + @Override + public GTRecipe deserialize(FriendlyByteBuf buffer) { + if (!buffer.readBoolean()) { + return null; + } + ResourceLocation id = buffer.readResourceLocation(); + return GTRecipeSerializer.SERIALIZER.fromNetwork(id, buffer); + } + + @Override + public void serialize(FriendlyByteBuf buffer, GTRecipe u) { + if (u == null) { + buffer.writeBoolean(false); + return; + } + buffer.writeBoolean(true); + buffer.writeResourceLocation(u.getId()); + GTRecipeSerializer.SERIALIZER.toNetwork(buffer, u); + } + + @Override + public boolean areEqual(@NotNull GTRecipe t1, @NotNull GTRecipe t2) { + return EqualityTest.wrapNullSafe(GTRecipe::equals).areEqual(t1, t2); + } + }; + public static IByteBufAdapter makeAdapter(@NotNull IByteBufDeserializer deserializer, @NotNull IByteBufSerializer serializer, @Nullable EqualityTest tester) { From e907c6da2f8082151638b224f5ce223a9d504d1e Mon Sep 17 00:00:00 2001 From: jurrejelle Date: Tue, 3 Feb 2026 16:17:08 +0100 Subject: [PATCH 14/22] Fix scrolling of recipe output list --- .../gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java | 1 - .../gregtechceu/gtceu/common/data/mui/GTMultiblockTextUtil.java | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java index ee73cfe9cfd..0dbab85cc59 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java @@ -5,7 +5,6 @@ import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; import com.gregtechceu.gtceu.api.machine.multiblock.WorkableElectricMultiblockMachine; import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; -import com.gregtechceu.gtceu.api.mui.base.drawable.IDrawable; import com.gregtechceu.gtceu.api.mui.base.widget.IWidget; import com.gregtechceu.gtceu.api.mui.drawable.Icon; import com.gregtechceu.gtceu.api.mui.utils.Alignment; diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockTextUtil.java b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockTextUtil.java index d08f53869a5..80eac012c85 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockTextUtil.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockTextUtil.java @@ -223,6 +223,7 @@ public static DynamicSyncedWidget addOutputLines(IWorkableMultiController rlm return new DynamicSyncedWidget<>() .widthRel(1) + .coverChildrenHeight() .syncHandler(dynamicLinkedSyncHandler); } } From 3af1be65b6592e612429a73a5aec7c2415f8a567 Mon Sep 17 00:00:00 2001 From: jurrejelle Date: Tue, 3 Feb 2026 17:57:03 +0100 Subject: [PATCH 15/22] Create proper lines for fluid/item outputs --- .../common/data/mui/GTMultiblockTextUtil.java | 173 ++++++++++++++++-- .../data/recipe/misc/MiscRecipeLoader.java | 10 + 2 files changed, 172 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockTextUtil.java b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockTextUtil.java index 80eac012c85..061d68cb08e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockTextUtil.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockTextUtil.java @@ -1,15 +1,25 @@ package com.gregtechceu.gtceu.common.data.mui; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.capability.recipe.FluidRecipeCapability; +import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IWorkableMultiController; import com.gregtechceu.gtceu.api.machine.multiblock.WorkableElectricMultiblockMachine; import com.gregtechceu.gtceu.api.mui.base.drawable.IKey; +import com.gregtechceu.gtceu.api.mui.drawable.FluidDrawable; +import com.gregtechceu.gtceu.api.mui.drawable.ItemDrawable; +import com.gregtechceu.gtceu.api.mui.utils.Alignment; import com.gregtechceu.gtceu.api.mui.utils.Color; import com.gregtechceu.gtceu.api.mui.value.sync.*; +import com.gregtechceu.gtceu.api.mui.widget.Widget; import com.gregtechceu.gtceu.api.mui.widgets.DynamicSyncedWidget; import com.gregtechceu.gtceu.api.mui.widgets.TextWidget; import com.gregtechceu.gtceu.api.mui.widgets.layout.Flow; import com.gregtechceu.gtceu.api.recipe.GTRecipe; +import com.gregtechceu.gtceu.api.recipe.RecipeHelper; +import com.gregtechceu.gtceu.api.recipe.content.Content; +import com.gregtechceu.gtceu.api.recipe.ingredient.IntProviderFluidIngredient; +import com.gregtechceu.gtceu.api.recipe.ingredient.IntProviderIngredient; import com.gregtechceu.gtceu.client.mui.screen.RichTooltip; import com.gregtechceu.gtceu.utils.FormattingUtil; import com.gregtechceu.gtceu.utils.GTUtil; @@ -19,6 +29,10 @@ import net.minecraft.network.chat.Component; import net.minecraft.network.chat.HoverEvent; import net.minecraft.network.chat.MutableComponent; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +import java.util.Optional; public class GTMultiblockTextUtil { @@ -202,22 +216,23 @@ public static DynamicSyncedWidget addOutputLines(IWorkableMultiController rlm .widgetProvider((syncManager1, recipeSyncHandler) -> { var list = Flow.column() .widthRel(1) - .coverChildrenHeight(); + .coverChildrenHeight() + .crossAxisAlignment(Alignment.CrossAxis.START); GTRecipe recipe = recipeSyncHandler.getValue(); if (recipe == null) return list; - for (var outputCap : recipe.outputs.keySet()) { - // Maybe do checking per output capability? - // Render items and fluids some way? - for (var output : recipe.outputs.get(outputCap)) { - list.child(IKey.str(output.toString()).asWidget().width(187 - 3 - 3 - 2 - 2)); - } + + for (var output : recipe.getOutputContents(ItemRecipeCapability.CAP)) { + var widget = createItemLineForOutput(output, recipe); + if (widget.isEmpty()) continue; + list.child(widget.get().width(187 - 3 - 3 - 2 - 2)); } - for (var outputCap : recipe.tickOutputs.keySet()) { - for (var output : recipe.tickOutputs.get(outputCap)) { - list.child(IKey.str(output.toString()).asWidget()); - } + for (var output : recipe.getOutputContents(FluidRecipeCapability.CAP)) { + var widget = createFluidLineForOutput(output, recipe); + if (widget.isEmpty()) continue; + list.child(widget.get().width(187 - 3 - 3 - 2 - 2)); } + return list; }); @@ -226,4 +241,140 @@ public static DynamicSyncedWidget addOutputLines(IWorkableMultiController rlm .coverChildrenHeight() .syncHandler(dynamicLinkedSyncHandler); } + + public static Optional> createItemLineForOutput(Content itemOutput, GTRecipe recipe) { + int runs = recipe.getTotalRuns(); + var function = recipe.getType().getChanceFunction(); + + int recipeTier = RecipeHelper.getPreOCRecipeEuTier(recipe); + int chanceTier = recipeTier + recipe.ocLevel; + double maxDurationSec = (double) recipe.duration / 20.0; + + boolean rounded = false; + ItemStack stack; + // number of items output by a non-ranged ingredient + int count = 0; + // number of items output, but stored as a double. Used for accurate items/second display. + double countD = 1; + // number of items output which is actually displayed. Can be either a number, or a range. + Component displaycount; + if (itemOutput.content instanceof IntProviderIngredient provider) { + rounded = true; + stack = provider.getMaxSizeStack(); + displaycount = Component.translatable("gtceu.gui.content.range", + provider.getCountProvider().getMinValue(), + provider.getCountProvider().getMaxValue()); + if (itemOutput.chance < itemOutput.maxChance) { + countD = countD * runs * function.getBoostedChance(itemOutput, recipeTier, chanceTier) / + itemOutput.maxChance; + } + countD = countD * provider.getMidRoll(); + } else { + var stacks = ItemRecipeCapability.CAP.of(itemOutput.content).getItems(); + if (stacks.length == 0) return Optional.empty(); + stack = stacks[0]; + count = stack.getCount(); + countD *= count; + if (itemOutput.chance < itemOutput.maxChance) { + rounded = true; + countD = countD * runs * function.getBoostedChance(itemOutput, recipeTier, chanceTier) / + itemOutput.maxChance; + } + count = Math.max(1, (int) Math.round(countD)); + displaycount = Component.literal(String.valueOf(count)); + } + if (countD < maxDurationSec) { + String key = "gtceu.multiblock.output_line." + (rounded ? "2" : "0"); + return Optional.of( + Flow.row() + .coverChildren() + .childPadding(2) + .child(new ItemDrawable(stack).asWidget()) + .child( + IKey.lang( + Component.translatable(key, stack.getHoverName(), displaycount, + FormattingUtil.formatNumber2Places(maxDurationSec / countD))) + .asWidget())); + } else { + String key = "gtceu.multiblock.output_line." + (rounded ? "3" : "1"); + return Optional.of( + Flow.row() + .coverChildren() + .childPadding(2) + .child(new ItemDrawable(stack).asWidget()) + .child( + IKey.lang( + Component.translatable(key, stack.getHoverName(), displaycount, + FormattingUtil.formatNumber2Places(countD / maxDurationSec))) + .asWidget())); + } + } + + public static Optional> createFluidLineForOutput(Content fluidOutput, GTRecipe recipe) { + int runs = recipe.getTotalRuns(); + var function = recipe.getType().getChanceFunction(); + + int recipeTier = RecipeHelper.getPreOCRecipeEuTier(recipe); + int chanceTier = recipeTier + recipe.ocLevel; + double maxDurationSec = (double) recipe.duration / 20.0; + + boolean rounded = false; + FluidStack stack; + // amount of fluid output by a non-ranged ingredient + int amount = 0; + // amount of fluid output, but stored as a double. Used for accurate fluid/second display. + double amountD = 1; + // amount of fluid output which is actually displayed. Can be either a number, or a range. + Component displaycount; + if (fluidOutput.content instanceof IntProviderFluidIngredient provider) { + rounded = true; + stack = provider.getMaxSizeStack(); + displaycount = Component.translatable("gtceu.gui.content.range", + provider.getCountProvider().getMinValue(), + provider.getCountProvider().getMaxValue()); + if (fluidOutput.chance < fluidOutput.maxChance) { + amountD = amountD * runs * function.getBoostedChance(fluidOutput, recipeTier, chanceTier) / + fluidOutput.maxChance; + } + amountD = amountD * provider.getMidRoll(); + } else { + var stacks = FluidRecipeCapability.CAP.of(fluidOutput.content).getStacks(); + if (stacks.length == 0) return Optional.empty(); + stack = stacks[0]; + amount = stack.getAmount(); + amountD *= amount; + if (fluidOutput.chance < fluidOutput.maxChance) { + rounded = true; + amountD = amountD * runs * function.getBoostedChance(fluidOutput, recipeTier, chanceTier) / + fluidOutput.maxChance; + } + amount = Math.max(1, (int) Math.round(amountD)); + displaycount = Component.literal(String.valueOf(amount)); + } + if (amountD < maxDurationSec) { + String key = "gtceu.multiblock.output_line." + (rounded ? "2" : "0"); + return Optional.of( + Flow.row() + .coverChildren() + .childPadding(2) + .child(new FluidDrawable(stack).asWidget()) + .child( + IKey.lang( + Component.translatable(key, stack.getDisplayName(), displaycount, + FormattingUtil.formatNumber2Places(maxDurationSec / amountD))) + .asWidget())); + } else { + String key = "gtceu.multiblock.output_line." + (rounded ? "3" : "1"); + return Optional.of( + Flow.row() + .coverChildren() + .childPadding(2) + .child(new FluidDrawable(stack).asWidget()) + .child( + IKey.lang( + Component.translatable(key, stack.getDisplayName(), displaycount, + FormattingUtil.formatNumber2Places(amountD / maxDurationSec))) + .asWidget())); + } + } } diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MiscRecipeLoader.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MiscRecipeLoader.java index df745a5e92b..50cd5c40035 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MiscRecipeLoader.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MiscRecipeLoader.java @@ -17,7 +17,9 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.material.Fluids; import net.minecraftforge.common.Tags; +import net.minecraftforge.fluids.FluidStack; import com.tterrag.registrate.util.entry.ItemEntry; @@ -32,6 +34,14 @@ public class MiscRecipeLoader { public static void init(Consumer provider) { + BLAST_RECIPES.recipeBuilder("test_MUI") + .notConsumable(new ItemStack(Items.COBBLESTONE, 1)) + .outputFluids(new FluidStack(Fluids.WATER, 69)) + .outputItems(new ItemStack(Items.FEATHER, 1)) + .blastFurnaceTemp(100) + .duration(60) + .EUt(512) + .save(provider); // Basic Terminal Recipe VanillaRecipeHelper.addShapedRecipe(provider, true, "basic_terminal", TERMINAL.asStack(), "SGS", "PBP", "PWP", 'S', new MaterialEntry(screw, WroughtIron), 'G', Tags.Items.GLASS_PANES, 'B', From 1e20bf31fe16aa16c51d5bed17ebb87e42a05782 Mon Sep 17 00:00:00 2001 From: jurrejelle Date: Tue, 3 Feb 2026 18:07:28 +0100 Subject: [PATCH 16/22] Remove test recipe --- .../gtceu/data/recipe/misc/MiscRecipeLoader.java | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MiscRecipeLoader.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MiscRecipeLoader.java index 50cd5c40035..6965dda25e4 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MiscRecipeLoader.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MiscRecipeLoader.java @@ -34,14 +34,6 @@ public class MiscRecipeLoader { public static void init(Consumer provider) { - BLAST_RECIPES.recipeBuilder("test_MUI") - .notConsumable(new ItemStack(Items.COBBLESTONE, 1)) - .outputFluids(new FluidStack(Fluids.WATER, 69)) - .outputItems(new ItemStack(Items.FEATHER, 1)) - .blastFurnaceTemp(100) - .duration(60) - .EUt(512) - .save(provider); // Basic Terminal Recipe VanillaRecipeHelper.addShapedRecipe(provider, true, "basic_terminal", TERMINAL.asStack(), "SGS", "PBP", "PWP", 'S', new MaterialEntry(screw, WroughtIron), 'G', Tags.Items.GLASS_PANES, 'B', From d8850be06bb8db6e396e0bc26171b36a2d1dda3b Mon Sep 17 00:00:00 2001 From: YoungOnionMC Date: Tue, 3 Feb 2026 11:57:16 -0700 Subject: [PATCH 17/22] comment out narration widget stuff, try to attempt start aligned children in this widget --- .../gregtechceu/gtceu/client/mui/screen/ModularScreen.java | 4 ++-- .../com/gregtechceu/gtceu/client/mui/screen/PanelManager.java | 4 ++-- .../gtceu/common/data/mui/GTMultiblockPanelUtil.java | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/client/mui/screen/ModularScreen.java b/src/main/java/com/gregtechceu/gtceu/client/mui/screen/ModularScreen.java index b31f97e5eba..8ed110d8ade 100644 --- a/src/main/java/com/gregtechceu/gtceu/client/mui/screen/ModularScreen.java +++ b/src/main/java/com/gregtechceu/gtceu/client/mui/screen/ModularScreen.java @@ -803,9 +803,9 @@ public int getHeight() { @Override public void visitWidgets(@NotNull Consumer consumer) { - for (WidgetWrapper wrapper : panelManager.getReverseOpenPanelsWrappers()) { + /*for (WidgetWrapper wrapper : panelManager.getReverseOpenPanelsWrappers()) { consumer.accept(wrapper); - } + }*/ } private static final Component USAGE_NARRATION = Component.translatable("narrator.screen.usage"); diff --git a/src/main/java/com/gregtechceu/gtceu/client/mui/screen/PanelManager.java b/src/main/java/com/gregtechceu/gtceu/client/mui/screen/PanelManager.java index 1a88270a9a5..de712792ee6 100644 --- a/src/main/java/com/gregtechceu/gtceu/client/mui/screen/PanelManager.java +++ b/src/main/java/com/gregtechceu/gtceu/client/mui/screen/PanelManager.java @@ -85,10 +85,10 @@ void checkDirty() { this.panelsClone.clear(); this.panelsClone.addAll(this.panels); - this.panelWrappers.clear(); + /*this.panelWrappers.clear(); this.panelsClone.stream() .map(WidgetWrapper::new) - .forEach(this.panelWrappers::add); + .forEach(this.panelWrappers::add);*/ this.dirty = false; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java index 0dbab85cc59..e6847152d57 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java @@ -32,6 +32,7 @@ public Widget getMainTextPanel(PanelSyncManager syncManager) { .width(187 - 3 - 3) .height(90 - 3 - 3) .childSeparator(Icon.EMPTY_2PX) + .crossAxisAlignment(Alignment.CrossAxis.START) .alignX(Alignment.CenterLeft); parentWidget.size(187, 90) .background(GTGuiTextures.MUI_DISPLAY); @@ -41,8 +42,7 @@ public Widget getMainTextPanel(PanelSyncManager syncManager) { .alignX(Alignment.CenterLeft)); if (rlMachine instanceof WorkableElectricMultiblockMachine workableElectricMachine) { - listWidget.child(GTMultiblockTextUtil.addEnergyTierLine(workableElectricMachine, syncManager) - .alignX(Alignment.CenterLeft)); + listWidget.child(GTMultiblockTextUtil.addEnergyTierLine(workableElectricMachine, syncManager)); listWidget.child(GTMultiblockTextUtil.addEnergyUsageLine(workableElectricMachine, syncManager)); } From f76bc9df91b084b31bbb2b3693dd2b8f1b50c607 Mon Sep 17 00:00:00 2001 From: YoungOnion <39562198+YoungOnionMC@users.noreply.github.com> Date: Wed, 4 Feb 2026 02:32:31 -0700 Subject: [PATCH 18/22] alignment works again :iminsomuchpain: --- .../gtceu/client/mui/screen/ClientScreenHandler.java | 6 +++--- .../gtceu/client/mui/screen/ModularScreen.java | 8 +++++--- .../gtceu/client/mui/screen/PanelManager.java | 10 ++++++---- .../gtceu/common/data/mui/GTMultiblockPanelUtil.java | 3 +-- .../gtceu/data/recipe/misc/MiscRecipeLoader.java | 2 -- 5 files changed, 15 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/client/mui/screen/ClientScreenHandler.java b/src/main/java/com/gregtechceu/gtceu/client/mui/screen/ClientScreenHandler.java index ea7aeb1c649..bd887e74de1 100644 --- a/src/main/java/com/gregtechceu/gtceu/client/mui/screen/ClientScreenHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/client/mui/screen/ClientScreenHandler.java @@ -558,10 +558,10 @@ public static void drawDebugScreen(GuiGraphics graphics, @Nullable ModularScreen float scale = ConfigHolder.INSTANCE.dev.mui.scale; int shift = (int) (11 * scale + 0.5f); int lineY = screenH - shift - 2; - if (GTCEu.Mods.isJEILoaded() || GTCEu.Mods.isEMILoaded() || GTCEu.Mods.isREILoaded()) lineY -= 12; + if (GTCEu.Mods.isJEILoaded() || GTCEu.Mods.isEMILoaded() || GTCEu.Mods.isREILoaded()) lineY -= 20; GuiDraw.drawText(graphics, "Mouse Pos: " + mouseX + ", " + mouseY, 5, lineY, scale, outlineColor, true); - lineY -= shift + 2; - GuiDraw.drawText(graphics, "FPS: " + fpsCounter.getFps(), 5, screenH - 23, scale, outlineColor, true); + lineY -= shift; + GuiDraw.drawText(graphics, "FPS: " + fpsCounter.getFps(), 5, lineY, scale, outlineColor, true); lineY -= shift; GuiDraw.drawText(graphics, "Theme ID: " + context.getTheme().getId(), 5, lineY, scale, outlineColor, true); LocatedWidget locatedHovered = muiScreen.getPanelManager().getTopWidgetLocated(true); diff --git a/src/main/java/com/gregtechceu/gtceu/client/mui/screen/ModularScreen.java b/src/main/java/com/gregtechceu/gtceu/client/mui/screen/ModularScreen.java index 16ff642c1a3..f25dca88891 100644 --- a/src/main/java/com/gregtechceu/gtceu/client/mui/screen/ModularScreen.java +++ b/src/main/java/com/gregtechceu/gtceu/client/mui/screen/ModularScreen.java @@ -810,9 +810,11 @@ public int getHeight() { @Override public void visitWidgets(@NotNull Consumer consumer) { - /*for (WidgetWrapper wrapper : panelManager.getReverseOpenPanelsWrappers()) { - consumer.accept(wrapper); - }*/ + /* + * for (WidgetWrapper wrapper : panelManager.getReverseOpenPanelsWrappers()) { + * consumer.accept(wrapper); + * } + */ } private static final Component USAGE_NARRATION = Component.translatable("narrator.screen.usage"); diff --git a/src/main/java/com/gregtechceu/gtceu/client/mui/screen/PanelManager.java b/src/main/java/com/gregtechceu/gtceu/client/mui/screen/PanelManager.java index 761763c3cb8..2435acf50ed 100644 --- a/src/main/java/com/gregtechceu/gtceu/client/mui/screen/PanelManager.java +++ b/src/main/java/com/gregtechceu/gtceu/client/mui/screen/PanelManager.java @@ -84,10 +84,12 @@ void checkDirty() { this.panelsClone.clear(); this.panelsClone.addAll(this.panels); - /*this.panelWrappers.clear(); - this.panelsClone.stream() - .map(WidgetWrapper::new) - .forEach(this.panelWrappers::add);*/ + /* + * this.panelWrappers.clear(); + * this.panelsClone.stream() + * .map(WidgetWrapper::new) + * .forEach(this.panelWrappers::add); + */ this.dirty = false; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java index e6847152d57..bd74bf04419 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java @@ -38,8 +38,7 @@ public Widget getMainTextPanel(PanelSyncManager syncManager) { .background(GTGuiTextures.MUI_DISPLAY); if (controller instanceof IWorkableMultiController rlMachine) { - listWidget.child(GTMultiblockTextUtil.addProgressLine(rlMachine, syncManager) - .alignX(Alignment.CenterLeft)); + listWidget.child(GTMultiblockTextUtil.addProgressLine(rlMachine, syncManager)); if (rlMachine instanceof WorkableElectricMultiblockMachine workableElectricMachine) { listWidget.child(GTMultiblockTextUtil.addEnergyTierLine(workableElectricMachine, syncManager)); diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MiscRecipeLoader.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MiscRecipeLoader.java index 6965dda25e4..df745a5e92b 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MiscRecipeLoader.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MiscRecipeLoader.java @@ -17,9 +17,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.material.Fluids; import net.minecraftforge.common.Tags; -import net.minecraftforge.fluids.FluidStack; import com.tterrag.registrate.util.entry.ItemEntry; From 1fc55447227ff871b9afd57f891beff9eeba997d Mon Sep 17 00:00:00 2001 From: YoungOnion <39562198+YoungOnionMC@users.noreply.github.com> Date: Thu, 5 Feb 2026 14:11:55 -0700 Subject: [PATCH 19/22] update 8.0 into dis --- .../WorkableElectricMultiblockMachine.java | 2 +- .../multiblock/electric/CleanroomMachine.java | 102 +++++++++--------- .../electric/research/HPCAMachine.java | 1 - 3 files changed, 52 insertions(+), 53 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableElectricMultiblockMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableElectricMultiblockMachine.java index 38835aef58d..1de04c1669c 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableElectricMultiblockMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableElectricMultiblockMachine.java @@ -14,10 +14,10 @@ import com.gregtechceu.gtceu.api.misc.EnergyContainerList; import com.gregtechceu.gtceu.api.mui.factory.PosGuiData; import com.gregtechceu.gtceu.api.mui.value.sync.PanelSyncManager; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.client.mui.screen.ModularPanel; import com.gregtechceu.gtceu.client.mui.screen.UISettings; import com.gregtechceu.gtceu.common.mui.GTGuis; -import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.utils.GTUtil; import com.lowdragmc.lowdraglib.gui.widget.*; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CleanroomMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CleanroomMachine.java index 85592f8cbe5..ecf4beccd52 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CleanroomMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CleanroomMachine.java @@ -453,57 +453,57 @@ protected boolean isMachineBanned(MetaMachine machine) { } /* - @Override - public void addDisplayText(List textList) { - if (isFormed()) { - var maxVoltage = getMaxVoltage(); - if (maxVoltage > 0) { - String voltageName = GTValues.VNF[GTUtil.getFloorTierByVoltage(maxVoltage)]; - textList.add(Component.translatable("gtceu.multiblock.max_energy_per_tick", maxVoltage, voltageName)); - } - - if (cleanroomType != null) { - textList.add(Component.translatable(cleanroomType.getTranslationKey())); - } - - if (!isWorkingEnabled()) { - textList.add(Component.translatable("gtceu.multiblock.work_paused")); - - } else if (isActive()) { - textList.add(Component.translatable("gtceu.multiblock.running")); - int currentProgress = (int) (recipeLogic.getProgressPercent() * 100); - double maxInSec = (float) recipeLogic.getDuration() / 20.0f; - double currentInSec = (float) recipeLogic.getProgress() / 20.0f; - textList.add( - Component.translatable("gtceu.multiblock.progress", String.format("%.2f", (float) currentInSec), - String.format("%.2f", (float) maxInSec), currentProgress)); - } else { - textList.add(Component.translatable("gtceu.multiblock.idling")); - } - - if (recipeLogic.isWaiting()) { - textList.add(Component.translatable("gtceu.multiblock.waiting") - .setStyle(Style.EMPTY.withColor(ChatFormatting.RED))); - } - - if (cleanroomProviderTrait.isActive()) { - textList.add(Component.translatable("gtceu.multiblock.cleanroom.clean_state")); - } else { - textList.add(Component.translatable("gtceu.multiblock.cleanroom.dirty_state")); - } - textList.add(Component.translatable("gtceu.multiblock.cleanroom.clean_amount", this.cleanAmount)); - textList.add(Component.translatable("gtceu.multiblock.dimensions.0")); - textList.add(Component.translatable("gtceu.multiblock.dimensions.1", lDist + rDist + 1, hDist + 1, - fDist + bDist + 1)); - } else { - Component tooltip = Component.translatable("gtceu.multiblock.invalid_structure.tooltip") - .withStyle(ChatFormatting.GRAY); - textList.add(Component.translatable("gtceu.multiblock.invalid_structure") - .withStyle(Style.EMPTY.withColor(ChatFormatting.RED) - .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, tooltip)))); - } - } - */ + * @Override + * public void addDisplayText(List textList) { + * if (isFormed()) { + * var maxVoltage = getMaxVoltage(); + * if (maxVoltage > 0) { + * String voltageName = GTValues.VNF[GTUtil.getFloorTierByVoltage(maxVoltage)]; + * textList.add(Component.translatable("gtceu.multiblock.max_energy_per_tick", maxVoltage, voltageName)); + * } + * + * if (cleanroomType != null) { + * textList.add(Component.translatable(cleanroomType.getTranslationKey())); + * } + * + * if (!isWorkingEnabled()) { + * textList.add(Component.translatable("gtceu.multiblock.work_paused")); + * + * } else if (isActive()) { + * textList.add(Component.translatable("gtceu.multiblock.running")); + * int currentProgress = (int) (recipeLogic.getProgressPercent() * 100); + * double maxInSec = (float) recipeLogic.getDuration() / 20.0f; + * double currentInSec = (float) recipeLogic.getProgress() / 20.0f; + * textList.add( + * Component.translatable("gtceu.multiblock.progress", String.format("%.2f", (float) currentInSec), + * String.format("%.2f", (float) maxInSec), currentProgress)); + * } else { + * textList.add(Component.translatable("gtceu.multiblock.idling")); + * } + * + * if (recipeLogic.isWaiting()) { + * textList.add(Component.translatable("gtceu.multiblock.waiting") + * .setStyle(Style.EMPTY.withColor(ChatFormatting.RED))); + * } + * + * if (cleanroomProviderTrait.isActive()) { + * textList.add(Component.translatable("gtceu.multiblock.cleanroom.clean_state")); + * } else { + * textList.add(Component.translatable("gtceu.multiblock.cleanroom.dirty_state")); + * } + * textList.add(Component.translatable("gtceu.multiblock.cleanroom.clean_amount", this.cleanAmount)); + * textList.add(Component.translatable("gtceu.multiblock.dimensions.0")); + * textList.add(Component.translatable("gtceu.multiblock.dimensions.1", lDist + rDist + 1, hDist + 1, + * fDist + bDist + 1)); + * } else { + * Component tooltip = Component.translatable("gtceu.multiblock.invalid_structure.tooltip") + * .withStyle(ChatFormatting.GRAY); + * textList.add(Component.translatable("gtceu.multiblock.invalid_structure") + * .withStyle(Style.EMPTY.withColor(ChatFormatting.RED) + * .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, tooltip)))); + * } + * } + */ /** * Adjust the cleanroom's clean amount diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/HPCAMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/HPCAMachine.java index 2c482cd3ea9..bcaf0ee32e5 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/HPCAMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/HPCAMachine.java @@ -21,7 +21,6 @@ import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.api.transfer.fluid.FluidHandlerList; import com.gregtechceu.gtceu.config.ConfigHolder; -import com.gregtechceu.gtceu.utils.FormattingUtil; import com.gregtechceu.gtceu.utils.GTTransferUtils; import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; From 09b817434323a5e273777c4e86017873f02c6e79 Mon Sep 17 00:00:00 2001 From: YoungOnion <39562198+YoungOnionMC@users.noreply.github.com> Date: Sat, 7 Feb 2026 22:59:28 -0700 Subject: [PATCH 20/22] start of multiblocks --- ...CoilWorkableElectricMultiblockMachine.java | 28 +-------------- .../WorkableElectricMultiblockMachine.java | 34 ++++++++++++++++++- .../data/mui/GTMultiblockPanelUtil.java | 8 ++--- 3 files changed, 38 insertions(+), 32 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/CoilWorkableElectricMultiblockMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/CoilWorkableElectricMultiblockMachine.java index 22c503b8efe..2206a2d182d 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/CoilWorkableElectricMultiblockMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/CoilWorkableElectricMultiblockMachine.java @@ -60,9 +60,6 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet var panelUtil = new GTMultiblockPanelUtil(this); - // IntSyncValue coilTierSV = new IntSyncValue(() -> this.coilTier); - // syncManager.syncValue("coil", coilTierSV); - IntSyncValue coilTier = syncManager.getOrCreateSyncHandler("coilTier", IntSyncValue.class, () -> new IntSyncValue(this::getCoilTier)); @@ -70,8 +67,6 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet .location(CoilBlock.CoilType.values()[coilTier.getIntValue()].getTexture()) .imageSize(16, 16).colorType(ColorType.DEFAULT).tiled().build(); - // var coilWidget = coilTexture.asWidget().size(4, 16).heightRel(1.0f); - var widget1 = new DynamicDrawable(coilTexture).asWidget().size(4, 16).heightRel(1.0f); var widget2 = new DynamicDrawable(coilTexture).asWidget().size(4, 16).heightRel(1.0f); @@ -83,29 +78,8 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet .left(3).top(3) .child(new Row() .child(widget1) - .child(panelUtil.getMainTextPanel(syncManager)) + .child(panelUtil.getMainTextPanel(syncManager, 208, 90)) .child(widget2)) - // .child(new Column() - // .widthRel(1) - // .crossAxisAlignment(Alignment.CrossAxis.START) - // .childPadding(1) - // .alignY(0.5f) - // .child(new Rectangle().setColor(0xFF606060).asWidget() - // .size(40, 1)) - /* - * .child(IKey.dynamic(() -> - * GTMultiblockTextUtil.addProgressLine(isFormed, isActive(), - * getRecipeLogic().getProgress(), getRecipeLogic().getMaxProgress(), - * getRecipeLogic().getProgressPercent())) - * .color(0xffffff) - * .asWidget() - * ) - */ - // .child(GTMultiblockTextUtil.addEnergyTierLine(isFormed, - // getTier()).color(0xffffff).asWidget()) - // .child(GTMultiblockTextUtil.addEnergyUsageLine(isFormed, - // getEnergyContainer()).color(0xffffff).asWidget()) - // .left(20)) ) .child(new Column() diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableElectricMultiblockMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableElectricMultiblockMachine.java index 1de04c1669c..834fa557dfe 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableElectricMultiblockMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableElectricMultiblockMachine.java @@ -14,9 +14,16 @@ import com.gregtechceu.gtceu.api.misc.EnergyContainerList; import com.gregtechceu.gtceu.api.mui.factory.PosGuiData; import com.gregtechceu.gtceu.api.mui.value.sync.PanelSyncManager; +import com.gregtechceu.gtceu.api.mui.widget.ParentWidget; +import com.gregtechceu.gtceu.api.mui.widgets.SlotGroupWidget; +import com.gregtechceu.gtceu.api.mui.widgets.layout.Column; +import com.gregtechceu.gtceu.api.mui.widgets.layout.Row; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.client.mui.screen.ModularPanel; import com.gregtechceu.gtceu.client.mui.screen.UISettings; +import com.gregtechceu.gtceu.common.data.mui.GTMuiWidgets; +import com.gregtechceu.gtceu.common.data.mui.GTMultiblockPanelUtil; +import com.gregtechceu.gtceu.common.mui.GTGuiTextures; import com.gregtechceu.gtceu.common.mui.GTGuis; import com.gregtechceu.gtceu.utils.GTUtil; @@ -88,7 +95,32 @@ public void setBatchEnabled(boolean batch) { ////////////////////////////////////// @Override public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISettings settings) { - return GTGuis.createPanel(this, 176, 164); + var panel = GTGuis.createPanel(this, 176, 164); + + var panelUtil = new GTMultiblockPanelUtil(this); + + panel.child(GTMuiWidgets.createTitleBar(this.getDefinition(), 176)) + .child(new ParentWidget<>() + .widthRel(0.95f) + .heightRel(.45f) + .margin(4, 0) + .left(3).top(5) + .child(new Row() + .child(panelUtil.getMainTextPanel(syncManager, 170, 70))) + ) + .child(new Column() + .coverChildren() + .leftRel(1.0f) + .reverseLayout(true) + .bottom(16) + .padding(0, 8, 4, 4) + .childPadding(2) + .background(GTGuiTextures.BACKGROUND.getSubArea(0.25f, 0f, 1.0f, 1.0f)) + .child(GTMuiWidgets.createPowerButton(this, syncManager)) + .child(GTMuiWidgets.createVoidingButton(this, syncManager))) + .child(SlotGroupWidget.playerInventory(false).left(7).bottom(7)); + + return panel; } // @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java index bd74bf04419..5b1599d201e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/mui/GTMultiblockPanelUtil.java @@ -24,17 +24,17 @@ public GTMultiblockPanelUtil(MultiblockControllerMachine controller) { this.controller = controller; } - public Widget getMainTextPanel(PanelSyncManager syncManager) { + public Widget getMainTextPanel(PanelSyncManager syncManager, int width, int height) { boolean isFormed = controller.isFormed(); var parentWidget = new ParentWidget<>(); var listWidget = new ListWidget<>() - .width(187 - 3 - 3) - .height(90 - 3 - 3) + .width(width - 6) + .height(height - 6) .childSeparator(Icon.EMPTY_2PX) .crossAxisAlignment(Alignment.CrossAxis.START) .alignX(Alignment.CenterLeft); - parentWidget.size(187, 90) + parentWidget.size(width, height) .background(GTGuiTextures.MUI_DISPLAY); if (controller instanceof IWorkableMultiController rlMachine) { From e9de73d6b391da3068e71c75b6ab174d0a399dcf Mon Sep 17 00:00:00 2001 From: YoungOnion <39562198+YoungOnionMC@users.noreply.github.com> Date: Sat, 7 Feb 2026 23:16:56 -0700 Subject: [PATCH 21/22] remove test recipe --- .../multiblock/WorkableElectricMultiblockMachine.java | 3 +-- .../data/recipe/misc/MetaTileEntityMachineRecipeLoader.java | 6 ------ 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableElectricMultiblockMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableElectricMultiblockMachine.java index 834fa557dfe..ba5850fa37d 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableElectricMultiblockMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/WorkableElectricMultiblockMachine.java @@ -106,8 +106,7 @@ public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISet .margin(4, 0) .left(3).top(5) .child(new Row() - .child(panelUtil.getMainTextPanel(syncManager, 170, 70))) - ) + .child(panelUtil.getMainTextPanel(syncManager, 170, 70)))) .child(new Column() .coverChildren() .leftRel(1.0f) diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityMachineRecipeLoader.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityMachineRecipeLoader.java index 0ed200e7499..34412e9c4b8 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityMachineRecipeLoader.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityMachineRecipeLoader.java @@ -36,12 +36,6 @@ public class MetaTileEntityMachineRecipeLoader { public static void init(Consumer provider) { - ASSEMBLER_RECIPES.recipeBuilder("test_drum") - .inputItems(STEEL_DRUM, 2) - .outputItems(Items.DIRT, 3) - .duration((int) SECONDS * 3) - .EUt(400) - .save(provider); // Reservoir Hatch ASSEMBLER_RECIPES.recipeBuilder("reservoir_hatch") From 964e73e1b47bbdaf284b0749420b31d93b9676bb Mon Sep 17 00:00:00 2001 From: YoungOnion <39562198+YoungOnionMC@users.noreply.github.com> Date: Sun, 8 Feb 2026 00:07:43 -0700 Subject: [PATCH 22/22] spots --- .../data/recipe/misc/MetaTileEntityMachineRecipeLoader.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityMachineRecipeLoader.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityMachineRecipeLoader.java index 34412e9c4b8..c364c53af52 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityMachineRecipeLoader.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityMachineRecipeLoader.java @@ -14,7 +14,6 @@ import net.minecraft.data.recipes.FinishedRecipe; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.Items; import appeng.core.definitions.AEBlocks; import appeng.core.definitions.AEItems; @@ -36,7 +35,6 @@ public class MetaTileEntityMachineRecipeLoader { public static void init(Consumer provider) { - // Reservoir Hatch ASSEMBLER_RECIPES.recipeBuilder("reservoir_hatch") .inputItems(COVER_INFINITE_WATER)