From 94c97aeeaad3bc6cd5509cc8805cabb5e32d8d6c Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Sun, 1 Mar 2026 13:19:23 -0800 Subject: [PATCH 1/8] Color - apparently hex needs to be lower case --- .../java/io/github/syst3ms/skriptparser/util/color/Color.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/io/github/syst3ms/skriptparser/util/color/Color.java b/src/main/java/io/github/syst3ms/skriptparser/util/color/Color.java index a0a39a87..17871418 100644 --- a/src/main/java/io/github/syst3ms/skriptparser/util/color/Color.java +++ b/src/main/java/io/github/syst3ms/skriptparser/util/color/Color.java @@ -1,5 +1,6 @@ package io.github.syst3ms.skriptparser.util.color; +import java.util.Locale; import java.util.Map; import java.util.Optional; import java.util.regex.Pattern; @@ -116,6 +117,7 @@ public static Color of(long hex, boolean isAlpha) { * @see #COLOR_PATTERN */ public static Optional ofHex(String hex) { + hex = hex.toLowerCase(Locale.ROOT); if (!hex.matches(COLOR_PATTERN.pattern())) return Optional.empty(); From c5332ee0d36202393cc6daab76d2c8e21f405eb3 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Sun, 1 Mar 2026 17:15:26 -0800 Subject: [PATCH 2/8] SectionConfiguration - wrong cast --- .../syst3ms/skriptparser/lang/entries/SectionConfiguration.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/github/syst3ms/skriptparser/lang/entries/SectionConfiguration.java b/src/main/java/io/github/syst3ms/skriptparser/lang/entries/SectionConfiguration.java index 24b843ff..af5cd5e8 100644 --- a/src/main/java/io/github/syst3ms/skriptparser/lang/entries/SectionConfiguration.java +++ b/src/main/java/io/github/syst3ms/skriptparser/lang/entries/SectionConfiguration.java @@ -152,7 +152,7 @@ public Optional getValue(String key, Class cls) { public Optional> getExpression(String key, Class cls) { Object o = this.data.get(key); if (o instanceof Expression expression && cls.isAssignableFrom(expression.getReturnType())) { - return (Optional>) Optional.of((T) expression); + return Optional.of((Expression) expression); } return Optional.empty(); } From 93b5072449ba080ca5d2aca2252226235e90e123 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Sun, 1 Mar 2026 17:15:48 -0800 Subject: [PATCH 3/8] ExpressionLoader - remove converter --- .../lang/entries/ExpressionLoader.java | 31 ++++++++++--------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/src/main/java/io/github/syst3ms/skriptparser/lang/entries/ExpressionLoader.java b/src/main/java/io/github/syst3ms/skriptparser/lang/entries/ExpressionLoader.java index a256c0dd..f642d8e6 100644 --- a/src/main/java/io/github/syst3ms/skriptparser/lang/entries/ExpressionLoader.java +++ b/src/main/java/io/github/syst3ms/skriptparser/lang/entries/ExpressionLoader.java @@ -60,21 +60,22 @@ public boolean loadEntry(SectionConfiguration config, FileElement element, Parse } Expression expression = exprOptional.get(); - if (Variable.class.isAssignableFrom(expression.getClass())) { - Class returnType = expression.getReturnType(); - - if (!this.typeClass.isAssignableFrom(returnType)) { - Optional>> converter = Converters.getConverter(returnType, this.typeClass); - if (converter.isPresent()) { - ConvertedExpression tConvertedExpression = ConvertedExpression.newInstance(expression, this.typeClass, converter.get()); - config.getData().put(this.key, tConvertedExpression); - return true; - } - - logger.error("Expression '" + s + "' does not return a " + typeClass.getSimpleName() + " found: " + expression.getReturnType().getSimpleName(), ErrorType.SEMANTIC_ERROR); - return false; - } - } + // This broke stuff, but I'm going to leave it just in case +// if (Variable.class.isAssignableFrom(expression.getClass())) { +// Class returnType = expression.getReturnType(); +// +// if (!this.typeClass.isAssignableFrom(returnType)) { +// Optional>> converter = Converters.getConverter(returnType, this.typeClass); +// if (converter.isPresent()) { +// ConvertedExpression tConvertedExpression = ConvertedExpression.newInstance(expression, this.typeClass, converter.get()); +// config.getData().put(this.key, tConvertedExpression); +// return true; +// } +// +// logger.error("Expression '" + s + "' does not return a " + typeClass.getSimpleName() + " found: " + expression.getReturnType().getSimpleName(), ErrorType.SEMANTIC_ERROR); +// return false; +// } +// } config.getData().put(this.key, expression); return true; From 77f3b1348eef6fe6a90ce4e793dca1999f1ae930 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Sun, 1 Mar 2026 18:17:26 -0800 Subject: [PATCH 4/8] ExpressionLoader - more fixes --- .../lang/entries/ExpressionLoader.java | 22 +++---------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/src/main/java/io/github/syst3ms/skriptparser/lang/entries/ExpressionLoader.java b/src/main/java/io/github/syst3ms/skriptparser/lang/entries/ExpressionLoader.java index f642d8e6..bc92ab53 100644 --- a/src/main/java/io/github/syst3ms/skriptparser/lang/entries/ExpressionLoader.java +++ b/src/main/java/io/github/syst3ms/skriptparser/lang/entries/ExpressionLoader.java @@ -3,16 +3,13 @@ import io.github.syst3ms.skriptparser.file.FileElement; import io.github.syst3ms.skriptparser.lang.Expression; import io.github.syst3ms.skriptparser.lang.Variable; -import io.github.syst3ms.skriptparser.lang.base.ConvertedExpression; import io.github.syst3ms.skriptparser.log.ErrorType; import io.github.syst3ms.skriptparser.log.SkriptLogger; import io.github.syst3ms.skriptparser.parsing.ParserState; import io.github.syst3ms.skriptparser.parsing.SyntaxParser; import io.github.syst3ms.skriptparser.types.PatternType; -import io.github.syst3ms.skriptparser.types.conversions.Converters; import java.util.Optional; -import java.util.function.Function; public class ExpressionLoader extends OptionLoader { @@ -60,22 +57,9 @@ public boolean loadEntry(SectionConfiguration config, FileElement element, Parse } Expression expression = exprOptional.get(); - // This broke stuff, but I'm going to leave it just in case -// if (Variable.class.isAssignableFrom(expression.getClass())) { -// Class returnType = expression.getReturnType(); -// -// if (!this.typeClass.isAssignableFrom(returnType)) { -// Optional>> converter = Converters.getConverter(returnType, this.typeClass); -// if (converter.isPresent()) { -// ConvertedExpression tConvertedExpression = ConvertedExpression.newInstance(expression, this.typeClass, converter.get()); -// config.getData().put(this.key, tConvertedExpression); -// return true; -// } -// -// logger.error("Expression '" + s + "' does not return a " + typeClass.getSimpleName() + " found: " + expression.getReturnType().getSimpleName(), ErrorType.SEMANTIC_ERROR); -// return false; -// } -// } + if (expression instanceof Variable var) { + var.setReturnType(this.typeClass); + } config.getData().put(this.key, expression); return true; From 5669e4a5f11bb50b5e724f3bb40f957554e47147 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Sun, 1 Mar 2026 19:02:37 -0800 Subject: [PATCH 5/8] DefaultRegistration - add string concat --- .../registration/DefaultRegistration.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/main/java/io/github/syst3ms/skriptparser/registration/DefaultRegistration.java b/src/main/java/io/github/syst3ms/skriptparser/registration/DefaultRegistration.java index 5a4f9d7b..fbd9e079 100644 --- a/src/main/java/io/github/syst3ms/skriptparser/registration/DefaultRegistration.java +++ b/src/main/java/io/github/syst3ms/skriptparser/registration/DefaultRegistration.java @@ -251,6 +251,25 @@ public String deserialize(Gson gson, JsonElement element) { return gson.fromJson(element, String.class); } }) + .arithmetic(new Arithmetic() { + @Override + public String difference(String first, String second) { + return first.substring(second.length()); + } + @Override + public String add(String value, String difference) { + return value + difference; + } + @Override + public String subtract(String value, String difference) { + return value.substring(0, value.length() - difference.length()); + } + + @Override + public Class getRelativeType() { + return String.class; + } + }) .register(); registration.newType(Boolean.class, "boolean", "boolean@s") From f61e9b9cfb5f590b56696541323ebaceb795c861 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Tue, 3 Mar 2026 21:55:45 -0800 Subject: [PATCH 6/8] Fix priority issues with conditions --- .../syst3ms/skriptparser/expressions/CondExprCompare.java | 1 + .../syst3ms/skriptparser/expressions/CondExprContains.java | 1 - .../syst3ms/skriptparser/registration/SkriptRegistration.java | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/github/syst3ms/skriptparser/expressions/CondExprCompare.java b/src/main/java/io/github/syst3ms/skriptparser/expressions/CondExprCompare.java index cdbfde27..63ef2cfc 100644 --- a/src/main/java/io/github/syst3ms/skriptparser/expressions/CondExprCompare.java +++ b/src/main/java/io/github/syst3ms/skriptparser/expressions/CondExprCompare.java @@ -59,6 +59,7 @@ public class CondExprCompare extends ConditionalExpression { "if {_string} is not equal to {_string2}:", "if 1 = 1:") .since("1.0.0") + .setPriority(0) .register(); } diff --git a/src/main/java/io/github/syst3ms/skriptparser/expressions/CondExprContains.java b/src/main/java/io/github/syst3ms/skriptparser/expressions/CondExprContains.java index b8e1c06d..add9cef7 100644 --- a/src/main/java/io/github/syst3ms/skriptparser/expressions/CondExprContains.java +++ b/src/main/java/io/github/syst3ms/skriptparser/expressions/CondExprContains.java @@ -30,7 +30,6 @@ public class CondExprContains extends ConditionalExpression { "%string% [1:does(n't| not)] contain[s] %string%", "%objects% [1:do[es](n't| not)] contain[s] %objects%" ) - .setPriority(2) .name("Contains") .description("Checks if a given list of objects contain a given element. You can also check if a string contains another string.") .examples("if {_string} contains \"hello\":", diff --git a/src/main/java/io/github/syst3ms/skriptparser/registration/SkriptRegistration.java b/src/main/java/io/github/syst3ms/skriptparser/registration/SkriptRegistration.java index e1db2f29..a27268c0 100644 --- a/src/main/java/io/github/syst3ms/skriptparser/registration/SkriptRegistration.java +++ b/src/main/java/io/github/syst3ms/skriptparser/registration/SkriptRegistration.java @@ -953,7 +953,7 @@ public abstract class SyntaxRegistrar implements Regist protected final List patterns = new ArrayList<>(); protected final Map data = new HashMap<>(); protected Documentation documentation = new Documentation(); - protected int priority; + protected int priority = 5; SyntaxRegistrar(Class c, String... patterns) { this.c = c; From 29d0223dce5c7b4796064257cb663366554e7f57 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Wed, 4 Mar 2026 07:07:03 -0800 Subject: [PATCH 7/8] StructFunction - add "returns" and "->" for return code of function --- .../skriptparser/structures/functions/StructFunction.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/github/syst3ms/skriptparser/structures/functions/StructFunction.java b/src/main/java/io/github/syst3ms/skriptparser/structures/functions/StructFunction.java index 85767da1..dbdf778c 100644 --- a/src/main/java/io/github/syst3ms/skriptparser/structures/functions/StructFunction.java +++ b/src/main/java/io/github/syst3ms/skriptparser/structures/functions/StructFunction.java @@ -17,7 +17,7 @@ public class StructFunction extends Structure { static { Parser.getMainRegistration() .newStructure(StructFunction.class, "*[:local[ ]] func[tion] <" + Functions.FUNCTION_NAME_REGEX + ">" + - "\\([params:%*functionparameters%]\\)[return: \\:\\: <.+>]") + "\\([params:%*functionparameters%]\\)[return: (\\:\\:|returns|-\\>) <.+>]") .setHandledContexts(FunctionContext.class) .name("Function") .description("Creates a function that can be called from other scripts.") From c9073c10668752ee43a0f3c75136a7824771104c Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Wed, 4 Mar 2026 07:16:20 -0800 Subject: [PATCH 8/8] StructFunction - add some examples --- .../structures/functions/StructFunction.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/github/syst3ms/skriptparser/structures/functions/StructFunction.java b/src/main/java/io/github/syst3ms/skriptparser/structures/functions/StructFunction.java index dbdf778c..010228a3 100644 --- a/src/main/java/io/github/syst3ms/skriptparser/structures/functions/StructFunction.java +++ b/src/main/java/io/github/syst3ms/skriptparser/structures/functions/StructFunction.java @@ -20,8 +20,23 @@ public class StructFunction extends Structure { "\\([params:%*functionparameters%]\\)[return: (\\:\\:|returns|-\\>) <.+>]") .setHandledContexts(FunctionContext.class) .name("Function") - .description("Creates a function that can be called from other scripts.") + .description("Creates a function that can be called from other scripts.", + "`local` indicates a function that can only be called from the same script.") .since("1.0.0") + .examples("function getName(p: player) :: string:", + "\treturn name of {_p}", + "", + "function getLocation(e: entity) returns location:", + "\treturn location of {_e}", + "", + "function getWorld(e: entity) -> world:", + "\treturn world of {_e}", + "", + "function spawn(p: players):", + "\tteleport {_p::*} to {spawn}", + "", + "function broadcast(m: string, p: players):", + "\tsend {_m} to {_p::*}") .register(); }