From df5b83a3f7489d48fe0dc4e2b5fd04f334a582be Mon Sep 17 00:00:00 2001 From: Shiewk Date: Mon, 24 Nov 2025 11:41:08 +0100 Subject: [PATCH] Add helpful context menus (right click) to the position editing screen - Right click on widget: Opening widget settings, setting anchor or deactivating the widget - Right click on empty space: Enabling widgets --- src/main/java/de/shiewk/widgets/Anchor.java | 2 +- .../java/de/shiewk/widgets/ModWidget.java | 16 +++ .../client/screen/ContextMenuScreen.java | 136 ++++++++++++++++++ .../screen/EditWidgetPositionsScreen.java | 118 +++++++++++++-- .../client/screen/WidgetSettingsScreen.java | 12 +- .../screen/components/WidgetWidget.java | 2 +- .../resources/assets/widgets/lang/de_de.json | 23 ++- .../resources/assets/widgets/lang/en_us.json | 17 ++- 8 files changed, 304 insertions(+), 22 deletions(-) create mode 100644 src/main/java/de/shiewk/widgets/client/screen/ContextMenuScreen.java diff --git a/src/main/java/de/shiewk/widgets/Anchor.java b/src/main/java/de/shiewk/widgets/Anchor.java index 2e27e9a..d8fb248 100644 --- a/src/main/java/de/shiewk/widgets/Anchor.java +++ b/src/main/java/de/shiewk/widgets/Anchor.java @@ -56,6 +56,6 @@ public enum Anchor { return anchor; } } - return Anchor.TOP_LEFT; + return null; } } diff --git a/src/main/java/de/shiewk/widgets/ModWidget.java b/src/main/java/de/shiewk/widgets/ModWidget.java index 41f0d82..03b6b86 100644 --- a/src/main/java/de/shiewk/widgets/ModWidget.java +++ b/src/main/java/de/shiewk/widgets/ModWidget.java @@ -59,4 +59,20 @@ public abstract class ModWidget { settings.offsetX += dx; settings.offsetY += dy; } + + public void setPos(Anchor anchor, int offsetX, int offsetY){ + getSettings().setPos(anchor, offsetX, offsetY); + } + + public void setAbsolutePos(int x, int y, int scaledWindowWidth, int scaledWindowHeight) { + Anchor anchor = Anchor.getAnchor(scaledWindowWidth, scaledWindowHeight, x, y); + if (anchor == null) { + throw new IllegalArgumentException("Provided coordinates have no corresponding anchor"); + } + settings.setPos( + anchor, + x - anchor.getAlignStartPosX(scaledWindowWidth), + y - anchor.getAlignStartPosY(scaledWindowHeight) + ); + } } diff --git a/src/main/java/de/shiewk/widgets/client/screen/ContextMenuScreen.java b/src/main/java/de/shiewk/widgets/client/screen/ContextMenuScreen.java new file mode 100644 index 0000000..d05e4f8 --- /dev/null +++ b/src/main/java/de/shiewk/widgets/client/screen/ContextMenuScreen.java @@ -0,0 +1,136 @@ +package de.shiewk.widgets.client.screen; + +import de.shiewk.widgets.utils.WidgetUtils; +import net.minecraft.client.gui.Click; +import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.gui.cursor.StandardCursors; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.sound.SoundEvents; +import net.minecraft.text.Text; + +import java.util.List; + +public class ContextMenuScreen extends Screen { + + public record Option(Text title, boolean highlighted, Runnable action){ + + public Option(Text title, Runnable action){ + this(title, false, action); + } + + } + + private final Screen parent; + private int menuX; + private int menuY; + private final List