diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/Parser.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/Parser.java index 97ed21410..fae348713 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/Parser.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/Parser.java @@ -341,11 +341,11 @@ public class Parser { String id = identifier.getContent(); - return switch(type.getType()) { + return switch(value.returnType()) { case NUMBER -> new NumAssignmentNode((Returnable) value, identifier.getPosition(), scopeBuilder.num(id)); case STRING -> new StrAssignmentNode((Returnable) value, identifier.getPosition(), scopeBuilder.str(id)); case BOOLEAN -> new BoolAssignmentNode((Returnable) value, identifier.getPosition(), scopeBuilder.bool(id)); - default -> throw new ParseException("Illegal type for variable assignment: " + type, value.getPosition()); + default -> throw new ParseException("Illegal type for variable declaration: " + type, value.getPosition()); }; } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/constants/BooleanConstant.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/constants/BooleanConstant.java index b61e05364..25cf9cdc2 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/constants/BooleanConstant.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/constants/BooleanConstant.java @@ -7,12 +7,21 @@ package com.dfsek.terra.addons.terrascript.parser.lang.constants; +import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; +import com.dfsek.terra.addons.terrascript.parser.lang.Scope; import com.dfsek.terra.addons.terrascript.tokenizer.Position; public class BooleanConstant extends ConstantExpression { + private final boolean constant; public BooleanConstant(Boolean constant, Position position) { super(constant, position); + this.constant = constant; + } + + @Override + public boolean applyBoolean(ImplementationArguments implementationArguments, Scope scope) { + return constant; } @Override diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/constants/NumericConstant.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/constants/NumericConstant.java index 911f601f2..78164fdc8 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/constants/NumericConstant.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/constants/NumericConstant.java @@ -7,13 +7,22 @@ package com.dfsek.terra.addons.terrascript.parser.lang.constants; +import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Scope; import com.dfsek.terra.addons.terrascript.tokenizer.Position; public class NumericConstant extends ConstantExpression { + private final double constant; public NumericConstant(Number constant, Position position) { super(constant, position); + this.constant = constant.doubleValue(); + } + + @Override + public double applyDouble(ImplementationArguments implementationArguments, Scope scope) { + return constant; } @Override diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/functions/Function.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/functions/Function.java index da27138b6..ec21b1923 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/functions/Function.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/functions/Function.java @@ -14,6 +14,16 @@ import com.dfsek.terra.addons.terrascript.tokenizer.Position; public interface Function extends Returnable { + @Override + default double applyDouble(ImplementationArguments implementationArguments, Scope scope) { + return (Double) apply(implementationArguments, scope); + } + + @Override + default boolean applyBoolean(ImplementationArguments implementationArguments, Scope scope) { + return (Boolean) apply(implementationArguments, scope); + } + Function NULL = new Function<>() { @Override public ReturnType returnType() { diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/BinaryOperation.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/BinaryOperation.java index 11a4d74e8..f336b3055 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/BinaryOperation.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/BinaryOperation.java @@ -16,8 +16,8 @@ import com.dfsek.terra.addons.terrascript.tokenizer.Position; public abstract class BinaryOperation implements Returnable { - private final Returnable left; - private final Returnable right; + protected final Returnable left; + protected final Returnable right; private final Position start; public BinaryOperation(Returnable left, Returnable right, Position start) { @@ -26,13 +26,6 @@ public abstract class BinaryOperation implements Returnable { this.start = start; } - public abstract O apply(Supplier left, Supplier right); - - @Override - public O apply(ImplementationArguments implementationArguments, Scope scope) { - return apply(() -> left.apply(implementationArguments, scope), () -> right.apply(implementationArguments, scope)); - } - @Override public Position getPosition() { return start; diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/BooleanAndOperation.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/BooleanAndOperation.java index 6018b21d0..b10407a79 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/BooleanAndOperation.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/BooleanAndOperation.java @@ -9,7 +9,9 @@ package com.dfsek.terra.addons.terrascript.parser.lang.operations; import java.util.function.Supplier; +import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Scope; import com.dfsek.terra.addons.terrascript.tokenizer.Position; @@ -18,13 +20,18 @@ public class BooleanAndOperation extends BinaryOperation { super(left, right, start); } - @Override - public Boolean apply(Supplier left, Supplier right) { - return left.get() && right.get(); - } - @Override public ReturnType returnType() { return ReturnType.BOOLEAN; } + + @Override + public Boolean apply(ImplementationArguments implementationArguments, Scope scope) { + return applyBoolean(implementationArguments, scope); + } + + @Override + public boolean applyBoolean(ImplementationArguments implementationArguments, Scope scope) { + return left.applyBoolean(implementationArguments, scope) && right.applyBoolean(implementationArguments, scope); + } } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/BooleanNotOperation.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/BooleanNotOperation.java index e1b4d2fed..a65e00184 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/BooleanNotOperation.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/BooleanNotOperation.java @@ -7,7 +7,9 @@ package com.dfsek.terra.addons.terrascript.parser.lang.operations; +import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Scope; import com.dfsek.terra.addons.terrascript.tokenizer.Position; @@ -17,8 +19,13 @@ public class BooleanNotOperation extends UnaryOperation { } @Override - public Boolean apply(Boolean input) { - return !input; + public Boolean apply(ImplementationArguments implementationArguments, Scope scope) { + return applyBoolean(implementationArguments, scope); + } + + @Override + public boolean applyBoolean(ImplementationArguments implementationArguments, Scope scope) { + return !input.applyBoolean(implementationArguments, scope); } @Override diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/BooleanOrOperation.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/BooleanOrOperation.java index 90b11cf86..177297972 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/BooleanOrOperation.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/BooleanOrOperation.java @@ -9,7 +9,9 @@ package com.dfsek.terra.addons.terrascript.parser.lang.operations; import java.util.function.Supplier; +import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Scope; import com.dfsek.terra.addons.terrascript.tokenizer.Position; @@ -19,10 +21,14 @@ public class BooleanOrOperation extends BinaryOperation { } @Override - public Boolean apply(Supplier left, Supplier right) { - return left.get() || right.get(); + public Boolean apply(ImplementationArguments implementationArguments, Scope scope) { + return applyBoolean(implementationArguments, scope); } + @Override + public boolean applyBoolean(ImplementationArguments implementationArguments, Scope scope) { + return left.applyBoolean(implementationArguments, scope) || right.applyBoolean(implementationArguments, scope); + } @Override public ReturnType returnType() { return ReturnType.BOOLEAN; diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/ConcatenationOperation.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/ConcatenationOperation.java index 79fd3d103..5edae5f3d 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/ConcatenationOperation.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/ConcatenationOperation.java @@ -9,7 +9,9 @@ package com.dfsek.terra.addons.terrascript.parser.lang.operations; import java.util.function.Supplier; +import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Scope; import com.dfsek.terra.addons.terrascript.tokenizer.Position; @@ -18,13 +20,13 @@ public class ConcatenationOperation extends BinaryOperation { super(left, right, position); } - @Override - public String apply(Supplier left, Supplier right) { - return left.get().toString() + right.get().toString(); - } - @Override public Returnable.ReturnType returnType() { return Returnable.ReturnType.STRING; } + + @Override + public Object apply(ImplementationArguments implementationArguments, Scope scope) { + return left.apply(implementationArguments, scope).toString() + right.apply(implementationArguments, scope).toString(); + } } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/DivisionOperation.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/DivisionOperation.java index b6d76c451..e2153559e 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/DivisionOperation.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/DivisionOperation.java @@ -9,7 +9,9 @@ package com.dfsek.terra.addons.terrascript.parser.lang.operations; import java.util.function.Supplier; +import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Scope; import com.dfsek.terra.addons.terrascript.tokenizer.Position; @@ -18,13 +20,18 @@ public class DivisionOperation extends BinaryOperation { super(left, right, position); } - @Override - public Number apply(Supplier left, Supplier right) { - return left.get().doubleValue() / right.get().doubleValue(); - } - @Override public Returnable.ReturnType returnType() { return Returnable.ReturnType.NUMBER; } + + @Override + public Number apply(ImplementationArguments implementationArguments, Scope scope) { + return applyDouble(implementationArguments, scope); + } + + @Override + public double applyDouble(ImplementationArguments implementationArguments, Scope scope) { + return left.applyDouble(implementationArguments, scope) / right.applyDouble(implementationArguments, scope); + } } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/ModuloOperation.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/ModuloOperation.java index a22439b6d..41cc48662 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/ModuloOperation.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/ModuloOperation.java @@ -9,7 +9,9 @@ package com.dfsek.terra.addons.terrascript.parser.lang.operations; import java.util.function.Supplier; +import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Scope; import com.dfsek.terra.addons.terrascript.tokenizer.Position; @@ -19,10 +21,14 @@ public class ModuloOperation extends BinaryOperation { } @Override - public Number apply(Supplier left, Supplier right) { - return left.get().doubleValue() % right.get().doubleValue(); + public Number apply(ImplementationArguments implementationArguments, Scope scope) { + return applyDouble(implementationArguments, scope); } + @Override + public double applyDouble(ImplementationArguments implementationArguments, Scope scope) { + return left.applyDouble(implementationArguments, scope) % right.applyDouble(implementationArguments, scope); + } @Override public ReturnType returnType() { return ReturnType.NUMBER; diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/MultiplicationOperation.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/MultiplicationOperation.java index 232d8ee52..aeaf9bd90 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/MultiplicationOperation.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/MultiplicationOperation.java @@ -9,7 +9,9 @@ package com.dfsek.terra.addons.terrascript.parser.lang.operations; import java.util.function.Supplier; +import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Scope; import com.dfsek.terra.addons.terrascript.tokenizer.Position; @@ -19,10 +21,14 @@ public class MultiplicationOperation extends BinaryOperation { } @Override - public Number apply(Supplier left, Supplier right) { - return left.get().doubleValue() * right.get().doubleValue(); + public Number apply(ImplementationArguments implementationArguments, Scope scope) { + return applyDouble(implementationArguments, scope); } + @Override + public double applyDouble(ImplementationArguments implementationArguments, Scope scope) { + return left.applyDouble(implementationArguments, scope) * right.applyDouble(implementationArguments, scope); + } @Override public ReturnType returnType() { return ReturnType.NUMBER; diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/NegationOperation.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/NegationOperation.java index 2f9ee5161..32d8f39b6 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/NegationOperation.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/NegationOperation.java @@ -7,7 +7,9 @@ package com.dfsek.terra.addons.terrascript.parser.lang.operations; +import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Scope; import com.dfsek.terra.addons.terrascript.tokenizer.Position; @@ -16,13 +18,18 @@ public class NegationOperation extends UnaryOperation { super(input, position); } - @Override - public Number apply(Number input) { - return -input.doubleValue(); - } - @Override public ReturnType returnType() { return ReturnType.NUMBER; } + + @Override + public Number apply(ImplementationArguments implementationArguments, Scope scope) { + return applyDouble(implementationArguments, scope); + } + + @Override + public double applyDouble(ImplementationArguments implementationArguments, Scope scope) { + return -input.applyDouble(implementationArguments, scope); + } } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/NumberAdditionOperation.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/NumberAdditionOperation.java index 7baa56df3..bb216047a 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/NumberAdditionOperation.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/NumberAdditionOperation.java @@ -9,7 +9,9 @@ package com.dfsek.terra.addons.terrascript.parser.lang.operations; import java.util.function.Supplier; +import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Scope; import com.dfsek.terra.addons.terrascript.tokenizer.Position; @@ -19,10 +21,14 @@ public class NumberAdditionOperation extends BinaryOperation { } @Override - public Number apply(Supplier left, Supplier right) { - return left.get().doubleValue() + right.get().doubleValue(); + public Number apply(ImplementationArguments implementationArguments, Scope scope) { + return applyDouble(implementationArguments, scope); } + @Override + public double applyDouble(ImplementationArguments implementationArguments, Scope scope) { + return left.applyDouble(implementationArguments, scope) + right.applyDouble(implementationArguments, scope); + } @Override public ReturnType returnType() { return ReturnType.NUMBER; diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/SubtractionOperation.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/SubtractionOperation.java index 70e6709b7..e31b2b5de 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/SubtractionOperation.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/SubtractionOperation.java @@ -9,7 +9,9 @@ package com.dfsek.terra.addons.terrascript.parser.lang.operations; import java.util.function.Supplier; +import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Scope; import com.dfsek.terra.addons.terrascript.tokenizer.Position; @@ -19,10 +21,14 @@ public class SubtractionOperation extends BinaryOperation { } @Override - public Number apply(Supplier left, Supplier right) { - return left.get().doubleValue() - right.get().doubleValue(); + public Number apply(ImplementationArguments implementationArguments, Scope scope) { + return applyDouble(implementationArguments, scope); } + @Override + public double applyDouble(ImplementationArguments implementationArguments, Scope scope) { + return left.applyDouble(implementationArguments, scope) - right.applyDouble(implementationArguments, scope); + } @Override public ReturnType returnType() { return ReturnType.NUMBER; diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/UnaryOperation.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/UnaryOperation.java index b8e9c1770..5071e95ea 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/UnaryOperation.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/UnaryOperation.java @@ -14,7 +14,7 @@ import com.dfsek.terra.addons.terrascript.tokenizer.Position; public abstract class UnaryOperation implements Returnable { - private final Returnable input; + protected final Returnable input; private final Position position; public UnaryOperation(Returnable input, Position position) { @@ -22,13 +22,6 @@ public abstract class UnaryOperation implements Returnable { this.position = position; } - public abstract T apply(T input); - - @Override - public T apply(ImplementationArguments implementationArguments, Scope scope) { - return apply(input.apply(implementationArguments, scope)); - } - @Override public Position getPosition() { return position; diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/EqualsStatement.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/EqualsStatement.java index 9c9b73e0f..82a045742 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/EqualsStatement.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/EqualsStatement.java @@ -7,6 +7,9 @@ package com.dfsek.terra.addons.terrascript.parser.lang.operations.statements; +import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; +import com.dfsek.terra.addons.terrascript.parser.lang.Scope; + import net.jafama.FastMath; import java.util.function.Supplier; @@ -24,20 +27,25 @@ public class EqualsStatement extends BinaryOperation { super(left, right, position); } - @Override - public Boolean apply(Supplier left, Supplier right) { - Object leftUnwrapped = left.get(); - Object rightUnwrapped = right.get(); - if(leftUnwrapped instanceof Number l && rightUnwrapped instanceof Number r) { - return FastMath.abs(l.doubleValue() - r.doubleValue()) <= EPSILON; - } - - return leftUnwrapped.equals(rightUnwrapped); - } - @Override public Returnable.ReturnType returnType() { return Returnable.ReturnType.BOOLEAN; } + + @Override + public Boolean apply(ImplementationArguments implementationArguments, Scope scope) { + return applyBoolean(implementationArguments, scope); + } + + @Override + public boolean applyBoolean(ImplementationArguments implementationArguments, Scope scope) { + Object leftValue = left.apply(implementationArguments, scope); + Object rightValue = right.apply(implementationArguments, scope); + if(leftValue instanceof Number l && rightValue instanceof Number r) { + return FastMath.abs(l.doubleValue() - r.doubleValue()) <= EPSILON; + } + + return leftValue.equals(rightValue); + } } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/GreaterOrEqualsThanStatement.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/GreaterOrEqualsThanStatement.java index 2c795b1c9..10c60a305 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/GreaterOrEqualsThanStatement.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/GreaterOrEqualsThanStatement.java @@ -9,7 +9,9 @@ package com.dfsek.terra.addons.terrascript.parser.lang.operations.statements; import java.util.function.Supplier; +import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Scope; import com.dfsek.terra.addons.terrascript.parser.lang.operations.BinaryOperation; import com.dfsek.terra.addons.terrascript.tokenizer.Position; @@ -19,14 +21,18 @@ public class GreaterOrEqualsThanStatement extends BinaryOperation left, Supplier right) { - return left.get().doubleValue() >= right.get().doubleValue(); - } - - @Override public Returnable.ReturnType returnType() { return Returnable.ReturnType.BOOLEAN; } + + @Override + public Boolean apply(ImplementationArguments implementationArguments, Scope scope) { + return applyBoolean(implementationArguments, scope); + } + + @Override + public boolean applyBoolean(ImplementationArguments implementationArguments, Scope scope) { + return left.applyDouble(implementationArguments, scope) >= right.applyDouble(implementationArguments, scope); + } } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/GreaterThanStatement.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/GreaterThanStatement.java index a6c7d8e52..0bb3e5500 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/GreaterThanStatement.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/GreaterThanStatement.java @@ -9,7 +9,9 @@ package com.dfsek.terra.addons.terrascript.parser.lang.operations.statements; import java.util.function.Supplier; +import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Scope; import com.dfsek.terra.addons.terrascript.parser.lang.operations.BinaryOperation; import com.dfsek.terra.addons.terrascript.tokenizer.Position; @@ -19,11 +21,16 @@ public class GreaterThanStatement extends BinaryOperation { super(left, right, position); } + @Override - public Boolean apply(Supplier left, Supplier right) { - return left.get().doubleValue() > right.get().doubleValue(); + public Boolean apply(ImplementationArguments implementationArguments, Scope scope) { + return applyBoolean(implementationArguments, scope); } + @Override + public boolean applyBoolean(ImplementationArguments implementationArguments, Scope scope) { + return left.applyDouble(implementationArguments, scope) > right.applyDouble(implementationArguments, scope); + } @Override public Returnable.ReturnType returnType() { diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/LessThanOrEqualsStatement.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/LessThanOrEqualsStatement.java index d798a6590..ef2aa8346 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/LessThanOrEqualsStatement.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/LessThanOrEqualsStatement.java @@ -9,7 +9,9 @@ package com.dfsek.terra.addons.terrascript.parser.lang.operations.statements; import java.util.function.Supplier; +import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Scope; import com.dfsek.terra.addons.terrascript.parser.lang.operations.BinaryOperation; import com.dfsek.terra.addons.terrascript.tokenizer.Position; @@ -19,12 +21,16 @@ public class LessThanOrEqualsStatement extends BinaryOperation super(left, right, position); } + @Override - public Boolean apply(Supplier left, Supplier right) { - return left.get().doubleValue() <= right.get().doubleValue(); + public Boolean apply(ImplementationArguments implementationArguments, Scope scope) { + return applyBoolean(implementationArguments, scope); } - + @Override + public boolean applyBoolean(ImplementationArguments implementationArguments, Scope scope) { + return left.applyDouble(implementationArguments, scope) <= right.applyDouble(implementationArguments, scope); + } @Override public Returnable.ReturnType returnType() { return Returnable.ReturnType.BOOLEAN; diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/LessThanStatement.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/LessThanStatement.java index 04bca475c..f06e395b1 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/LessThanStatement.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/LessThanStatement.java @@ -9,7 +9,9 @@ package com.dfsek.terra.addons.terrascript.parser.lang.operations.statements; import java.util.function.Supplier; +import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; +import com.dfsek.terra.addons.terrascript.parser.lang.Scope; import com.dfsek.terra.addons.terrascript.parser.lang.operations.BinaryOperation; import com.dfsek.terra.addons.terrascript.tokenizer.Position; @@ -19,12 +21,16 @@ public class LessThanStatement extends BinaryOperation { super(left, right, position); } + @Override - public Boolean apply(Supplier left, Supplier right) { - return left.get().doubleValue() < right.get().doubleValue(); + public Boolean apply(ImplementationArguments implementationArguments, Scope scope) { + return applyBoolean(implementationArguments, scope); } - + @Override + public boolean applyBoolean(ImplementationArguments implementationArguments, Scope scope) { + return left.applyDouble(implementationArguments, scope) < right.applyDouble(implementationArguments, scope); + } @Override public Returnable.ReturnType returnType() { return Returnable.ReturnType.BOOLEAN; diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/NotEqualsStatement.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/NotEqualsStatement.java index 20fb34fe3..aaecd56bc 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/NotEqualsStatement.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/operations/statements/NotEqualsStatement.java @@ -7,6 +7,9 @@ package com.dfsek.terra.addons.terrascript.parser.lang.operations.statements; +import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments; +import com.dfsek.terra.addons.terrascript.parser.lang.Scope; + import net.jafama.FastMath; import java.util.function.Supplier; @@ -24,16 +27,20 @@ public class NotEqualsStatement extends BinaryOperation { } @Override - public Boolean apply(Supplier left, Supplier right) { - Object leftUnwrapped = left.get(); - Object rightUnwrapped = right.get(); - if(leftUnwrapped instanceof Number l && rightUnwrapped instanceof Number r) { - return FastMath.abs(l.doubleValue() - r.doubleValue()) > EPSILON; - } - - return !leftUnwrapped.equals(rightUnwrapped); + public Boolean apply(ImplementationArguments implementationArguments, Scope scope) { + return applyBoolean(implementationArguments, scope); } + @Override + public boolean applyBoolean(ImplementationArguments implementationArguments, Scope scope) { + Object leftValue = left.apply(implementationArguments, scope); + Object rightValue = right.apply(implementationArguments, scope); + if(leftValue instanceof Number l && rightValue instanceof Number r) { + return FastMath.abs(l.doubleValue() - r.doubleValue()) > EPSILON; + } + + return !leftValue.equals(rightValue); + } @Override public Returnable.ReturnType returnType() {