From d70d0dc0d0a94f7ec682ed5f827448d2f4d75813 Mon Sep 17 00:00:00 2001 From: kawaiizenbo <48113593+kawaiizenbo@users.noreply.github.com> Date: Wed, 11 Oct 2023 10:55:20 -0700 Subject: [PATCH] full function keybinds --- .../java/me/kawaiizenbo/moonlight/Config.java | 3 - .../me/kawaiizenbo/moonlight/Moonlight.java | 1 - .../command/commands/SettingCommand.java | 59 ++- .../moonlight/mixin/KeyboardMixin.java | 8 +- .../module/settings/KeycodeSetting.java | 48 ++- .../moonlight/ui/clickgui/KeybindScreen.java | 36 -- .../moonlight/ui/clickgui/SettingsScreen.java | 2 +- .../moonlight/util/KeycodeUtils.java | 357 ++++++++++++++++++ 8 files changed, 451 insertions(+), 63 deletions(-) delete mode 100644 src/main/java/me/kawaiizenbo/moonlight/ui/clickgui/KeybindScreen.java create mode 100644 src/main/java/me/kawaiizenbo/moonlight/util/KeycodeUtils.java diff --git a/src/main/java/me/kawaiizenbo/moonlight/Config.java b/src/main/java/me/kawaiizenbo/moonlight/Config.java index 3df97a3..5c91a44 100644 --- a/src/main/java/me/kawaiizenbo/moonlight/Config.java +++ b/src/main/java/me/kawaiizenbo/moonlight/Config.java @@ -7,9 +7,6 @@ import java.nio.file.Files; import java.util.HashMap; import java.util.Map; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.google.gson.Gson; import me.kawaiizenbo.moonlight.module.Category; diff --git a/src/main/java/me/kawaiizenbo/moonlight/Moonlight.java b/src/main/java/me/kawaiizenbo/moonlight/Moonlight.java index b25531c..278683f 100644 --- a/src/main/java/me/kawaiizenbo/moonlight/Moonlight.java +++ b/src/main/java/me/kawaiizenbo/moonlight/Moonlight.java @@ -4,7 +4,6 @@ import net.fabricmc.api.ModInitializer; import org.slf4j.Logger; -import java.io.IOException; import java.util.HashMap; import java.util.Map; import org.slf4j.LoggerFactory; diff --git a/src/main/java/me/kawaiizenbo/moonlight/command/commands/SettingCommand.java b/src/main/java/me/kawaiizenbo/moonlight/command/commands/SettingCommand.java index 8f72dec..9d2d033 100644 --- a/src/main/java/me/kawaiizenbo/moonlight/command/commands/SettingCommand.java +++ b/src/main/java/me/kawaiizenbo/moonlight/command/commands/SettingCommand.java @@ -48,22 +48,65 @@ public class SettingCommand extends Command return 0; } - // you can break this really easily and i dont feel like fixing it :3 have fun if (setting instanceof BooleanSetting) { - ((BooleanSetting)setting).value = Boolean.parseBoolean(v); + try + { + ((BooleanSetting)setting).value = Boolean.parseBoolean(v); + } + catch (Exception e) + { + ChatUtils.sendMsg(ColorUtils.red + "Invalid Value, expected boolean"); + return 0; + } + } else if (setting instanceof DoubleSetting) - { - ((DoubleSetting)setting).value = Double.parseDouble(v); + { + try + { + ((DoubleSetting)setting).value = Double.parseDouble(v); + } + catch (Exception e) + { + ChatUtils.sendMsg(ColorUtils.red + "Invalid Value, expected Double"); + return 0; + } } - if (setting instanceof StringSetting) + else if (setting instanceof StringSetting) { - ((StringSetting)setting).value = v; + try + { + ((StringSetting)setting).value = v; + } + catch (Exception e) + { + ChatUtils.sendMsg(ColorUtils.red + "Invalid Value, expected String"); + return 0; + } } else if (setting instanceof KeycodeSetting) - { - ((KeycodeSetting)setting).value = Integer.parseInt(v); + { + try + { + int kv = Integer.parseInt(v); + if (kv > 348) + { + ChatUtils.sendMsg(ColorUtils.red + "Keycode Value is too high, maximum is 348 (Menu)"); + return 0; + } + if (kv < 0) + { + ChatUtils.sendMsg(ColorUtils.red + "Keycode Value must be positive"); + return 0; + } + ((KeycodeSetting)setting).value = kv; + } + catch (Exception e) + { + ChatUtils.sendMsg(ColorUtils.red + "Invalid Value, expected Keycode (integer)"); + return 0; + } } return SINGLE_SUCCESS; diff --git a/src/main/java/me/kawaiizenbo/moonlight/mixin/KeyboardMixin.java b/src/main/java/me/kawaiizenbo/moonlight/mixin/KeyboardMixin.java index 8d65ead..647fe00 100644 --- a/src/main/java/me/kawaiizenbo/moonlight/mixin/KeyboardMixin.java +++ b/src/main/java/me/kawaiizenbo/moonlight/mixin/KeyboardMixin.java @@ -15,20 +15,18 @@ import net.minecraft.client.Keyboard; import net.minecraft.client.MinecraftClient; @Mixin(Keyboard.class) -public abstract class KeyboardMixin { +public abstract class KeyboardMixin +{ @Shadow @Final private MinecraftClient client; @Inject(method = "onKey", at = @At("HEAD"), cancellable = true) public void onKey(long window, int key, int scancode, int action, int modifiers, CallbackInfo info) { - System.out.println("Keyboard event occured: " + java.awt.event.KeyEvent.getKeyText(key) + " (keycode "+key+")"); if (key == GLFW.GLFW_KEY_RIGHT_ALT) MinecraftClient.getInstance().setScreen(ClickGUIScreen.INSTANCE); for (Module m : ModuleManager.INSTANCE.modules) { - System.out.println("checking against module:" + m.name); - if (key == m.keybind.value) + if (key == m.keybind.value && action == GLFW.GLFW_PRESS) { - System.out.println("yup, we gotem :3"); m.toggle(); } } diff --git a/src/main/java/me/kawaiizenbo/moonlight/module/settings/KeycodeSetting.java b/src/main/java/me/kawaiizenbo/moonlight/module/settings/KeycodeSetting.java index 782552c..f4bbffe 100644 --- a/src/main/java/me/kawaiizenbo/moonlight/module/settings/KeycodeSetting.java +++ b/src/main/java/me/kawaiizenbo/moonlight/module/settings/KeycodeSetting.java @@ -1,7 +1,8 @@ package me.kawaiizenbo.moonlight.module.settings; -import me.kawaiizenbo.moonlight.ui.clickgui.KeybindScreen; -import net.minecraft.client.MinecraftClient; +import org.lwjgl.glfw.GLFW; + +import me.kawaiizenbo.moonlight.util.KeycodeUtils; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; import net.minecraft.text.Text; @@ -9,6 +10,7 @@ import net.minecraft.text.Text; public class KeycodeSetting extends Setting { public int value; + private boolean isWaiting = false; public KeycodeSetting(String name, int value) { @@ -19,11 +21,14 @@ public class KeycodeSetting extends Setting @Override public void mouseClicked(double mouseX, double mouseY, int button) { + if (isWaiting) + { + isWaiting = false; + return; + } if (hovered((int)mouseX, (int)mouseY) && button == 0) { - KeybindScreen kbs = new KeybindScreen(); - MinecraftClient.getInstance().setScreen(kbs); - this.value = kbs.returnedKeycode; + isWaiting = true; } } @@ -32,9 +37,34 @@ public class KeycodeSetting extends Setting { super.render(drawContext, x, y, mouseX, mouseY, textRenderer); drawContext.drawTextWithShadow(textRenderer, Text.literal(name), x+2, y+8, 0xFFFFFF); - String key = java.awt.event.KeyEvent.getKeyText(value); - if (value == 0) key = ""; - int twidth = textRenderer.getWidth(key); - drawContext.drawTextWithShadow(textRenderer, key, x+190-twidth, y+8, 0xFFFFFF); + if (isWaiting) + { + String waiting = "Press any key."; + int twwidth = textRenderer.getWidth(waiting); + drawContext.drawTextWithShadow(textRenderer, waiting, x+190-twwidth, y+8, 0xFFFFFF); + } + else + { + String key = KeycodeUtils.keyTable[value]; + if (value == GLFW.GLFW_KEY_UNKNOWN) key = ""; + int twidth = textRenderer.getWidth(key); + drawContext.drawTextWithShadow(textRenderer, key, x+190-twidth, y+8, 0xFFFFFF); + } + } + + @Override + public void keyPressed(int keyCode, int scanCode, int modifiers) + { + if (isWaiting) + { + if (keyCode == 256) + { + // escape was pressed, exit safely + isWaiting = false; + return; + } + value = keyCode; + isWaiting = false; + } } } diff --git a/src/main/java/me/kawaiizenbo/moonlight/ui/clickgui/KeybindScreen.java b/src/main/java/me/kawaiizenbo/moonlight/ui/clickgui/KeybindScreen.java deleted file mode 100644 index ddce092..0000000 --- a/src/main/java/me/kawaiizenbo/moonlight/ui/clickgui/KeybindScreen.java +++ /dev/null @@ -1,36 +0,0 @@ -package me.kawaiizenbo.moonlight.ui.clickgui; - -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.text.Text; - -public class KeybindScreen extends Screen -{ - public int returnedKeycode = 0; - - public KeybindScreen() - { - super(Text.literal("Keybind Selector")); - } - - @Override - public void render(DrawContext drawContext, int mouseX, int mouseY, float delta) - { - this.renderBackground(drawContext, mouseX, mouseY, delta); - drawContext.drawCenteredTextWithShadow(textRenderer, "Press any key (may not work, use .setting instead)", width/2, height/2, 0xFFFFFFFF); - } - - @Override - public boolean keyPressed(int keyCode, int scanCode, int modifiers) - { - returnedKeycode = keyCode; - this.close(); - return true; - } - - @Override - public boolean shouldPause() - { - return false; - } -} diff --git a/src/main/java/me/kawaiizenbo/moonlight/ui/clickgui/SettingsScreen.java b/src/main/java/me/kawaiizenbo/moonlight/ui/clickgui/SettingsScreen.java index 81722c6..65f9740 100644 --- a/src/main/java/me/kawaiizenbo/moonlight/ui/clickgui/SettingsScreen.java +++ b/src/main/java/me/kawaiizenbo/moonlight/ui/clickgui/SettingsScreen.java @@ -14,7 +14,7 @@ public class SettingsScreen extends Screen private TextButton backButton; boolean dragging = false; - int startX, startY, x = 4, y = 4, windowWidth = 224, windowHeight = 192; + int startX, startY, x = (ClickGUIScreen.INSTANCE.width/2)-112, y = (ClickGUIScreen.INSTANCE.height/2)-96, windowWidth = 224, windowHeight = 192; public SettingsScreen(Module module) { diff --git a/src/main/java/me/kawaiizenbo/moonlight/util/KeycodeUtils.java b/src/main/java/me/kawaiizenbo/moonlight/util/KeycodeUtils.java new file mode 100644 index 0000000..fccb953 --- /dev/null +++ b/src/main/java/me/kawaiizenbo/moonlight/util/KeycodeUtils.java @@ -0,0 +1,357 @@ +package me.kawaiizenbo.moonlight.util; + +public class KeycodeUtils +{ + public static String[] keyTable = { + "", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Space", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "'", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + ",", + "-", + ".", + "/", + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "Unknown", + ";", + "Unknown", + "=", + "Unknown", + "Unknown", + "Unknown", + "A", + "B", + "C", + "D", + "E", + "F", + "G", + "H", + "I", + "J", + "K", + "L", + "M", + "N", + "O", + "P", + "Q", + "R", + "S", + "T", + "U", + "V", + "W", + "X", + "Y", + "Z", + "[", + "\\", + "]", + "Unknown", + "Unknown", + "`", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "World 1", + "World 2", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Escape", + "Enter", + "Tab", + "Backspace", + "Insert", + "Delete", + "Right", + "Left", + "Down", + "Up", + "Page Up", + "Page Down", + "Home", + "End", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Caps Lock", + "Scroll Lock", + "Num Lock", + "Print Screen", + "Pause", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "F1", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "F10", + "F11", + "F12", + "F13", + "F14", + "F15", + "F16", + "F17", + "F18", + "F19", + "F20", + "F21", + "F22", + "F23", + "F24", + "F25", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Unknown", + "Num 0", + "Num 1", + "Num 2", + "Num 3", + "Num 4", + "Num 5", + "Num 6", + "Num 7", + "Num 8", + "Num 9", + "Num .", + "Num /", + "Num *", + "Num -", + "Num +", + "Num Enter", + "Num =", + "Unknown", + "Unknown", + "Unknown", + "Left Shift", + "Left Control", + "Left Alt", + "Left Command", + "Right Shift", + "Right Control", + "Right Alt", + "Right Command", + "Menu", + "Last", + }; +}