From 5b8827549f3f0fce7fd4ea5d64eee0dfbcb4f618 Mon Sep 17 00:00:00 2001 From: bigguy345 Date: Wed, 25 Feb 2026 16:29:52 +0200 Subject: [PATCH] Fixed broken .d.ts fields parsing logic --- .../util/script/interpreter/field/FieldInfo.java | 8 +++++--- .../js_parser/TypeScriptDefinitionParser.java | 13 ++++++++----- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/main/java/noppes/npcs/client/gui/util/script/interpreter/field/FieldInfo.java b/src/main/java/noppes/npcs/client/gui/util/script/interpreter/field/FieldInfo.java index 8648d91f9..b8f48fc8d 100644 --- a/src/main/java/noppes/npcs/client/gui/util/script/interpreter/field/FieldInfo.java +++ b/src/main/java/noppes/npcs/client/gui/util/script/interpreter/field/FieldInfo.java @@ -202,9 +202,11 @@ public final class FieldInfo { */ public static FieldInfo fromJSField(JSFieldInfo jsField, TypeInfo containingType) { String name = jsField.getName(); - - // Resolve the type from the JS type registry - TypeInfo type = resolveJSType(jsField.getType()); + + TypeInfo type = jsField.getResolvedType(containingType); + if (type == null || !type.isResolved()) { + type = resolveJSType(jsField.getType()); + } // JS fields are public by default, readonly maps to final int modifiers = Modifier.PUBLIC; diff --git a/src/main/java/noppes/npcs/client/gui/util/script/interpreter/js_parser/TypeScriptDefinitionParser.java b/src/main/java/noppes/npcs/client/gui/util/script/interpreter/js_parser/TypeScriptDefinitionParser.java index a0798da25..3b3a1d1d2 100644 --- a/src/main/java/noppes/npcs/client/gui/util/script/interpreter/js_parser/TypeScriptDefinitionParser.java +++ b/src/main/java/noppes/npcs/client/gui/util/script/interpreter/js_parser/TypeScriptDefinitionParser.java @@ -587,13 +587,16 @@ public class TypeScriptDefinitionParser { // Parse fields (that aren't method signatures) Matcher fieldMatcher = FIELD_PATTERN.matcher(body); while (fieldMatcher.find()) { - String fieldText = fieldMatcher.group(0); - // Skip if this looks like a method (has parentheses in the match) - if (fieldText.contains("(")) continue; - - boolean readonly = fieldMatcher.group(1) != null; String fieldName = fieldMatcher.group(2); + + // CNPC+ base event implementation CustomNPCsEvent exposes a public "API" field that + // ends up polluting autocomplete on every event via ICustomNPCsEvent inheritance. + // Keep parsing other fields, but skip this one. + if ("ICustomNPCsEvent".equals(typeInfo.getSimpleName()) && "API".equals(fieldName)) + continue; + String fieldType = cleanType(fieldMatcher.group(3)); + boolean readonly = fieldMatcher.group(1) != null; JSFieldInfo field = new JSFieldInfo(fieldName, fieldType, readonly);