From dc9ba43f2ad2347e1165857c7d8c71eeed09013e Mon Sep 17 00:00:00 2001 From: Zpiboo Date: Mon, 2 Nov 2026 23:38:33 +0100 Subject: [PATCH 1/2] chore: create setter for isFocused field in InputField --- .../kurrycat/mpkmod/gui/components/InfoLabel.java | 4 ++-- .../kurrycat/mpkmod/gui/components/InputField.java | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/common/src/main/java/io/github/kurrycat/mpkmod/gui/components/InfoLabel.java b/common/src/main/java/io/github/kurrycat/mpkmod/gui/components/InfoLabel.java index a8488fee..0b3c933b 100644 --- a/common/src/main/java/io/github/kurrycat/mpkmod/gui/components/InfoLabel.java +++ b/common/src/main/java/io/github/kurrycat/mpkmod/gui/components/InfoLabel.java @@ -205,7 +205,7 @@ public InfoVarComponent(InfoVar infoVar, InputField inputField) { addButton.setButtonCallback(mouseButton -> { if (mouseButton != Mouse.Button.LEFT) return; inputField.typeContentAtCursor("{" + infoVar.getFullName() + "}"); - inputField.focus(); + inputField.setFocused(true); }); buttonHolder.passPositionTo(addButton, PERCENT.NONE, Anchor.CENTER_RIGHT); components.add(addButton); @@ -296,7 +296,7 @@ public ColorItem(ScrollableList parent, InputField inputField, Colors new Vector2D(0, 0), new Vector2D(1, 1), mouseButton -> { inputField.typeContentAtCursor("{" + color.getName() + "}"); - inputField.focus(); + inputField.setFocused(true); } ); button.normalColor = Theme.NONE; diff --git a/common/src/main/java/io/github/kurrycat/mpkmod/gui/components/InputField.java b/common/src/main/java/io/github/kurrycat/mpkmod/gui/components/InputField.java index 59722784..a88635f9 100644 --- a/common/src/main/java/io/github/kurrycat/mpkmod/gui/components/InputField.java +++ b/common/src/main/java/io/github/kurrycat/mpkmod/gui/components/InputField.java @@ -47,8 +47,8 @@ public InputField(String content, Vector2D pos, double width) { this(content, pos, width, false); } - public void focus() { - isFocused = true; + public void setFocused(boolean focused) { + isFocused = focused; } public InputField setName(String name) { @@ -118,11 +118,11 @@ private double getCursorX() { } @Override - public boolean handleKeyInput(int keyCode, int scanCode, int modifiers, boolean isCharTyped) { + public boolean handleKeyInput(int keyCode, int scanCode, int modifiers, boolean pressed) { if (!isFocused) return false; boolean inputPerformed = true; - if (isCharTyped && String.valueOf((char) keyCode).matches(getFilter())) { + if (pressed && String.valueOf((char) keyCode).matches(getFilter())) { typeContentAtCursor(Character.toString((char) keyCode)); } else { switch (keyCode) { @@ -196,7 +196,7 @@ private void updateContent(String content) { } public void clear() { - isFocused = false; + setFocused(false); cursorPos = 0; highlightStart = 0; highlightEnd = 0; @@ -209,13 +209,13 @@ public boolean handleMouseInput(Mouse.State state, Vector2D mousePos, Mouse.Butt switch (state) { case DOWN: if (contains(mousePos)) { - isFocused = true; + setFocused(true); cursorPos = getCursorPosFromMousePos(mousePos); highlightStart = cursorPos; highlightEnd = cursorPos; return true; } else { - isFocused = false; + setFocused(false); } case DRAG: case UP: From 512bdb7f62c97613d15b852c8f9b6a835f33eb3c Mon Sep 17 00:00:00 2001 From: Zpiboo Date: Mon, 2 Nov 2026 23:53:58 +0100 Subject: [PATCH 2/2] fix: inform the game of InputField focus changes --- .../kurrycat/mpkmod/compatibility/MCClasses/Keyboard.java | 6 ++++++ .../github/kurrycat/mpkmod/gui/components/InputField.java | 2 ++ .../compatibility/fabric_26_3/FunctionCompatibility.java | 7 +++++++ .../compatibility/forge_1_12_2/FunctionCompatibility.java | 3 +++ .../compatibility/forge_1_8/FunctionCompatibility.java | 3 +++ .../compatibility/ornithe_1_8_9/FunctionCompatibility.java | 3 +++ 6 files changed, 24 insertions(+) diff --git a/common/src/main/java/io/github/kurrycat/mpkmod/compatibility/MCClasses/Keyboard.java b/common/src/main/java/io/github/kurrycat/mpkmod/compatibility/MCClasses/Keyboard.java index 5c5c62f5..27305c77 100644 --- a/common/src/main/java/io/github/kurrycat/mpkmod/compatibility/MCClasses/Keyboard.java +++ b/common/src/main/java/io/github/kurrycat/mpkmod/compatibility/MCClasses/Keyboard.java @@ -11,6 +11,10 @@ public static List getPressedButtons() { return Interface.get().map(Interface::getPressedButtons).orElseGet(ArrayList::new); } + public static void textInputFocusChange(Object owner, boolean focused) { + Keyboard.Interface.get().ifPresent(i -> i.textInputFocusChange(owner, focused)); + } + public enum Modifier { CTRL, SHIFT, @@ -25,5 +29,7 @@ static Optional get() { } List getPressedButtons(); + + void textInputFocusChange(Object owner, boolean focused); } } diff --git a/common/src/main/java/io/github/kurrycat/mpkmod/gui/components/InputField.java b/common/src/main/java/io/github/kurrycat/mpkmod/gui/components/InputField.java index a88635f9..4fc0c242 100644 --- a/common/src/main/java/io/github/kurrycat/mpkmod/gui/components/InputField.java +++ b/common/src/main/java/io/github/kurrycat/mpkmod/gui/components/InputField.java @@ -2,6 +2,7 @@ import io.github.kurrycat.mpkmod.compatibility.MCClasses.FontRenderer; import io.github.kurrycat.mpkmod.compatibility.MCClasses.InputConstants; +import io.github.kurrycat.mpkmod.compatibility.MCClasses.Keyboard; import io.github.kurrycat.mpkmod.compatibility.MCClasses.Renderer2D; import io.github.kurrycat.mpkmod.gui.interfaces.KeyInputListener; import io.github.kurrycat.mpkmod.gui.interfaces.MouseInputListener; @@ -49,6 +50,7 @@ public InputField(String content, Vector2D pos, double width) { public void setFocused(boolean focused) { isFocused = focused; + Keyboard.textInputFocusChange(this, focused); } public InputField setName(String name) { diff --git a/fabric-26.3/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_26_3/FunctionCompatibility.java b/fabric-26.3/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_26_3/FunctionCompatibility.java index 14fb9be4..2ca6dda7 100644 --- a/fabric-26.3/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_26_3/FunctionCompatibility.java +++ b/fabric-26.3/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_26_3/FunctionCompatibility.java @@ -1,5 +1,6 @@ package io.github.kurrycat.mpkmod.compatibility.fabric_26_3; +import com.mojang.blaze3d.platform.TextInputManager; import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.renderpearl.api.pipeline.RenderPipeline; import io.github.kurrycat.mpkmod.compatibility.MCClasses.*; @@ -404,6 +405,12 @@ public Player.KeyInput getKeyInput() { return new Player.KeyInput(w, a, s, d, sprint, sneak, jump); } + @Override + public void textInputFocusChange(Object owner, boolean focused) { + TextInputManager textInputManager = net.minecraft.client.Minecraft.getInstance().textInputManager(); + textInputManager.onTextInputFocusChange(owner, focused); + } + private record PointsRenderState( Collection points, int r, int g, int b, int a, diff --git a/forge-1.12.2/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_12_2/FunctionCompatibility.java b/forge-1.12.2/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_12_2/FunctionCompatibility.java index 130cd815..63c8967e 100644 --- a/forge-1.12.2/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_12_2/FunctionCompatibility.java +++ b/forge-1.12.2/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_12_2/FunctionCompatibility.java @@ -506,4 +506,7 @@ public Player.KeyInput getKeyInput() { return new Player.KeyInput(w, a, s, d, sprint, sneak, jump); } + + @Override + public void textInputFocusChange(Object owner, boolean focused) {} } diff --git a/forge-1.8.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_8/FunctionCompatibility.java b/forge-1.8.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_8/FunctionCompatibility.java index fc8f69b6..58592717 100644 --- a/forge-1.8.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_8/FunctionCompatibility.java +++ b/forge-1.8.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_8/FunctionCompatibility.java @@ -507,4 +507,7 @@ public Player.KeyInput getKeyInput() { return new Player.KeyInput(w, a, s, d, sprint, sneak, jump); } + + @Override + public void textInputFocusChange(Object owner, boolean focused) {} } diff --git a/ornithe-1.8.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/ornithe_1_8_9/FunctionCompatibility.java b/ornithe-1.8.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/ornithe_1_8_9/FunctionCompatibility.java index e2d72adf..72e6ccf5 100644 --- a/ornithe-1.8.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/ornithe_1_8_9/FunctionCompatibility.java +++ b/ornithe-1.8.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/ornithe_1_8_9/FunctionCompatibility.java @@ -502,4 +502,7 @@ public Player.KeyInput getKeyInput() { return new Player.KeyInput(w, a, s, d, sprint, sneak, jump); } + + @Override + public void textInputFocusChange(Object owner, boolean focused) {} }