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/lang/entries/ExpressionLoader.java b/src/main/java/io/github/syst3ms/skriptparser/lang/entries/ExpressionLoader.java index a256c0dd..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,20 +57,8 @@ 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; - } + if (expression instanceof Variable var) { + var.setReturnType(this.typeClass); } config.getData().put(this.key, expression); 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(); } 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") 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; 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..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 @@ -17,11 +17,26 @@ 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.") + .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(); } 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();