diff --git a/src/main/java/me/melontini/commander/impl/expression/EvalUtils.java b/src/main/java/me/melontini/commander/impl/expression/EvalUtils.java index 251e272..6758b38 100644 --- a/src/main/java/me/melontini/commander/impl/expression/EvalUtils.java +++ b/src/main/java/me/melontini/commander/impl/expression/EvalUtils.java @@ -18,6 +18,9 @@ import me.melontini.commander.impl.event.data.types.ExtractionTypes; import me.melontini.commander.impl.expression.extensions.ReflectiveValueConverter; import me.melontini.commander.impl.expression.functions.*; import me.melontini.commander.impl.expression.functions.arrays.*; +import me.melontini.commander.impl.expression.functions.math.ClampFunction; +import me.melontini.commander.impl.expression.functions.math.LerpFunction; +import me.melontini.commander.impl.expression.functions.math.RangedRandomFunction; import me.melontini.commander.impl.mixin.evalex.EvaluationValueAccessor; import me.melontini.commander.impl.mixin.evalex.ExpressionAccessor; import me.melontini.commander.impl.mixin.evalex.ExpressionConfigurationAccessor; @@ -64,6 +67,8 @@ public class EvalUtils { functions.put("arrayNoneMatch", new ArrayNoneMatch()); functions.put("arrayAllMatch", new ArrayAllMatch()); + functions.put("strFormat", new StringFormatFunction()); + functions.put("structContainsKey", new StructContainsKeyFunction()); functions.put("hasContext", new HasContextFunction()); builder.functionDictionary(SimpleFunctionDictionary.ofFunctions(functions)); diff --git a/src/main/java/me/melontini/commander/impl/expression/functions/StringFormatFunction.java b/src/main/java/me/melontini/commander/impl/expression/functions/StringFormatFunction.java new file mode 100644 index 0000000..09832d5 --- /dev/null +++ b/src/main/java/me/melontini/commander/impl/expression/functions/StringFormatFunction.java @@ -0,0 +1,20 @@ +package me.melontini.commander.impl.expression.functions; + +import com.ezylang.evalex.EvaluationException; +import com.ezylang.evalex.Expression; +import com.ezylang.evalex.data.EvaluationValue; +import com.ezylang.evalex.functions.AbstractFunction; +import com.ezylang.evalex.functions.FunctionParameter; +import com.ezylang.evalex.parser.Token; + +import java.util.Arrays; + +@FunctionParameter(name = "pattern") +@FunctionParameter(name = "args", isVarArg = true) +public class StringFormatFunction extends AbstractFunction { + @Override + public EvaluationValue evaluate(Expression expression, Token functionToken, EvaluationValue... par) throws EvaluationException { + if (par.length == 1) return EvaluationValue.stringValue(String.format(par[0].getStringValue())); + return EvaluationValue.stringValue(String.format(par[0].getStringValue(), Arrays.stream(Arrays.copyOfRange(par, 1, par.length)).map(EvaluationValue::getValue).toArray())); + } +} diff --git a/src/main/java/me/melontini/commander/impl/expression/functions/ClampFunction.java b/src/main/java/me/melontini/commander/impl/expression/functions/math/ClampFunction.java similarity index 93% rename from src/main/java/me/melontini/commander/impl/expression/functions/ClampFunction.java rename to src/main/java/me/melontini/commander/impl/expression/functions/math/ClampFunction.java index 3900de8..80b6d10 100644 --- a/src/main/java/me/melontini/commander/impl/expression/functions/ClampFunction.java +++ b/src/main/java/me/melontini/commander/impl/expression/functions/math/ClampFunction.java @@ -1,4 +1,4 @@ -package me.melontini.commander.impl.expression.functions; +package me.melontini.commander.impl.expression.functions.math; import com.ezylang.evalex.EvaluationException; import com.ezylang.evalex.Expression; diff --git a/src/main/java/me/melontini/commander/impl/expression/functions/LerpFunction.java b/src/main/java/me/melontini/commander/impl/expression/functions/math/LerpFunction.java similarity index 93% rename from src/main/java/me/melontini/commander/impl/expression/functions/LerpFunction.java rename to src/main/java/me/melontini/commander/impl/expression/functions/math/LerpFunction.java index 46dbbfd..863de41 100644 --- a/src/main/java/me/melontini/commander/impl/expression/functions/LerpFunction.java +++ b/src/main/java/me/melontini/commander/impl/expression/functions/math/LerpFunction.java @@ -1,4 +1,4 @@ -package me.melontini.commander.impl.expression.functions; +package me.melontini.commander.impl.expression.functions.math; import com.ezylang.evalex.EvaluationException; import com.ezylang.evalex.Expression; diff --git a/src/main/java/me/melontini/commander/impl/expression/functions/RangedRandomFunction.java b/src/main/java/me/melontini/commander/impl/expression/functions/math/RangedRandomFunction.java similarity index 93% rename from src/main/java/me/melontini/commander/impl/expression/functions/RangedRandomFunction.java rename to src/main/java/me/melontini/commander/impl/expression/functions/math/RangedRandomFunction.java index 5e2a388..c4c90e5 100644 --- a/src/main/java/me/melontini/commander/impl/expression/functions/RangedRandomFunction.java +++ b/src/main/java/me/melontini/commander/impl/expression/functions/math/RangedRandomFunction.java @@ -1,4 +1,4 @@ -package me.melontini.commander.impl.expression.functions; +package me.melontini.commander.impl.expression.functions.math; import com.ezylang.evalex.EvaluationException; import com.ezylang.evalex.Expression;