From 99c4a8646a4f2132758ecb607b86582c08bc6d35 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Wed, 11 Feb 2026 08:29:59 -0800 Subject: [PATCH 1/5] TriggerMap - memory leak - variables should be cleared after EACH trigger is called, not after all of them are called --- .../io/github/syst3ms/skriptparser/lang/TriggerMap.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/github/syst3ms/skriptparser/lang/TriggerMap.java b/src/main/java/io/github/syst3ms/skriptparser/lang/TriggerMap.java index c06047eb..e3f6b1bb 100644 --- a/src/main/java/io/github/syst3ms/skriptparser/lang/TriggerMap.java +++ b/src/main/java/io/github/syst3ms/skriptparser/lang/TriggerMap.java @@ -77,8 +77,11 @@ public static List getTriggersByContext(Clas * @param Trigger context type */ public static void callTriggersByContext(T context) { - getTriggersByContext(context.getClass()).forEach(t -> Statement.runAll(t, context)); - Variables.clearLocalVariables(context); + getTriggersByContext(context.getClass()).forEach(t -> { + Statement.runAll(t, context); + Variables.clearLocalVariables(context); + }); + } } From 92af2f629d693dfc738a1e45330925a58f7d061d Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Wed, 11 Feb 2026 14:18:10 -0800 Subject: [PATCH 2/5] Statement - add exceptionHandler (going to use this to catch them in tests) --- .../io/github/syst3ms/skriptparser/lang/Statement.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/io/github/syst3ms/skriptparser/lang/Statement.java b/src/main/java/io/github/syst3ms/skriptparser/lang/Statement.java index c73e26d3..b432928d 100644 --- a/src/main/java/io/github/syst3ms/skriptparser/lang/Statement.java +++ b/src/main/java/io/github/syst3ms/skriptparser/lang/Statement.java @@ -13,6 +13,7 @@ */ public abstract class Statement implements SyntaxElement { public static Consumer illegalStateRunnable; + public static Consumer exceptionHandler; @Nullable protected CodeSection parent; @Nullable @@ -22,6 +23,10 @@ public static void setIllegalStateHandler(Consumer consum Statement.illegalStateRunnable = consumer; } + public static void setExceptionHandler(Consumer consumer) { + Statement.exceptionHandler = consumer; + } + /** * Runs all code starting at a given point sequentially. * Do note this will not clear local variables after running. @@ -48,8 +53,12 @@ public static boolean runAll(Statement start, TriggerContext context) { } return false; } catch (Exception e) { + if (exceptionHandler != null) { + exceptionHandler.accept(e); + } System.err.println("An exception occurred. Stack trace:"); e.printStackTrace(); + } return false; } From fdb23edfee3e942021e960e4d7de6f7316ab174e Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Wed, 11 Feb 2026 16:44:06 -0800 Subject: [PATCH 3/5] VariableString - fix Type#variableNameFunc being applied to ALL strings --- .../skriptparser/lang/VariableString.java | 17 ++++++++++------- .../skriptparser/variables/Variables.java | 3 ++- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/main/java/io/github/syst3ms/skriptparser/lang/VariableString.java b/src/main/java/io/github/syst3ms/skriptparser/lang/VariableString.java index 4c2072de..a6dcadd1 100644 --- a/src/main/java/io/github/syst3ms/skriptparser/lang/VariableString.java +++ b/src/main/java/io/github/syst3ms/skriptparser/lang/VariableString.java @@ -8,6 +8,7 @@ import io.github.syst3ms.skriptparser.registration.tags.Tag; import io.github.syst3ms.skriptparser.registration.tags.TagManager; import io.github.syst3ms.skriptparser.types.TypeManager; +import io.github.syst3ms.skriptparser.types.TypeManager.StringMode; import io.github.syst3ms.skriptparser.util.CollectionUtils; import io.github.syst3ms.skriptparser.util.StringUtils; import org.jetbrains.annotations.Contract; @@ -27,10 +28,12 @@ public class VariableString extends TaggedExpression { */ private final Object[] data; private final boolean simple; + private final StringMode stringMode; - private VariableString(Object[] data) { + private VariableString(Object[] data, StringMode stringMode) { this.data = data; this.simple = data.length == 1 && data[0] instanceof String; + this.stringMode = stringMode; } /** @@ -41,7 +44,7 @@ private VariableString(Object[] data) { * @return {@code null} if either: *