aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api/gui/widgets
diff options
context:
space:
mode:
authorquerns <33518699+querns@users.noreply.github.com>2023-09-08 15:39:21 -0500
committerGitHub <noreply@github.com>2023-09-08 22:39:21 +0200
commit7f837715a8377b24853bf0fea02f23c210b47cfc (patch)
treeab75df3f15857a83ee653750cb5090225a7c089d /src/main/java/gregtech/api/gui/widgets
parente4f17b7b40503fd34d9dae447802453480b9577c (diff)
downloadGT5-Unofficial-7f837715a8377b24853bf0fea02f23c210b47cfc.tar.gz
GT5-Unofficial-7f837715a8377b24853bf0fea02f23c210b47cfc.tar.bz2
GT5-Unofficial-7f837715a8377b24853bf0fea02f23c210b47cfc.zip
Adds status messages, action buttons to UI of multiblock drills (#2270)
* Adds several UI elements to multiblock drills * Spotless * Adds formatNumbers calls in places where it'd been missed * Eliminate wildcard import * Add @NotNull annotations to new fields and methods
Diffstat (limited to 'src/main/java/gregtech/api/gui/widgets')
-rw-r--r--src/main/java/gregtech/api/gui/widgets/GT_DisabledWhileActiveButton.java104
1 files changed, 104 insertions, 0 deletions
diff --git a/src/main/java/gregtech/api/gui/widgets/GT_DisabledWhileActiveButton.java b/src/main/java/gregtech/api/gui/widgets/GT_DisabledWhileActiveButton.java
new file mode 100644
index 0000000000..e86589ac2a
--- /dev/null
+++ b/src/main/java/gregtech/api/gui/widgets/GT_DisabledWhileActiveButton.java
@@ -0,0 +1,104 @@
+package gregtech.api.gui.widgets;
+
+import java.lang.ref.WeakReference;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Optional;
+import java.util.function.BiConsumer;
+import java.util.function.Supplier;
+
+import net.minecraft.util.StatCollector;
+
+import org.jetbrains.annotations.NotNull;
+
+import com.google.common.collect.ImmutableList;
+import com.gtnewhorizons.modularui.api.drawable.IDrawable;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.api.widget.Widget;
+import com.gtnewhorizons.modularui.common.widget.ButtonWidget;
+import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget;
+
+import gregtech.api.gui.modularui.GT_UITextures;
+import gregtech.api.interfaces.tileentity.IMachineProgress;
+
+public class GT_DisabledWhileActiveButton extends ButtonWidget {
+
+ @NotNull
+ private final WeakReference<IMachineProgress> machineRef;
+
+ public GT_DisabledWhileActiveButton(@NotNull IMachineProgress machine, @NotNull ModularWindow.Builder builder) {
+ super();
+ machineRef = new WeakReference<>(machine);
+
+ super.attachSyncer(
+ new FakeSyncWidget.BooleanSyncer(() -> isMachineActive().orElse(true), a -> {}),
+ builder,
+ (widget, aBoolean) -> widget.notifyTooltipChange());
+
+ super.dynamicTooltip(this::generateTooltip);
+ }
+
+ @NotNull
+ @Override
+ public ButtonWidget setOnClick(@NotNull BiConsumer<ClickData, Widget> clickAction) {
+ return super.setOnClick((clickData, widget) -> isMachineActive().ifPresent(isActive -> {
+ if (!isActive) {
+ clickAction.accept(clickData, widget);
+ }
+ }));
+ }
+
+ @NotNull
+ @Override
+ public Widget setBackground(@NotNull IDrawable... drawables) {
+ return super.setBackground(() -> appendLockedOverlay(drawables));
+ }
+
+ @NotNull
+ @Override
+ public Widget setBackground(@NotNull Supplier<IDrawable[]> drawablesSupplier) {
+ return super.setBackground(() -> appendLockedOverlay(drawablesSupplier.get()));
+ }
+
+ @NotNull
+ @Override
+ public Widget dynamicTooltip(@NotNull Supplier<List<String>> dynamicTooltip) {
+ return super.dynamicTooltip(() -> {
+ ImmutableList.Builder<String> tooltips = ImmutableList.<String>builder()
+ .addAll(dynamicTooltip.get());
+ tooltips.addAll(generateTooltip());
+
+ return tooltips.build();
+ });
+ }
+
+ @NotNull
+ private Optional<Boolean> isMachineActive() {
+ return Optional.ofNullable(machineRef.get())
+ .map(IMachineProgress::isActive);
+ }
+
+ @NotNull
+ private IDrawable[] appendLockedOverlay(@NotNull IDrawable[] drawables) {
+ return isMachineActive().map(isActive -> {
+ if (isActive) {
+ final IDrawable[] copy = Arrays.copyOf(drawables, drawables.length + 1);
+ copy[drawables.length] = GT_UITextures.OVERLAY_BUTTON_LOCKED;
+ return copy;
+ }
+ return drawables;
+ })
+ .orElse(drawables);
+ }
+
+ @NotNull
+ private List<String> generateTooltip() {
+ return isMachineActive().map(isActive -> {
+ if (isActive) {
+ return ImmutableList.of(StatCollector.translateToLocal("GT5U.gui.button.forbidden_while_running"));
+ }
+ return ImmutableList.<String>of();
+ })
+ .orElse(ImmutableList.of());
+ }
+}