From 6fc49863e1aeaa3d6036af433dc441b320c25ef8 Mon Sep 17 00:00:00 2001 From: Leo dev Date: Wed, 26 Mar 2025 16:11:51 +0100 Subject: [PATCH] animations and added string configs --- .../saturnclient/SaturnClient.java | 10 +- .../saturnclient/auth/SaturnSocket.java | 2 +- .../saturnclient/config/Property.java | 20 +-- .../saturnclient/menus/CloaksMenu.java | 8 +- .../saturnclient/menus/ConfigEditor.java | 7 +- .../saturnclient/menus/MainMenu.java | 86 ++++----- .../saturnclient/menus/ModMenu.java | 17 +- .../saturnclient/saturnmods/ModManager.java | 43 +---- .../java/org/saturnclient/ui/SaturnUi.java | 38 ++-- .../ui/components/SaturnFloat.java | 2 +- .../ui/components/SaturnString.java | 168 ++++++++++++++++++ .../ui/widgets/SaturnClickableImage.java | 2 +- .../ui/widgets/SaturnClickableSprite.java | 2 +- .../ui/widgets/SaturnImageButton.java | 4 +- .../saturnclient/ui/widgets/SaturnScroll.java | 26 +-- 15 files changed, 289 insertions(+), 146 deletions(-) create mode 100644 src/main/java/org/saturnclient/ui/components/SaturnString.java diff --git a/src/main/java/org/saturnclient/saturnclient/SaturnClient.java b/src/main/java/org/saturnclient/saturnclient/SaturnClient.java index 8eb0a66..52038d3 100644 --- a/src/main/java/org/saturnclient/saturnclient/SaturnClient.java +++ b/src/main/java/org/saturnclient/saturnclient/SaturnClient.java @@ -9,6 +9,9 @@ import org.saturnclient.saturnclient.cloaks.Cloaks; import org.saturnclient.saturnclient.config.ConfigManager; import org.saturnclient.saturnclient.event.KeyInputHandler; import org.saturnclient.saturnmods.ModManager; +import org.saturnclient.ui.SaturnAnimation; +import org.saturnclient.ui.animations.FadeIn; +import org.saturnclient.ui.animations.Slide; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -29,13 +32,18 @@ public class SaturnClient implements ModInitializer { return ((int) (alpha * 255) << 24) | (NORMAL & 0x00FFFFFF); } + public static SaturnAnimation[] getAnimations() { + return new SaturnAnimation[] { new FadeIn(1), new Slide(3, 15) }; + } + @Override public void onInitialize() { LOGGER.info("Initializing " + MOD_ID); ModManager.init(); ConfigManager.load(); - ClientLifecycleEvents.CLIENT_STOPPING.register(_ -> ConfigManager.save() + ClientLifecycleEvents.CLIENT_STOPPING.register(_o -> + ConfigManager.save() ); KeyInputHandler.register(); diff --git a/src/main/java/org/saturnclient/saturnclient/auth/SaturnSocket.java b/src/main/java/org/saturnclient/saturnclient/auth/SaturnSocket.java index 8b09b79..341b21a 100644 --- a/src/main/java/org/saturnclient/saturnclient/auth/SaturnSocket.java +++ b/src/main/java/org/saturnclient/saturnclient/auth/SaturnSocket.java @@ -27,7 +27,7 @@ public class SaturnSocket { @SuppressWarnings("resource") public static boolean authenticate() { // Register shutdown hook ONCE - ClientLifecycleEvents.CLIENT_STOPPING.register(_ -> close()); + ClientLifecycleEvents.CLIENT_STOPPING.register(_o -> close()); try { MinecraftClient client = MinecraftClient.getInstance(); diff --git a/src/main/java/org/saturnclient/saturnclient/config/Property.java b/src/main/java/org/saturnclient/saturnclient/config/Property.java index 6c563c3..f944751 100644 --- a/src/main/java/org/saturnclient/saturnclient/config/Property.java +++ b/src/main/java/org/saturnclient/saturnclient/config/Property.java @@ -4,8 +4,12 @@ import com.google.gson.JsonElement; import com.google.gson.JsonPrimitive; public class Property { + public enum PropertyType { - BOOLEAN, INTEGER, FLOAT, STRING, UNKNOWN + BOOLEAN, + INTEGER, + FLOAT, + STRING, } public T value; @@ -55,20 +59,16 @@ public class Property { if (value instanceof String) { return PropertyType.STRING; } - return PropertyType.UNKNOWN; + return null; } public boolean matchesJson(JsonElement element) { if (element.isJsonPrimitive()) { JsonPrimitive primitive = element.getAsJsonPrimitive(); - if (value instanceof Boolean && primitive.isBoolean()) - return true; - if (value instanceof Integer && primitive.isNumber()) - return true; - if (value instanceof Float && primitive.isNumber()) - return true; - if (value instanceof String && primitive.isString()) - return true; + if (value instanceof Boolean && primitive.isBoolean()) return true; + if (value instanceof Integer && primitive.isNumber()) return true; + if (value instanceof Float && primitive.isNumber()) return true; + if (value instanceof String && primitive.isString()) return true; } return false; } diff --git a/src/main/java/org/saturnclient/saturnclient/menus/CloaksMenu.java b/src/main/java/org/saturnclient/saturnclient/menus/CloaksMenu.java index e4e50f8..1c5e460 100644 --- a/src/main/java/org/saturnclient/saturnclient/menus/CloaksMenu.java +++ b/src/main/java/org/saturnclient/saturnclient/menus/CloaksMenu.java @@ -1,11 +1,11 @@ package org.saturnclient.saturnclient.menus; import net.minecraft.text.Text; +import org.saturnclient.saturnclient.SaturnClient; import org.saturnclient.saturnclient.auth.SaturnSocket; import org.saturnclient.saturnclient.cloaks.Cloaks; import org.saturnclient.ui.SaturnUi; import org.saturnclient.ui.Textures; -import org.saturnclient.ui.animations.Slide; import org.saturnclient.ui.widgets.SaturnClickableSprite; import org.saturnclient.ui.widgets.SaturnImage; import org.saturnclient.ui.widgets.SaturnScroll; @@ -30,7 +30,7 @@ public class CloaksMenu extends SaturnUi { .setY(rectY) .setWidth(rectWidth) .setHeight(rectHeight) - .setAnimations(new Slide(1, 10)) + .setAnimations(SaturnClient.getAnimations()) ); int tabsX = (width - 43) / 2; @@ -42,7 +42,7 @@ public class CloaksMenu extends SaturnUi { .setY(tabsY) .setWidth(43) .setHeight(15) - .setAnimations(new Slide(1, 10)) + .setAnimations(SaturnClient.getAnimations()) ); int cloakWidth = 32; @@ -91,7 +91,7 @@ public class CloaksMenu extends SaturnUi { .setY(rectY + 10) .setWidth(rectWidth - 17) .setHeight(rectHeight - 10) - .setAnimations(new Slide(1, 10)) + .setAnimations(SaturnClient.getAnimations()) ); super.init(); diff --git a/src/main/java/org/saturnclient/saturnclient/menus/ConfigEditor.java b/src/main/java/org/saturnclient/saturnclient/menus/ConfigEditor.java index d767713..36c3378 100644 --- a/src/main/java/org/saturnclient/saturnclient/menus/ConfigEditor.java +++ b/src/main/java/org/saturnclient/saturnclient/menus/ConfigEditor.java @@ -2,11 +2,11 @@ package org.saturnclient.saturnclient.menus; import java.util.Map; import net.minecraft.text.Text; +import org.saturnclient.saturnclient.SaturnClient; import org.saturnclient.saturnclient.config.ConfigManager; import org.saturnclient.saturnclient.config.Property; import org.saturnclient.ui.SaturnUi; import org.saturnclient.ui.Textures; -import org.saturnclient.ui.animations.Slide; import org.saturnclient.ui.components.SaturnFloat; import org.saturnclient.ui.components.SaturnInteger; import org.saturnclient.ui.components.SaturnString; @@ -38,7 +38,7 @@ public class ConfigEditor extends SaturnUi { .setY(rectY) .setWidth(rectWidth) .setHeight(rectHeight) - .setAnimations(new Slide(1, 10)) + .setAnimations(SaturnClient.getAnimations()) ); int tabsX = (width - 43) / 2; @@ -50,7 +50,7 @@ public class ConfigEditor extends SaturnUi { .setY(tabsY) .setWidth(43) .setHeight(15) - .setAnimations(new Slide(1, 10)) + .setAnimations(SaturnClient.getAnimations()) ); SaturnScroll configScroll = new SaturnScroll(); @@ -170,6 +170,7 @@ public class ConfigEditor extends SaturnUi { .setY(rectY + 10) .setWidth(rectWidth - 17) .setHeight(rectHeight - 10) + .setAnimations(SaturnClient.getAnimations()) ); super.init(); diff --git a/src/main/java/org/saturnclient/saturnclient/menus/MainMenu.java b/src/main/java/org/saturnclient/saturnclient/menus/MainMenu.java index 7837954..c815f1c 100644 --- a/src/main/java/org/saturnclient/saturnclient/menus/MainMenu.java +++ b/src/main/java/org/saturnclient/saturnclient/menus/MainMenu.java @@ -1,17 +1,18 @@ package org.saturnclient.saturnclient.menus; +import net.minecraft.client.MinecraftClient; +import net.minecraft.text.Text; import org.saturnclient.saturnclient.SaturnClient; import org.saturnclient.ui.SaturnUi; import org.saturnclient.ui.Textures; import org.saturnclient.ui.animations.FadeIn; import org.saturnclient.ui.animations.Slide; import org.saturnclient.ui.widgets.SaturnButton; -import org.saturnclient.ui.widgets.SaturnImageButton; import org.saturnclient.ui.widgets.SaturnImage; -import net.minecraft.client.MinecraftClient; -import net.minecraft.text.Text; +import org.saturnclient.ui.widgets.SaturnImageButton; public class MainMenu extends SaturnUi { + public MainMenu() { super(Text.literal("Saturn Client")); } @@ -24,53 +25,58 @@ public class MainMenu extends SaturnUi { int buttonHeight = 25; draw( - new SaturnButton("Mods", () -> { - client.setScreen(new ModMenu()); - }).setX((width - buttonWidth) / 2).setY((height - buttonHeight) / - 2).setWidth(buttonWidth) - .setHeight(buttonHeight) - .setAnimations(new FadeIn(2))); + new SaturnButton("Mods", () -> { + client.setScreen(new ModMenu()); + }) + .setX((width - buttonWidth) / 2) + .setY((height - buttonHeight) / 2) + .setWidth(buttonWidth) + .setHeight(buttonHeight) + .setAnimations(new FadeIn(2)) + ); draw( - new SaturnImageButton(Textures.HUD_ICON, 14, 14, - () -> { - client.setScreen(new HudEditor()); - }) - .setX((width - buttonWidth - (buttonHeight * 2) - 6) / 2) - .setY((height - buttonHeight) / 2) - .setWidth(buttonHeight) - .setHeight(buttonHeight) - .setAnimations(new FadeIn(2))); + new SaturnImageButton(Textures.HUD_ICON, 14, 14, () -> { + client.setScreen(new HudEditor()); + }) + .setX((width - buttonWidth - (buttonHeight * 2) - 6) / 2) + .setY((height - buttonHeight) / 2) + .setWidth(buttonHeight) + .setHeight(buttonHeight) + .setAnimations(new FadeIn(2)) + ); draw( - new SaturnImageButton(Textures.COSMETICS, 14, 14, - () -> { - client.setScreen(new CloaksMenu()); - }) - .setX((width / 2) + (buttonWidth / 2) + 3) - .setY((height - buttonHeight) / 2) - .setWidth(buttonHeight) - .setHeight(buttonHeight) - .setAnimations(new FadeIn(2))); + new SaturnImageButton(Textures.COSMETICS, 14, 14, () -> { + client.setScreen(new CloaksMenu()); + }) + .setX((width / 2) + (buttonWidth / 2) + 3) + .setY((height - buttonHeight) / 2) + .setWidth(buttonHeight) + .setHeight(buttonHeight) + .setAnimations(new FadeIn(2)) + ); int logoSize = 49; draw( - new SaturnImage(Textures.LOGO_TEXT) - .setX((width - logoSize) / 2) - .setY((height - 8) / 2 - 23) - .setWidth(logoSize) - .setHeight(8) - .setAnimations(new FadeIn(2))); + new SaturnImage(Textures.LOGO_TEXT) + .setX((width - logoSize) / 2) + .setY((height - 8) / 2 - 23) + .setWidth(logoSize) + .setHeight(8) + .setAnimations(new FadeIn(2)) + ); draw( - new SaturnImage(Textures.LOGO) - .setX((width - logoSize) / 2) - .setY(height / 2 - logoSize - 24) - .setWidth(logoSize) - .setHeight(logoSize) - .setAnimations(new Slide(2, 14))); + new SaturnImage(Textures.LOGO) + .setX((width - logoSize) / 2) + .setY(height / 2 - logoSize - 24) + .setWidth(logoSize) + .setHeight(logoSize) + .setAnimations(new Slide(2, 14)) + ); super.init(); } -} \ No newline at end of file +} diff --git a/src/main/java/org/saturnclient/saturnclient/menus/ModMenu.java b/src/main/java/org/saturnclient/saturnclient/menus/ModMenu.java index 2214084..adfea19 100644 --- a/src/main/java/org/saturnclient/saturnclient/menus/ModMenu.java +++ b/src/main/java/org/saturnclient/saturnclient/menus/ModMenu.java @@ -7,8 +7,6 @@ import org.saturnclient.saturnmods.ModManager; import org.saturnclient.saturnmods.SaturnMod; import org.saturnclient.ui.SaturnUi; import org.saturnclient.ui.Textures; -import org.saturnclient.ui.animations.FadeIn; -import org.saturnclient.ui.animations.Slide; import org.saturnclient.ui.components.SaturnModComp; import org.saturnclient.ui.widgets.SaturnClickableImage; import org.saturnclient.ui.widgets.SaturnScroll; @@ -33,7 +31,7 @@ public class ModMenu extends SaturnUi { .setY(modsY) .setWidth(rectWidth) .setHeight(rectHeight) - .setAnimations(new Slide(1, 10)) + .setAnimations(SaturnClient.getAnimations()) ); int tabsX = (width - 43) / 2; @@ -45,7 +43,7 @@ public class ModMenu extends SaturnUi { .setY(tabsY) .setWidth(43) .setHeight(15) - .setAnimations(new Slide(1, 10)) + .setAnimations(SaturnClient.getAnimations()) ); int tabSize = 9; @@ -58,8 +56,7 @@ public class ModMenu extends SaturnUi { .setY(tabsY + 3) .setWidth(tabSize) .setHeight(tabSize) - .setAnimations(new FadeIn(2)) - .setAnimations(new Slide(1, 10)) + .setAnimations(SaturnClient.getAnimations()) ); draw( @@ -70,8 +67,7 @@ public class ModMenu extends SaturnUi { .setY(tabsY + 3) .setWidth(tabSize) .setHeight(tabSize) - .setAnimations(new FadeIn(2)) - .setAnimations(new Slide(1, 10)) + .setAnimations(SaturnClient.getAnimations()) ); draw( @@ -82,8 +78,7 @@ public class ModMenu extends SaturnUi { .setY(tabsY + 3) .setWidth(tabSize) .setHeight(tabSize) - .setAnimations(new FadeIn(2)) - .setAnimations(new Slide(1, 10)) + .setAnimations(SaturnClient.getAnimations()) ); int modX = 0; @@ -119,7 +114,7 @@ public class ModMenu extends SaturnUi { .setY(modsY + 10) .setWidth(rectWidth - 17) .setHeight(rectHeight - 20) - .setAnimations(new Slide(1, 10)) + .setAnimations(SaturnClient.getAnimations()) ); super.init(); diff --git a/src/main/java/org/saturnclient/saturnmods/ModManager.java b/src/main/java/org/saturnclient/saturnmods/ModManager.java index 16264c1..269e13e 100644 --- a/src/main/java/org/saturnclient/saturnmods/ModManager.java +++ b/src/main/java/org/saturnclient/saturnmods/ModManager.java @@ -11,49 +11,10 @@ import org.saturnclient.saturnmods.mods.Coordinates; public class ModManager { - public static SaturnMod[] MODS = { - new Coordinates(), - new ArmorDisplay(), - new ArmorDisplay(), - new ArmorDisplay(), - new ArmorDisplay(), - new ArmorDisplay(), - new ArmorDisplay(), - new ArmorDisplay(), - new ArmorDisplay(), - new ArmorDisplay(), - new ArmorDisplay(), - new ArmorDisplay(), - new ArmorDisplay(), - new ArmorDisplay(), - new ArmorDisplay(), - new ArmorDisplay(), - new ArmorDisplay(), - new ArmorDisplay(), - new ArmorDisplay(), - new ArmorDisplay(), - new ArmorDisplay(), - new ArmorDisplay(), - new ArmorDisplay(), - new ArmorDisplay(), - new ArmorDisplay(), - new ArmorDisplay(), - new ArmorDisplay(), - new ArmorDisplay(), - new ArmorDisplay(), - new ArmorDisplay(), - new ArmorDisplay(), - new ArmorDisplay(), - new ArmorDisplay(), - new ArmorDisplay(), - new ArmorDisplay(), - new ArmorDisplay(), - new ArmorDisplay(), - new Coordinates(), - }; + public static SaturnMod[] MODS = { new Coordinates(), new ArmorDisplay() }; public static void init() { - HudRenderCallback.EVENT.register((context, _) -> { + HudRenderCallback.EVENT.register((context, _o) -> { MinecraftClient client = MinecraftClient.getInstance(); TextRenderer textRenderer = client.textRenderer; diff --git a/src/main/java/org/saturnclient/ui/SaturnUi.java b/src/main/java/org/saturnclient/ui/SaturnUi.java index 2ec0ad3..82f0983 100644 --- a/src/main/java/org/saturnclient/ui/SaturnUi.java +++ b/src/main/java/org/saturnclient/ui/SaturnUi.java @@ -63,11 +63,13 @@ public class SaturnUi extends Screen { for (SaturnWidget widget : new ArrayList<>(widgets)) { if (!widget.visible) continue; + double adjustedMouseX = mouseX - widget.x; + double adjustedMouseY = mouseY - widget.y; boolean isMouseInside = - widget.x < mouseX && - widget.x + widget.width > mouseX && - widget.y < mouseY && - widget.y + widget.height > mouseY; + adjustedMouseX >= 0 && + adjustedMouseX <= (widget.width * widget.scale) && + adjustedMouseY >= 0 && + adjustedMouseY <= (widget.height * widget.scale); MatrixStack matrices = context.getMatrices(); matrices.push(); @@ -76,8 +78,8 @@ public class SaturnUi extends Screen { widget.render( context, isMouseInside, - mouseX - widget.x, - mouseY - widget.y + (int) (adjustedMouseX / widget.scale), + (int) (adjustedMouseY / widget.scale) ); matrices.pop(); } @@ -90,13 +92,13 @@ public class SaturnUi extends Screen { widget.focused = false; if (!widget.visible) continue; - double adjustedMouseX = (mouseX - widget.x) / widget.scale; - double adjustedMouseY = (mouseY - widget.y) / widget.scale; + double adjustedMouseX = mouseX - widget.x; + double adjustedMouseY = mouseY - widget.y; boolean isMouseInside = adjustedMouseX >= 0 && - adjustedMouseX <= widget.width && + adjustedMouseX <= (widget.width * widget.scale) && adjustedMouseY >= 0 && - adjustedMouseY <= widget.height; + adjustedMouseY <= (widget.height * widget.scale); SaturnClient.LOGGER.info( "CLick mouse X: " + @@ -108,8 +110,8 @@ public class SaturnUi extends Screen { if (isMouseInside) { widget.focused = true; widget.click( - ((int) mouseX) - widget.x, - ((int) mouseY) - widget.y + (int) (adjustedMouseX / widget.scale), + (int) (adjustedMouseY / widget.scale) ); } } @@ -141,18 +143,18 @@ public class SaturnUi extends Screen { double verticalAmount ) { for (SaturnWidget widget : new ArrayList<>(widgets)) { - double adjustedMouseX = (mouseX - widget.x) / widget.scale; - double adjustedMouseY = (mouseY - widget.y) / widget.scale; + double adjustedMouseX = mouseX - widget.x; + double adjustedMouseY = mouseY - widget.y; boolean isMouseInside = adjustedMouseX >= 0 && - adjustedMouseX <= widget.width && + adjustedMouseX <= (widget.width * widget.scale) && adjustedMouseY >= 0 && - adjustedMouseY <= widget.height; + adjustedMouseY <= (widget.height * widget.scale); if (isMouseInside) { widget.mouseScrolled( - ((int) mouseX) - widget.x, - ((int) mouseY) - widget.y, + (int) (adjustedMouseX / widget.scale), + (int) (adjustedMouseY / widget.scale), horizontalAmount, verticalAmount ); diff --git a/src/main/java/org/saturnclient/ui/components/SaturnFloat.java b/src/main/java/org/saturnclient/ui/components/SaturnFloat.java index 078cf40..4388038 100644 --- a/src/main/java/org/saturnclient/ui/components/SaturnFloat.java +++ b/src/main/java/org/saturnclient/ui/components/SaturnFloat.java @@ -40,7 +40,7 @@ public class SaturnFloat extends SaturnWidget { for (int i = 0; i < visibleText.length(); i++) { textWidth = textRenderer.getWidth(visibleText.substring(0, i + 1)); - if (textWidth > (mouseX - x)) { + if (textWidth > mouseX) { break; } diff --git a/src/main/java/org/saturnclient/ui/components/SaturnString.java b/src/main/java/org/saturnclient/ui/components/SaturnString.java new file mode 100644 index 0000000..69590b3 --- /dev/null +++ b/src/main/java/org/saturnclient/ui/components/SaturnString.java @@ -0,0 +1,168 @@ +package org.saturnclient.ui.components; + +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.render.RenderLayer; +import org.lwjgl.glfw.GLFW; +import org.saturnclient.saturnclient.SaturnClient; +import org.saturnclient.saturnclient.config.Property; +import org.saturnclient.ui.SaturnUi; +import org.saturnclient.ui.SaturnWidget; +import org.saturnclient.ui.Textures; + +public class SaturnString extends SaturnWidget { + + public Property prop; + public int cursorPosition = 0; + private TextRenderer textRenderer = MinecraftClient.getInstance() + .textRenderer; + + public SaturnString(Property prop, int x, int y, int width) { + this.x = x; + this.y = y; + this.width = width; + this.prop = prop; + this.height = textRenderer.fontHeight + 4; + this.scale = 0.8f; + } + + @Override + public void click(int mouseX, int mouseY) { + int scrollOffset = getScrollOffset(); + String visibleText = prop.value.substring(scrollOffset); + + int newCursorPos = scrollOffset; + int textWidth = 0; + + for (int i = 0; i < visibleText.length(); i++) { + textWidth = textRenderer.getWidth(visibleText.substring(0, i + 1)); + + if (textWidth > mouseX) { + break; + } + + newCursorPos++; + } + + cursorPosition = newCursorPos; + } + + @Override + public void charTyped(char chr) { + prop.value = + prop.value.substring(0, cursorPosition) + + chr + + prop.value.substring(cursorPosition); + + cursorPosition++; + } + + @Override + public void keyPressed(int keyCode, int scanCode, int modifiers) { + if (keyCode == GLFW.GLFW_KEY_BACKSPACE) { + if (cursorPosition > 0) { + prop.value = + prop.value.substring(0, cursorPosition - 1) + + prop.value.substring(cursorPosition); + cursorPosition--; + } + } else if (keyCode == GLFW.GLFW_KEY_LEFT) { + if (cursorPosition > 0) { + cursorPosition--; + } + } else if (keyCode == GLFW.GLFW_KEY_RIGHT) { + if (cursorPosition < prop.value.length()) { + cursorPosition++; + } + } + } + + @Override + public void render( + DrawContext context, + boolean hovering, + int mouseX, + int mouseY + ) { + context.drawGuiTexture( + RenderLayer::getGuiTextured, + Textures.BUTTON_BORDER, + 0, + 0, + this.width, + this.height, + focused ? SaturnClient.COLOR : SaturnClient.getWhite(this.alpha) + ); + + int scrollOffset = getScrollOffset(); + String visibleText = getVisibleText(scrollOffset); + + int textColor = focused ? 0xFFFFFF : 0xAAAAAA; + context.drawText( + textRenderer, + SaturnUi.text(visibleText), + 2, + 2, + textColor, + false + ); + + if (focused) { + int cursorX = + 2 + + textRenderer.getWidth( + SaturnUi.text( + visibleText.substring(0, cursorPosition - scrollOffset) + ) + ); + context.fill( + cursorX, + 2, + cursorX + 1, + textRenderer.fontHeight + 3, + 0xFFFFFFFF + ); + } + } + + public void clearText() { + prop.value = ""; + cursorPosition = 1; + } + + private int getScrollOffset() { + if (prop.value.isEmpty()) { + return 0; + } + + int offset = 0; + int maxWidth = width - 4; // Available width for prop.value + while (offset < cursorPosition) { // Ensure cursor remains visible + String visibleText = prop.value.substring(offset, cursorPosition); + if (textRenderer.getWidth(SaturnUi.text(visibleText)) > maxWidth) { + offset++; + } else { + break; + } + } + return offset; + } + + private String getVisibleText(int scrollOffset) { + String visibleText = prop.value.substring(scrollOffset); + + // Ensure prop.value does not overflow past the available width + for (int i = 1; i <= visibleText.length(); i++) { + if ( + textRenderer.getWidth( + SaturnUi.text(visibleText.substring(0, i)) + ) > + width - 4 + ) { + return visibleText.substring(0, i - 1); // Trim overflow + } + } + return visibleText; + } +} diff --git a/src/main/java/org/saturnclient/ui/widgets/SaturnClickableImage.java b/src/main/java/org/saturnclient/ui/widgets/SaturnClickableImage.java index 4666f67..3f1d871 100644 --- a/src/main/java/org/saturnclient/ui/widgets/SaturnClickableImage.java +++ b/src/main/java/org/saturnclient/ui/widgets/SaturnClickableImage.java @@ -25,7 +25,7 @@ public class SaturnClickableImage extends SaturnWidget { } public SaturnClickableImage(Identifier texture, Runnable onPress) { - this(texture, _ -> { + this(texture, _o -> { onPress.run(); }); } diff --git a/src/main/java/org/saturnclient/ui/widgets/SaturnClickableSprite.java b/src/main/java/org/saturnclient/ui/widgets/SaturnClickableSprite.java index cf3138f..4f85715 100644 --- a/src/main/java/org/saturnclient/ui/widgets/SaturnClickableSprite.java +++ b/src/main/java/org/saturnclient/ui/widgets/SaturnClickableSprite.java @@ -25,7 +25,7 @@ public class SaturnClickableSprite extends SaturnWidget { } public SaturnClickableSprite(Identifier sprite, Runnable onPress) { - this(sprite, _ -> { + this(sprite, _o -> { onPress.run(); }); } diff --git a/src/main/java/org/saturnclient/ui/widgets/SaturnImageButton.java b/src/main/java/org/saturnclient/ui/widgets/SaturnImageButton.java index 91c533a..8220f19 100644 --- a/src/main/java/org/saturnclient/ui/widgets/SaturnImageButton.java +++ b/src/main/java/org/saturnclient/ui/widgets/SaturnImageButton.java @@ -19,7 +19,7 @@ public class SaturnImageButton extends SaturnButton { int imageHeight, Consumer onPress ) { - super("", _ -> {}); + super("", _o -> {}); this.sprite = sprite; this.imageWidth = imageWidth; this.imageHeight = imageHeight; @@ -32,7 +32,7 @@ public class SaturnImageButton extends SaturnButton { int imageHeight, Runnable onPress ) { - this(sprite, imageWidth, imageHeight, _ -> { + this(sprite, imageWidth, imageHeight, _o -> { onPress.run(); }); } diff --git a/src/main/java/org/saturnclient/ui/widgets/SaturnScroll.java b/src/main/java/org/saturnclient/ui/widgets/SaturnScroll.java index 8d3003d..90b4b93 100644 --- a/src/main/java/org/saturnclient/ui/widgets/SaturnScroll.java +++ b/src/main/java/org/saturnclient/ui/widgets/SaturnScroll.java @@ -42,13 +42,13 @@ public class SaturnScroll extends SaturnWidget { for (SaturnWidget widget : children) { if (!widget.visible) continue; - double adjustedMouseX = (mouseX - widget.x) * scale; - double adjustedMouseY = (mouseY - widget.y + scroll) * scale; + double adjustedMouseX = (mouseX - widget.x); + double adjustedMouseY = (mouseY - widget.y + scroll); boolean isMouseInside = adjustedMouseX >= 0 && - adjustedMouseX <= widget.width && + adjustedMouseX <= (widget.width * widget.scale) && adjustedMouseY >= 0 && - adjustedMouseY <= widget.height; + adjustedMouseY <= (widget.height * widget.scale); if ( widget.y - scroll < height && widget.y + widget.height > scroll @@ -61,8 +61,8 @@ public class SaturnScroll extends SaturnWidget { widget.render( context, isMouseInside, - (int) adjustedMouseX, - (int) adjustedMouseY + (int) (adjustedMouseX / widget.scale), + (int) (adjustedMouseY / widget.scale) ); matrices.pop(); } @@ -126,18 +126,20 @@ public class SaturnScroll extends SaturnWidget { continue; } - double adjustedMouseX = (mouseX - widget.x) * scale; - double adjustedMouseY = - (mouseY - (widget.y - scroll)) * widget.scale; + double adjustedMouseX = (mouseX - widget.x); + double adjustedMouseY = (mouseY - (widget.y - scroll)); boolean isMouseInside = adjustedMouseX >= 0 && - adjustedMouseX <= widget.width && + adjustedMouseX <= (widget.width * widget.scale) && adjustedMouseY >= 0 && - adjustedMouseY <= widget.height; + adjustedMouseY <= (widget.height * widget.scale); if (isMouseInside) { widget.focused = true; - widget.click((int) adjustedMouseX, (int) adjustedMouseY); + widget.click( + (int) (adjustedMouseX / widget.scale), + (int) (adjustedMouseY / widget.scale) + ); } } }