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 1933b951c..7091382ad 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 @@ -12,6 +12,8 @@ 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; +import java.util.function.Supplier; + public abstract class BinaryOperation implements Returnable { private final Returnable left; @@ -24,11 +26,11 @@ public abstract class BinaryOperation implements Returnable { this.start = start; } - public abstract O apply(I left, I right); + 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)); + return apply(() -> left.apply(implementationArguments, scope), () -> right.apply(implementationArguments, scope)); } @Override 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 534345e3d..0082d3096 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 @@ -10,6 +10,8 @@ package com.dfsek.terra.addons.terrascript.parser.lang.operations; import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import java.util.function.Supplier; + public class BooleanAndOperation extends BinaryOperation { public BooleanAndOperation(Returnable left, Returnable right, Position start) { @@ -17,8 +19,8 @@ public class BooleanAndOperation extends BinaryOperation { } @Override - public Boolean apply(Boolean left, Boolean right) { - return left && right; + public Boolean apply(Supplier left, Supplier right) { + return left.get() && right.get(); } @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 5178fb0d5..d2259fbbf 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 @@ -10,6 +10,8 @@ package com.dfsek.terra.addons.terrascript.parser.lang.operations; import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import java.util.function.Supplier; + public class BooleanOrOperation extends BinaryOperation { public BooleanOrOperation(Returnable left, Returnable right, Position start) { @@ -17,8 +19,8 @@ public class BooleanOrOperation extends BinaryOperation { } @Override - public Boolean apply(Boolean left, Boolean right) { - return left || right; + public Boolean apply(Supplier left, Supplier right) { + return left.get() || right.get(); } @Override 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 1521765bc..8abccb5e7 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 @@ -10,6 +10,8 @@ package com.dfsek.terra.addons.terrascript.parser.lang.operations; import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import java.util.function.Supplier; + public class ConcatenationOperation extends BinaryOperation { public ConcatenationOperation(Returnable left, Returnable right, Position position) { @@ -17,8 +19,8 @@ public class ConcatenationOperation extends BinaryOperation { } @Override - public String apply(Object left, Object right) { - return left.toString() + right.toString(); + public String apply(Supplier left, Supplier right) { + return left.get().toString() + right.get().toString(); } @Override 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 962eb6143..6444cad9d 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 @@ -10,6 +10,8 @@ package com.dfsek.terra.addons.terrascript.parser.lang.operations; import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import java.util.function.Supplier; + public class DivisionOperation extends BinaryOperation { public DivisionOperation(Returnable left, Returnable right, Position position) { @@ -17,8 +19,8 @@ public class DivisionOperation extends BinaryOperation { } @Override - public Number apply(Number left, Number right) { - return left.doubleValue() / right.doubleValue(); + public Number apply(Supplier left, Supplier right) { + return left.get().doubleValue() / right.get().doubleValue(); } @Override 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 9965fd126..da778d288 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 @@ -10,6 +10,8 @@ package com.dfsek.terra.addons.terrascript.parser.lang.operations; import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import java.util.function.Supplier; + public class ModuloOperation extends BinaryOperation { public ModuloOperation(Returnable left, Returnable right, Position start) { @@ -17,8 +19,8 @@ public class ModuloOperation extends BinaryOperation { } @Override - public Number apply(Number left, Number right) { - return left.doubleValue() % right.doubleValue(); + public Number apply(Supplier left, Supplier right) { + return left.get().doubleValue() % right.get().doubleValue(); } @Override 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 19b09f2ae..6e5ecbbce 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 @@ -10,6 +10,8 @@ package com.dfsek.terra.addons.terrascript.parser.lang.operations; import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import java.util.function.Supplier; + public class MultiplicationOperation extends BinaryOperation { public MultiplicationOperation(Returnable left, Returnable right, Position position) { @@ -17,8 +19,8 @@ public class MultiplicationOperation extends BinaryOperation { } @Override - public Number apply(Number left, Number right) { - return left.doubleValue() * right.doubleValue(); + public Number apply(Supplier left, Supplier right) { + return left.get().doubleValue() * right.get().doubleValue(); } @Override 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 01f0d7556..68424a183 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 @@ -10,6 +10,8 @@ package com.dfsek.terra.addons.terrascript.parser.lang.operations; import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import java.util.function.Supplier; + public class NumberAdditionOperation extends BinaryOperation { public NumberAdditionOperation(Returnable left, Returnable right, Position position) { @@ -17,8 +19,8 @@ public class NumberAdditionOperation extends BinaryOperation { } @Override - public Number apply(Number left, Number right) { - return left.doubleValue() + right.doubleValue(); + public Number apply(Supplier left, Supplier right) { + return left.get().doubleValue() + right.get().doubleValue(); } @Override 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 006342f31..13c66b054 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 @@ -10,6 +10,8 @@ package com.dfsek.terra.addons.terrascript.parser.lang.operations; import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import java.util.function.Supplier; + public class SubtractionOperation extends BinaryOperation { public SubtractionOperation(Returnable left, Returnable right, Position position) { @@ -17,8 +19,8 @@ public class SubtractionOperation extends BinaryOperation { } @Override - public Number apply(Number left, Number right) { - return left.doubleValue() - right.doubleValue(); + public Number apply(Supplier left, Supplier right) { + return left.get().doubleValue() - right.get().doubleValue(); } @Override 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 0746335ee..cd55b5397 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 @@ -13,21 +13,26 @@ import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; import com.dfsek.terra.addons.terrascript.parser.lang.operations.BinaryOperation; import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import java.util.function.Supplier; + +import static com.dfsek.terra.api.util.MathUtil.EPSILON; + public class EqualsStatement extends BinaryOperation { - private static final double EPSILON = 0.000000001D; public EqualsStatement(Returnable left, Returnable right, Position position) { super(left, right, position); } @Override - public Boolean apply(Object left, Object right) { - if(left instanceof Number && right instanceof Number) { - return FastMath.abs(((Number) left).doubleValue() - ((Number) right).doubleValue()) <= EPSILON; + 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 left.equals(right); + return left.equals(rightUnwrapped); } 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 a8c67b2a7..b6ed893ec 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 @@ -11,6 +11,8 @@ import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; import com.dfsek.terra.addons.terrascript.parser.lang.operations.BinaryOperation; import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import java.util.function.Supplier; + public class GreaterOrEqualsThanStatement extends BinaryOperation { public GreaterOrEqualsThanStatement(Returnable left, Returnable right, Position position) { @@ -18,8 +20,8 @@ public class GreaterOrEqualsThanStatement extends BinaryOperation= right.doubleValue(); + public Boolean apply(Supplier left, Supplier right) { + return left.get().doubleValue() >= right.get().doubleValue(); } 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 8f3865142..5cc77a9e5 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 @@ -11,6 +11,8 @@ import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; import com.dfsek.terra.addons.terrascript.parser.lang.operations.BinaryOperation; import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import java.util.function.Supplier; + public class GreaterThanStatement extends BinaryOperation { public GreaterThanStatement(Returnable left, Returnable right, Position position) { @@ -18,8 +20,8 @@ public class GreaterThanStatement extends BinaryOperation { } @Override - public Boolean apply(Number left, Number right) { - return left.doubleValue() > right.doubleValue(); + public Boolean apply(Supplier left, Supplier right) { + return left.get().doubleValue() > right.get().doubleValue(); } 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 a42be1e01..85f4c58d7 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 @@ -11,6 +11,8 @@ import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; import com.dfsek.terra.addons.terrascript.parser.lang.operations.BinaryOperation; import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import java.util.function.Supplier; + public class LessThanOrEqualsStatement extends BinaryOperation { public LessThanOrEqualsStatement(Returnable left, Returnable right, Position position) { @@ -18,8 +20,8 @@ public class LessThanOrEqualsStatement extends BinaryOperation } @Override - public Boolean apply(Number left, Number right) { - return left.doubleValue() <= right.doubleValue(); + public Boolean apply(Supplier left, Supplier right) { + return left.get().doubleValue() <= right.get().doubleValue(); } 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 d85dcd812..1d59d05c2 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 @@ -11,6 +11,8 @@ import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; import com.dfsek.terra.addons.terrascript.parser.lang.operations.BinaryOperation; import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import java.util.function.Supplier; + public class LessThanStatement extends BinaryOperation { public LessThanStatement(Returnable left, Returnable right, Position position) { @@ -18,8 +20,8 @@ public class LessThanStatement extends BinaryOperation { } @Override - public Boolean apply(Number left, Number right) { - return left.doubleValue() < right.doubleValue(); + public Boolean apply(Supplier left, Supplier right) { + return left.get().doubleValue() < right.get().doubleValue(); } 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 7d716799f..7b882963f 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 @@ -11,6 +11,12 @@ import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; import com.dfsek.terra.addons.terrascript.parser.lang.operations.BinaryOperation; import com.dfsek.terra.addons.terrascript.tokenizer.Position; +import net.jafama.FastMath; + +import java.util.function.Supplier; + +import static com.dfsek.terra.api.util.MathUtil.EPSILON; + public class NotEqualsStatement extends BinaryOperation { public NotEqualsStatement(Returnable left, Returnable right, Position position) { @@ -18,8 +24,14 @@ public class NotEqualsStatement extends BinaryOperation { } @Override - public Boolean apply(Object left, Object right) { - return !left.equals(right); + 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 !left.equals(rightUnwrapped); }