diff --git a/src/main/java/org/saturnclient/saturnclient/menus/MainMenu.java b/src/main/java/org/saturnclient/saturnclient/menus/MainMenu.java index 77bccff..7a03d33 100644 --- a/src/main/java/org/saturnclient/saturnclient/menus/MainMenu.java +++ b/src/main/java/org/saturnclient/saturnclient/menus/MainMenu.java @@ -1,8 +1,9 @@ package org.saturnclient.saturnclient.menus; -import org.saturnclient.saturnclient.widgets.SaturnButton; import org.saturnclient.ui.SaturnAnimation; import org.saturnclient.ui.SaturnUi; +import org.saturnclient.ui.widgets.SaturnButton; + import net.minecraft.text.Text; public class MainMenu extends SaturnUi { diff --git a/src/main/java/org/saturnclient/saturnclient/menus/SettingsMenu.java b/src/main/java/org/saturnclient/saturnclient/menus/SettingsMenu.java index 0a1ebc8..119fc87 100644 --- a/src/main/java/org/saturnclient/saturnclient/menus/SettingsMenu.java +++ b/src/main/java/org/saturnclient/saturnclient/menus/SettingsMenu.java @@ -1,8 +1,8 @@ package org.saturnclient.saturnclient.menus; -import org.saturnclient.saturnclient.widgets.SaturnButton; -import org.saturnclient.saturnclient.widgets.SaturnImageButton; import org.saturnclient.ui.SaturnUi; +import org.saturnclient.ui.widgets.SaturnButton; +import org.saturnclient.ui.widgets.SaturnImageButton; import net.minecraft.text.Text; import net.minecraft.util.Identifier; diff --git a/src/main/java/org/saturnclient/ui/SaturnUi.java b/src/main/java/org/saturnclient/ui/SaturnUi.java index 680fb30..ce448e9 100644 --- a/src/main/java/org/saturnclient/ui/SaturnUi.java +++ b/src/main/java/org/saturnclient/ui/SaturnUi.java @@ -3,6 +3,8 @@ package org.saturnclient.ui; import java.util.ArrayList; import java.util.List; +import org.lwjgl.glfw.GLFW; + import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; import net.minecraft.text.Text; @@ -55,4 +57,52 @@ public class SaturnUi extends Screen { return false; } + + @Override + public boolean keyPressed(int keyCode, int scanCode, int modifiers) { + for (SaturnWidget widget : new ArrayList<>(widgets)) { + if (!widget.visible) { + continue; + } + + widget.keyPressed(keyCode, scanCode, modifiers); + + char typedChar = getCharFromKey(keyCode, modifiers); + if (typedChar != '\0') { + widget.charTyped(typedChar); + } + } + return super.keyPressed(keyCode, scanCode, modifiers); + } + + private char getCharFromKey(int keyCode, int modifiers) { + boolean shift = (modifiers & GLFW.GLFW_MOD_SHIFT) != 0; + + // A-Z + if (keyCode >= GLFW.GLFW_KEY_A && keyCode <= GLFW.GLFW_KEY_Z) { + return (char) (shift ? 'A' + (keyCode - GLFW.GLFW_KEY_A) : 'a' + (keyCode - GLFW.GLFW_KEY_A)); + } + + // 0-9 + if (keyCode >= GLFW.GLFW_KEY_0 && keyCode <= GLFW.GLFW_KEY_9) { + return shift ? ")!@#$%^&*(".charAt(keyCode - GLFW.GLFW_KEY_0) : (char) ('0' + (keyCode - GLFW.GLFW_KEY_0)); + } + + // Special characters + return switch (keyCode) { + case GLFW.GLFW_KEY_SPACE -> ' '; + case GLFW.GLFW_KEY_PERIOD -> shift ? '>' : '.'; + case GLFW.GLFW_KEY_COMMA -> shift ? '<' : ','; + case GLFW.GLFW_KEY_MINUS -> shift ? '_' : '-'; + case GLFW.GLFW_KEY_EQUAL -> shift ? '+' : '='; + case GLFW.GLFW_KEY_SEMICOLON -> shift ? ':' : ';'; + case GLFW.GLFW_KEY_APOSTROPHE -> shift ? '"' : '\''; + case GLFW.GLFW_KEY_SLASH -> shift ? '?' : '/'; + case GLFW.GLFW_KEY_BACKSLASH -> shift ? '|' : '\\'; + case GLFW.GLFW_KEY_LEFT_BRACKET -> shift ? '{' : '['; + case GLFW.GLFW_KEY_RIGHT_BRACKET -> shift ? '}' : ']'; + case GLFW.GLFW_KEY_GRAVE_ACCENT -> shift ? '~' : '`'; + default -> '\0'; + }; + } } diff --git a/src/main/java/org/saturnclient/ui/SaturnWidget.java b/src/main/java/org/saturnclient/ui/SaturnWidget.java index e832f62..749b02b 100644 --- a/src/main/java/org/saturnclient/ui/SaturnWidget.java +++ b/src/main/java/org/saturnclient/ui/SaturnWidget.java @@ -17,6 +17,12 @@ public class SaturnWidget { public void click() { } + public void keyPressed(int keyCode, int scanCode, int modifiers) { + } + + public void charTyped(char typedChar) { + } + public SaturnWidget setX(int x) { this.x = x; return this; diff --git a/src/main/java/org/saturnclient/saturnclient/widgets/SaturnButton.java b/src/main/java/org/saturnclient/ui/widgets/SaturnButton.java similarity index 97% rename from src/main/java/org/saturnclient/saturnclient/widgets/SaturnButton.java rename to src/main/java/org/saturnclient/ui/widgets/SaturnButton.java index 43c09e9..75049ed 100644 --- a/src/main/java/org/saturnclient/saturnclient/widgets/SaturnButton.java +++ b/src/main/java/org/saturnclient/ui/widgets/SaturnButton.java @@ -1,4 +1,4 @@ -package org.saturnclient.saturnclient.widgets; +package org.saturnclient.ui.widgets; import org.saturnclient.ui.SaturnWidget; diff --git a/src/main/java/org/saturnclient/saturnclient/widgets/SaturnImageButton.java b/src/main/java/org/saturnclient/ui/widgets/SaturnImageButton.java similarity index 96% rename from src/main/java/org/saturnclient/saturnclient/widgets/SaturnImageButton.java rename to src/main/java/org/saturnclient/ui/widgets/SaturnImageButton.java index 2882ac2..e9aa9a5 100644 --- a/src/main/java/org/saturnclient/saturnclient/widgets/SaturnImageButton.java +++ b/src/main/java/org/saturnclient/ui/widgets/SaturnImageButton.java @@ -1,4 +1,4 @@ -package org.saturnclient.saturnclient.widgets; +package org.saturnclient.ui.widgets; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.render.RenderLayer; diff --git a/src/main/java/org/saturnclient/saturnclient/widgets/SaturnText.java b/src/main/java/org/saturnclient/ui/widgets/SaturnText.java similarity index 91% rename from src/main/java/org/saturnclient/saturnclient/widgets/SaturnText.java rename to src/main/java/org/saturnclient/ui/widgets/SaturnText.java index cf4ce11..f8f3cda 100644 --- a/src/main/java/org/saturnclient/saturnclient/widgets/SaturnText.java +++ b/src/main/java/org/saturnclient/ui/widgets/SaturnText.java @@ -1,4 +1,4 @@ -package org.saturnclient.saturnclient.widgets; +package org.saturnclient.ui.widgets; import org.saturnclient.ui.SaturnWidget; import net.minecraft.client.MinecraftClient; diff --git a/src/main/java/org/saturnclient/saturnclient/widgets/SaturnTexture.java b/src/main/java/org/saturnclient/ui/widgets/SaturnTexture.java similarity index 93% rename from src/main/java/org/saturnclient/saturnclient/widgets/SaturnTexture.java rename to src/main/java/org/saturnclient/ui/widgets/SaturnTexture.java index cfe23bb..93649d9 100644 --- a/src/main/java/org/saturnclient/saturnclient/widgets/SaturnTexture.java +++ b/src/main/java/org/saturnclient/ui/widgets/SaturnTexture.java @@ -1,4 +1,4 @@ -package org.saturnclient.saturnclient.widgets; +package org.saturnclient.ui.widgets; import org.saturnclient.ui.SaturnWidget; import net.minecraft.client.gui.DrawContext;