|
13 | 13 | import com.gregtechceu.gtceu.api.machine.multiblock.part.TieredPartMachine; |
14 | 14 | import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; |
15 | 15 | import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; |
| 16 | +import com.gregtechceu.gtceu.api.mui.base.drawable.IDrawable; |
| 17 | +import com.gregtechceu.gtceu.api.mui.base.drawable.IKey; |
| 18 | +import com.gregtechceu.gtceu.api.mui.base.widget.IWidget; |
| 19 | +import com.gregtechceu.gtceu.api.mui.drawable.ItemDrawable; |
| 20 | +import com.gregtechceu.gtceu.api.mui.factory.PosGuiData; |
| 21 | +import com.gregtechceu.gtceu.api.mui.utils.Alignment; |
| 22 | +import com.gregtechceu.gtceu.api.mui.value.sync.FloatSyncValue; |
| 23 | +import com.gregtechceu.gtceu.api.mui.value.sync.PanelSyncManager; |
| 24 | +import com.gregtechceu.gtceu.api.mui.widgets.ButtonWidget; |
| 25 | +import com.gregtechceu.gtceu.api.mui.widgets.TextWidget; |
| 26 | +import com.gregtechceu.gtceu.api.mui.widgets.layout.Flow; |
| 27 | +import com.gregtechceu.gtceu.api.mui.widgets.slot.ItemSlot; |
| 28 | +import com.gregtechceu.gtceu.api.mui.widgets.textfield.TextFieldWidget; |
16 | 29 | import com.gregtechceu.gtceu.client.model.machine.MachineRenderState; |
| 30 | +import com.gregtechceu.gtceu.client.mui.screen.ModularPanel; |
| 31 | +import com.gregtechceu.gtceu.client.mui.screen.UISettings; |
17 | 32 | import com.gregtechceu.gtceu.common.data.GTItems; |
| 33 | +import com.gregtechceu.gtceu.common.data.mui.GTMuiWidgets; |
| 34 | +import com.gregtechceu.gtceu.common.mui.GTGuiTextures; |
18 | 35 | import com.gregtechceu.gtceu.utils.FormattingUtil; |
19 | 36 |
|
| 37 | +import com.gregtechceu.gtceu.utils.GTUtil; |
20 | 38 | import com.lowdragmc.lowdraglib.gui.widget.*; |
21 | 39 | import com.lowdragmc.lowdraglib.syncdata.annotation.DescSynced; |
22 | 40 | import com.lowdragmc.lowdraglib.syncdata.annotation.Persisted; |
|
48 | 66 | import java.util.List; |
49 | 67 | import java.util.Objects; |
50 | 68 | import java.util.function.DoubleSupplier; |
| 69 | +import java.util.stream.Stream; |
51 | 70 |
|
52 | 71 | import javax.annotation.ParametersAreNonnullByDefault; |
53 | 72 |
|
@@ -80,6 +99,7 @@ public class MaintenanceHatchPartMachine extends TieredPartMachine |
80 | 99 | @DescSynced |
81 | 100 | protected byte maintenanceProblems = startProblems(); |
82 | 101 | @Getter |
| 102 | + @Setter |
83 | 103 | @Persisted |
84 | 104 | private float durationMultiplier = 1f; |
85 | 105 | @Nullable |
@@ -383,6 +403,65 @@ public InteractionResult onUse(BlockState state, Level world, BlockPos pos, Play |
383 | 403 | * } |
384 | 404 | */ |
385 | 405 |
|
| 406 | + @Override |
| 407 | + public ModularPanel buildUI(PosGuiData guiData, PanelSyncManager syncManager, UISettings uiSettings) { |
| 408 | + return new ModularPanel(this.getDefinition().getName()) |
| 409 | + .child(GTMuiWidgets.createTitleBar(this.getDefinition(), 176)) |
| 410 | + .child(Flow.column() |
| 411 | + .crossAxisAlignment(Alignment.CrossAxis.START) |
| 412 | + .childIf(this.isConfigurable, () -> Flow.column() |
| 413 | + .coverChildren() |
| 414 | + .padding(5) |
| 415 | + .horizontalCenter() |
| 416 | + .child(Flow.row() |
| 417 | + .coverChildren() |
| 418 | + .childPadding(5) |
| 419 | + .child(new TextWidget<>(IKey.lang("gtceu.maintenance.configurable_duration.modify"))) |
| 420 | + .child(new TextFieldWidget() |
| 421 | + .setNumbersDouble(() -> MIN_DURATION_MULTIPLIER, () -> MAX_DURATION_MULTIPLIER) |
| 422 | + .setDefaultNumber(1) |
| 423 | + .value(new FloatSyncValue(this::getDurationMultiplier, this::setDurationMultiplier)) |
| 424 | + .addTooltipElement(IKey.lang(() -> getDurationMultiplier() == 1.0 ? |
| 425 | + "gtceu.maintenance.configurable_duration.unchanged_description" : |
| 426 | + "gtceu.maintenance.configurable_duration.changed_description")))) |
| 427 | + .child(Flow.row() |
| 428 | + .coverChildren() |
| 429 | + .childPadding(5) |
| 430 | + .child(new TextWidget<>(IKey.lang("gtceu.maintenance.configurable_time", () -> new Object[]{this.getTimeMultiplier()}))))) |
| 431 | + .child(Flow.row() |
| 432 | + .coverChildren() |
| 433 | + .padding(5) |
| 434 | + .child(new ItemSlot() |
| 435 | + .slot(itemStackHandler, 0) |
| 436 | + .background(GTGuiTextures.SLOT, GTGuiTextures.DUCT_TAPE_OVERLAY)) |
| 437 | + .child(new ButtonWidget<>() |
| 438 | + .background(GTGuiTextures.BUTTON_MAINTENANCE) |
| 439 | + .disableHoverBackground() |
| 440 | + .addTooltipElement(IKey.lang("gtceu.machine.maintenance_hatch_tool_slot.tooltip")) |
| 441 | + .onMousePressed((mouseX, mouseY, button) -> { |
| 442 | + fixMaintenanceProblems(guiData.getPlayer()); |
| 443 | + return true; |
| 444 | + }))) |
| 445 | + .child(Flow.column() |
| 446 | + .crossAxisAlignment(Alignment.CrossAxis.START) |
| 447 | + .coverChildren() |
| 448 | + .padding(5) |
| 449 | + .childPadding(2) |
| 450 | + .child(new TextWidget<>(IKey.lang(() -> hasMaintenanceProblems() ? |
| 451 | + "gtceu.top.maintenance_broken" : |
| 452 | + "gtceu.top.maintenance_fixed"))) |
| 453 | + .children(Stream.iterate(Byte.valueOf("0"), i -> i < 6, i -> ++i) |
| 454 | + .filter(i -> ((getMaintenanceProblems() >> i) & 1) == 0) |
| 455 | + .map(GTUtil::getMaintenanceText) |
| 456 | + .map(i -> Flow.row() |
| 457 | + .coverChildren() |
| 458 | + .childPadding(2) |
| 459 | + .child(new IDrawable.DrawableWidget(new ItemDrawable(i.getA()))) |
| 460 | + .child(new TextWidget<>(IKey.dynamic(i::getB)))) |
| 461 | + .map(IWidget.class::cast) |
| 462 | + .toList()))); |
| 463 | + } |
| 464 | + |
386 | 465 | private static Component getTextWidgetText(String type, DoubleSupplier multiplier) { |
387 | 466 | Component tooltip; |
388 | 467 | if (multiplier.getAsDouble() == 1.0) { |
|
0 commit comments