diff --git a/src/main/java/noppes/npcs/client/gui/util/GuiScriptTextArea.java b/src/main/java/noppes/npcs/client/gui/util/GuiScriptTextArea.java index e3067a5e7..0972872ef 100644 --- a/src/main/java/noppes/npcs/client/gui/util/GuiScriptTextArea.java +++ b/src/main/java/noppes/npcs/client/gui/util/GuiScriptTextArea.java @@ -523,6 +523,12 @@ public class GuiScriptTextArea extends GuiNpcTextField { return selection.getCursorPosition(); } + @Override + public void setCursorPosition(int position) { + selection.reset(Math.max(0, Math.min(position, GuiScriptTextArea.this.text.length()))); + scrollToCursor(); + } + @Override public String getText() { return GuiScriptTextArea.this.text; diff --git a/src/main/java/noppes/npcs/client/gui/util/script/autocomplete/AutocompleteManager.java b/src/main/java/noppes/npcs/client/gui/util/script/autocomplete/AutocompleteManager.java index 1996f2cec..ca2cde68c 100644 --- a/src/main/java/noppes/npcs/client/gui/util/script/autocomplete/AutocompleteManager.java +++ b/src/main/java/noppes/npcs/client/gui/util/script/autocomplete/AutocompleteManager.java @@ -91,6 +91,12 @@ public class AutocompleteManager { */ int getCursorPosition(); + /** + * Set cursor position. + * @param position New cursor position + */ + void setCursorPosition(int position); + /** * Get current document text. */ @@ -543,6 +549,12 @@ public class AutocompleteManager { // This prevents position corruption since import adds text at the TOP insertCallback.replaceTextRange(insertText, prefixStartPosition, endPos); + // If the inserted text ends with (), move cursor inside only when parameters exist + if (insertText.endsWith("()") && item.getParameterCount() > 0) { + int currentCursor = insertCallback.getCursorPosition(); + insertCallback.setCursorPosition(currentCursor - 1); + } + // If this item requires an import, add it AFTER the text replacement if (item.requiresImport() && item.getImportPath() != null) { insertCallback.addImport(item.getImportPath());