diff --git a/src/main/java/noppes/npcs/client/gui/util/script/interpreter/ScriptDocument.java b/src/main/java/noppes/npcs/client/gui/util/script/interpreter/ScriptDocument.java index 10863298a..490743a97 100644 --- a/src/main/java/noppes/npcs/client/gui/util/script/interpreter/ScriptDocument.java +++ b/src/main/java/noppes/npcs/client/gui/util/script/interpreter/ScriptDocument.java @@ -764,10 +764,13 @@ public class ScriptDocument { if (isExcluded(m.start())) continue; - String typeName = m.group(1); + String typeNameRaw = m.group(1); String fieldName = m.group(2); int position = m.start(2); + // Strip modifiers (public, private, protected, static, final, etc.) from type name + String typeName = stripModifiers(typeNameRaw); + // Check if inside a method - if so, it's a local, not global boolean insideMethod = false; for (MethodInfo method : methods) { @@ -785,6 +788,27 @@ public class ScriptDocument { } } + /** + * Strip Java modifiers from a type name string. + * e.g., "public static String" -> "String" + */ + private String stripModifiers(String typeName) { + if (typeName == null) return null; + + String[] parts = typeName.trim().split("\\s+"); + // Filter out known modifiers + StringBuilder result = new StringBuilder(); + for (String part : parts) { + if (!TypeResolver.isModifier(part)) { + if (result.length() > 0) result.append(" "); + result.append(part); + } + } + return result.toString(); + } + + + private TypeInfo resolveType(String typeName) { return resolveTypeAndTrackUsage(typeName); } diff --git a/src/main/java/noppes/npcs/client/gui/util/script/interpreter/TypeResolver.java b/src/main/java/noppes/npcs/client/gui/util/script/interpreter/TypeResolver.java index 80bbea054..fb1c2d068 100644 --- a/src/main/java/noppes/npcs/client/gui/util/script/interpreter/TypeResolver.java +++ b/src/main/java/noppes/npcs/client/gui/util/script/interpreter/TypeResolver.java @@ -379,6 +379,16 @@ public class TypeResolver { typeName.equals("short") || typeName.equals("int") || typeName.equals("long") || typeName.equals("float") || typeName.equals("double") || typeName.equals("void"); } + + /** + * Check if a word is a Java modifier keyword. + */ + public static boolean isModifier(String word) { + return word.equals("public") || word.equals("private") || word.equals("protected") || + word.equals("static") || word.equals("final") || word.equals("abstract") || + word.equals("synchronized") || word.equals("volatile") || word.equals("transient") || + word.equals("native") || word.equals("strictfp"); + } /** * Represents a type occurrence within generic content.