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