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 65a169c7c..30410c891 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 @@ -16,8 +16,6 @@ import java.util.Map; import com.dfsek.terra.addons.terrascript.parser.exceptions.ParseException; import com.dfsek.terra.addons.terrascript.parser.lang.Block; import com.dfsek.terra.addons.terrascript.parser.lang.Executable; -import com.dfsek.terra.addons.terrascript.parser.lang.Statement; -import com.dfsek.terra.addons.terrascript.parser.lang.Keyword; import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.parser.lang.Expression.ReturnType; import com.dfsek.terra.addons.terrascript.parser.lang.Scope.ScopeBuilder; @@ -96,51 +94,35 @@ public class Parser { return new Executable(parseBlock(new Tokenizer(source), false, scopeBuilder), scopeBuilder); } - private Keyword parseLoopLike(Tokenizer tokens, boolean loop, ScopeBuilder scopeBuilder) throws ParseException { - - Token identifier = tokens.consume(); - ParserUtil.checkType(identifier, Token.Type.IF_STATEMENT, Token.Type.WHILE_LOOP, Token.Type.FOR_LOOP); - - ParserUtil.checkType(tokens.consume(), Token.Type.GROUP_BEGIN); - - return switch(identifier.getType()) { - case FOR_LOOP -> parseForLoop(tokens, identifier.getPosition(), scopeBuilder); - case IF_STATEMENT -> parseIfStatement(tokens, identifier.getPosition(), loop, scopeBuilder); - case WHILE_LOOP -> parseWhileLoop(tokens, identifier.getPosition(), scopeBuilder); - default -> throw new UnsupportedOperationException( - "Unknown keyword " + identifier.getContent() + ": " + identifier.getPosition()); - }; - } - - private WhileKeyword parseWhileLoop(Tokenizer tokens, SourcePosition start, ScopeBuilder scopeBuilder) { - Expression first = parseExpression(tokens, true, scopeBuilder); + private WhileKeyword parseWhileLoop(Tokenizer tokenizer, SourcePosition start, ScopeBuilder scopeBuilder) { + Expression first = parseLogicMathExpression(tokenizer, true, scopeBuilder); ParserUtil.checkReturnType(first, Expression.ReturnType.BOOLEAN); - ParserUtil.checkType(tokens.consume(), Token.Type.GROUP_END); + ParserUtil.ensureType(tokenizer.consume(), Token.Type.GROUP_END); - return new WhileKeyword(parseStatementBlock(tokens, true, scopeBuilder), (Expression) first, start); // While loop + return new WhileKeyword(parseStatementBlock(tokenizer, true, scopeBuilder), (Expression) first, start); // While loop } - private IfKeyword parseIfStatement(Tokenizer tokens, SourcePosition start, boolean loop, ScopeBuilder scopeBuilder) { - Expression condition = parseExpression(tokens, true, scopeBuilder); + private IfKeyword parseIfStatement(Tokenizer tokenizer, SourcePosition start, boolean controlStructure, ScopeBuilder scopeBuilder) { + Expression condition = parseLogicMathExpression(tokenizer, true, scopeBuilder); ParserUtil.checkReturnType(condition, Expression.ReturnType.BOOLEAN); - ParserUtil.checkType(tokens.consume(), Token.Type.GROUP_END); + ParserUtil.ensureType(tokenizer.consume(), Token.Type.GROUP_END); Block elseBlock = null; - Block statement = parseStatementBlock(tokens, loop, scopeBuilder); + Block statement = parseStatementBlock(tokenizer, controlStructure, scopeBuilder); List, Block>> elseIf = new ArrayList<>(); - while(tokens.hasNext() && tokens.current().getType().equals(Token.Type.ELSE)) { - tokens.consume(); // Consume else. - if(tokens.current().getType().equals(Token.Type.IF_STATEMENT)) { - tokens.consume(); // Consume if. - Expression elseCondition = parseExpression(tokens, true, scopeBuilder); + while(tokenizer.hasNext() && tokenizer.current().isType(Token.Type.ELSE)) { + tokenizer.consume(); // Consume else. + if(tokenizer.current().isType(Token.Type.IF_STATEMENT)) { + tokenizer.consume(); // Consume if. + Expression elseCondition = parseLogicMathExpression(tokenizer, true, scopeBuilder); ParserUtil.checkReturnType(elseCondition, Expression.ReturnType.BOOLEAN); - elseIf.add(Pair.of((Expression) elseCondition, parseStatementBlock(tokens, loop, scopeBuilder))); + elseIf.add(Pair.of((Expression) elseCondition, parseStatementBlock(tokenizer, controlStructure, scopeBuilder))); } else { - elseBlock = parseStatementBlock(tokens, loop, scopeBuilder); + elseBlock = parseStatementBlock(tokenizer, controlStructure, scopeBuilder); break; // Else must be last. } } @@ -148,75 +130,75 @@ public class Parser { return new IfKeyword(statement, (Expression) condition, elseIf, elseBlock, start); // If statement } - private Block parseStatementBlock(Tokenizer tokens, boolean loop, ScopeBuilder scopeBuilder) { + private Block parseStatementBlock(Tokenizer tokenizer, boolean controlStructure, ScopeBuilder scopeBuilder) { - if(tokens.current().getType().equals(Token.Type.BLOCK_BEGIN)) { - ParserUtil.checkType(tokens.consume(), Token.Type.BLOCK_BEGIN); - Block block = parseBlock(tokens, loop, scopeBuilder); - ParserUtil.checkType(tokens.consume(), Token.Type.BLOCK_END); + if(tokenizer.current().isType(Token.Type.BLOCK_BEGIN)) { + ParserUtil.ensureType(tokenizer.consume(), Token.Type.BLOCK_BEGIN); + Block block = parseBlock(tokenizer, controlStructure, scopeBuilder); + ParserUtil.ensureType(tokenizer.consume(), Token.Type.BLOCK_END); return block; } else { - SourcePosition position = tokens.current().getPosition(); - Block block = new Block(Collections.singletonList(parseStatement(tokens, loop, scopeBuilder)), position); - ParserUtil.checkType(tokens.consume(), Token.Type.STATEMENT_END); + SourcePosition position = tokenizer.current().getPosition(); + Block block = new Block(Collections.singletonList(parseExpression(tokenizer, controlStructure, scopeBuilder)), position); + ParserUtil.ensureType(tokenizer.consume(), Token.Type.STATEMENT_END); return block; } } - private ForKeyword parseForLoop(Tokenizer tokens, SourcePosition start, ScopeBuilder scopeBuilder) { + private ForKeyword parseForLoop(Tokenizer tokenizer, SourcePosition start, ScopeBuilder scopeBuilder) { scopeBuilder = scopeBuilder.sub(); // new scope - Token f = tokens.current(); - ParserUtil.checkType(f, Token.Type.NUMBER_VARIABLE, Token.Type.STRING_VARIABLE, Token.Type.BOOLEAN_VARIABLE, Token.Type.IDENTIFIER); - Statement initializer; + Token f = tokenizer.current(); + ParserUtil.ensureType(f, Token.Type.NUMBER_VARIABLE, Token.Type.STRING_VARIABLE, Token.Type.BOOLEAN_VARIABLE, Token.Type.IDENTIFIER); + Expression initializer; if(f.isVariableDeclaration()) { - VariableAssignmentNode forVar = parseVariableDeclaration(tokens, scopeBuilder); - Token name = tokens.current(); + VariableAssignmentNode forVar = parseVariableDeclaration(tokenizer, scopeBuilder); + Token name = tokenizer.current(); if(functions.containsKey(name.getContent()) || scopeBuilder.contains(name.getContent())) throw new ParseException(name.getContent() + " is already defined in this scope", name.getPosition()); initializer = forVar; - } else initializer = parseExpression(tokens, true, scopeBuilder); - ParserUtil.checkType(tokens.consume(), Token.Type.STATEMENT_END); - Expression conditional = parseExpression(tokens, true, scopeBuilder); + } else initializer = parseLogicMathExpression(tokenizer, true, scopeBuilder); + ParserUtil.ensureType(tokenizer.consume(), Token.Type.STATEMENT_END); + Expression conditional = parseLogicMathExpression(tokenizer, true, scopeBuilder); ParserUtil.checkReturnType(conditional, Expression.ReturnType.BOOLEAN); - ParserUtil.checkType(tokens.consume(), Token.Type.STATEMENT_END); + ParserUtil.ensureType(tokenizer.consume(), Token.Type.STATEMENT_END); - Statement incrementer; - Token token = tokens.current(); + Expression incrementer; + Token token = tokenizer.current(); if(scopeBuilder.contains(token.getContent())) { // Assume variable assignment - incrementer = parseAssignment(tokens, scopeBuilder); - } else incrementer = parseFunction(tokens, true, scopeBuilder); + incrementer = parseAssignment(tokenizer, scopeBuilder); + } else incrementer = parseFunction(tokenizer, true, scopeBuilder); - ParserUtil.checkType(tokens.consume(), Token.Type.GROUP_END); + ParserUtil.ensureType(tokenizer.consume(), Token.Type.GROUP_END); - return new ForKeyword(parseStatementBlock(tokens, true, scopeBuilder), initializer, (Expression) conditional, incrementer, + return new ForKeyword(parseStatementBlock(tokenizer, true, scopeBuilder), initializer, (Expression) conditional, incrementer, start); } - private Expression parseExpression(Tokenizer tokens, boolean full, ScopeBuilder scopeBuilder) { + private Expression parseLogicMathExpression(Tokenizer tokenizer, boolean full, ScopeBuilder scopeBuilder) { boolean booleanInverted = false; // Check for boolean not operator boolean negate = false; - if(tokens.current().getType().equals(Token.Type.BOOLEAN_NOT)) { + if(tokenizer.current().isType(Token.Type.BOOLEAN_NOT)) { booleanInverted = true; - tokens.consume(); - } else if(tokens.current().getType().equals(Token.Type.SUBTRACTION_OPERATOR)) { + tokenizer.consume(); + } else if(tokenizer.current().isType(Token.Type.SUBTRACTION_OPERATOR)) { negate = true; - tokens.consume(); + tokenizer.consume(); } - Token id = tokens.current(); + Token id = tokenizer.current(); - ParserUtil.checkType(id, Token.Type.IDENTIFIER, Token.Type.BOOLEAN, Token.Type.STRING, Token.Type.NUMBER, Token.Type.GROUP_BEGIN); + ParserUtil.ensureType(id, Token.Type.IDENTIFIER, Token.Type.BOOLEAN, Token.Type.STRING, Token.Type.NUMBER, Token.Type.GROUP_BEGIN); Expression expression; if(id.isConstant()) { - expression = parseConstantExpression(tokens); - } else if(id.getType().equals(Token.Type.GROUP_BEGIN)) { // Parse grouped expression - expression = parseGroup(tokens, scopeBuilder); + expression = parseConstantExpression(tokenizer); + } else if(id.isType(Token.Type.GROUP_BEGIN)) { // Parse grouped expression + expression = parseGroup(tokenizer, scopeBuilder); } else { if(functions.containsKey(id.getContent())) - expression = parseFunction(tokens, false, scopeBuilder); + expression = parseFunction(tokenizer, false, scopeBuilder); else if(scopeBuilder.contains(id.getContent())) { - ParserUtil.checkType(tokens.consume(), Token.Type.IDENTIFIER); + ParserUtil.ensureType(tokenizer.consume(), Token.Type.IDENTIFIER); String varId = id.getContent(); ReturnType varType = scopeBuilder.getType(varId); expression = switch(varType) { @@ -237,14 +219,14 @@ public class Parser { expression = new NegationOperation((Expression) expression, expression.getPosition()); } - if(full && tokens.current().isBinaryOperator()) { // Parse binary operations - return parseBinaryOperation(expression, tokens, scopeBuilder); + if(full && tokenizer.current().isBinaryOperator()) { // Parse binary operations + return parseBinaryOperation(expression, tokenizer, scopeBuilder); } return expression; } - private ConstantExpression parseConstantExpression(Tokenizer tokens) { - Token constantToken = tokens.consume(); + private ConstantExpression parseConstantExpression(Tokenizer tokenizer) { + Token constantToken = tokenizer.consume(); SourcePosition position = constantToken.getPosition(); switch(constantToken.getType()) { case NUMBER: @@ -260,25 +242,25 @@ public class Parser { } } - private Expression parseGroup(Tokenizer tokens, ScopeBuilder scopeBuilder) { - ParserUtil.checkType(tokens.consume(), Token.Type.GROUP_BEGIN); - Expression expression = parseExpression(tokens, true, scopeBuilder); // Parse inside of group as a separate expression - ParserUtil.checkType(tokens.consume(), Token.Type.GROUP_END); + private Expression parseGroup(Tokenizer tokenizer, ScopeBuilder scopeBuilder) { + ParserUtil.ensureType(tokenizer.consume(), Token.Type.GROUP_BEGIN); + Expression expression = parseLogicMathExpression(tokenizer, true, scopeBuilder); // Parse inside of group as a separate expression + ParserUtil.ensureType(tokenizer.consume(), Token.Type.GROUP_END); return expression; } - private BinaryOperation parseBinaryOperation(Expression left, Tokenizer tokens, + private BinaryOperation parseBinaryOperation(Expression left, Tokenizer tokenizer, ScopeBuilder scopeBuilder) { - Token binaryOperator = tokens.consume(); + Token binaryOperator = tokenizer.consume(); ParserUtil.checkBinaryOperator(binaryOperator); - Expression right = parseExpression(tokens, false, scopeBuilder); + Expression right = parseLogicMathExpression(tokenizer, false, scopeBuilder); - Token other = tokens.current(); + Token other = tokenizer.current(); if(ParserUtil.hasPrecedence(binaryOperator.getType(), other.getType())) { - return assemble(left, parseBinaryOperation(right, tokens, scopeBuilder), binaryOperator); + return assemble(left, parseBinaryOperation(right, tokenizer, scopeBuilder), binaryOperator); } else if(other.isBinaryOperator()) { - return parseBinaryOperation(assemble(left, right, binaryOperator), tokens, scopeBuilder); + return parseBinaryOperation(assemble(left, right, binaryOperator), tokenizer, scopeBuilder); } return assemble(left, right, binaryOperator); } @@ -323,20 +305,20 @@ public class Parser { } } - private VariableAssignmentNode parseVariableDeclaration(Tokenizer tokens, ScopeBuilder scopeBuilder) { - Token type = tokens.consume(); - ParserUtil.checkType(type, Token.Type.STRING_VARIABLE, Token.Type.BOOLEAN_VARIABLE, Token.Type.NUMBER_VARIABLE); + private VariableAssignmentNode parseVariableDeclaration(Tokenizer tokenizer, ScopeBuilder scopeBuilder) { + Token type = tokenizer.consume(); + ParserUtil.ensureType(type, Token.Type.STRING_VARIABLE, Token.Type.BOOLEAN_VARIABLE, Token.Type.NUMBER_VARIABLE); Expression.ReturnType returnType = ParserUtil.getVariableReturnType(type); ParserUtil.checkVarType(type, returnType); // Check for type mismatch - Token identifier = tokens.consume(); - ParserUtil.checkType(identifier, Token.Type.IDENTIFIER); + Token identifier = tokenizer.consume(); + ParserUtil.ensureType(identifier, Token.Type.IDENTIFIER); if(functions.containsKey(identifier.getContent()) || scopeBuilder.contains(identifier.getContent())) throw new ParseException(identifier.getContent() + " is already defined in this scope", identifier.getPosition()); - ParserUtil.checkType(tokens.consume(), Token.Type.ASSIGNMENT); + ParserUtil.ensureType(tokenizer.consume(), Token.Type.ASSIGNMENT); - Expression value = parseExpression(tokens, true, scopeBuilder); + Expression value = parseLogicMathExpression(tokenizer, true, scopeBuilder); ParserUtil.checkReturnType(value, returnType); String id = identifier.getContent(); @@ -349,57 +331,67 @@ public class Parser { }; } - private Block parseBlock(Tokenizer tokens, boolean loop, ScopeBuilder scopeBuilder) { - List> statements = new ArrayList<>(); + private Block parseBlock(Tokenizer tokenizer, boolean controlStructure, ScopeBuilder scopeBuilder) { + List> expressions = new ArrayList<>(); scopeBuilder = scopeBuilder.sub(); - Token first = tokens.current(); + Token first = tokenizer.current(); - while(tokens.hasNext()) { - Token token = tokens.current(); - if(token.getType().equals(Token.Type.BLOCK_END)) break; // Stop parsing at block end. - Statement statement = parseStatement(tokens, loop, scopeBuilder); - if(statement != Function.NULL) { - statements.add(statement); + while(tokenizer.hasNext()) { + Token token = tokenizer.current(); + if(token.isType(Token.Type.BLOCK_END)) break; // Stop parsing at block end. + Expression expression = parseExpression(tokenizer, controlStructure, scopeBuilder); + if(expression != Function.NULL) { + expressions.add(expression); } - if(tokens.hasNext() && !token.isLoopLike()) ParserUtil.checkType(tokens.consume(), Token.Type.STATEMENT_END); + if(tokenizer.hasNext() && !token.isControlStructure()) ParserUtil.ensureType(tokenizer.consume(), Token.Type.STATEMENT_END); } - return new Block(statements, first.getPosition()); + return new Block(expressions, first.getPosition()); } - private Statement parseStatement(Tokenizer tokens, boolean loop, ScopeBuilder scopeBuilder) { - Token token = tokens.current(); - if(loop) ParserUtil.checkType(token, Token.Type.IDENTIFIER, Token.Type.IF_STATEMENT, Token.Type.WHILE_LOOP, Token.Type.FOR_LOOP, - Token.Type.NUMBER_VARIABLE, Token.Type.STRING_VARIABLE, Token.Type.BOOLEAN_VARIABLE, - Token.Type.RETURN, Token.Type.BREAK, Token.Type.CONTINUE, Token.Type.FAIL); - else ParserUtil.checkType(token, Token.Type.IDENTIFIER, Token.Type.IF_STATEMENT, Token.Type.WHILE_LOOP, Token.Type.FOR_LOOP, - Token.Type.NUMBER_VARIABLE, Token.Type.STRING_VARIABLE, Token.Type.BOOLEAN_VARIABLE, Token.Type.RETURN, - Token.Type.FAIL); + private Expression parseExpression(Tokenizer tokenizer, boolean controlStructure, ScopeBuilder scopeBuilder) { + Token token = tokenizer.current(); + if(controlStructure) ParserUtil.ensureType(token, Token.Type.IDENTIFIER, Token.Type.IF_STATEMENT, Token.Type.WHILE_LOOP, Token.Type.FOR_LOOP, + Token.Type.NUMBER_VARIABLE, Token.Type.STRING_VARIABLE, Token.Type.BOOLEAN_VARIABLE, + Token.Type.RETURN, Token.Type.BREAK, Token.Type.CONTINUE, Token.Type.FAIL); + else ParserUtil.ensureType(token, Token.Type.IDENTIFIER, Token.Type.IF_STATEMENT, Token.Type.WHILE_LOOP, Token.Type.FOR_LOOP, + Token.Type.NUMBER_VARIABLE, Token.Type.STRING_VARIABLE, Token.Type.BOOLEAN_VARIABLE, Token.Type.RETURN, + Token.Type.FAIL); - if(token.isLoopLike()) { // Parse loop-like tokens (if, while, etc) - return parseLoopLike(tokens, loop, scopeBuilder); - } else if(token.isIdentifier()) { // Parse identifiers - if(scopeBuilder.contains(token.getContent())) { // Assume variable assignment - return parseAssignment(tokens, scopeBuilder); - } else return parseFunction(tokens, true, scopeBuilder); - } else if(token.isVariableDeclaration()) { - return parseVariableDeclaration(tokens, scopeBuilder); - } else if(token.getType().equals(Token.Type.RETURN)) return new ReturnKeyword(tokens.consume().getPosition()); - else if(token.getType().equals(Token.Type.BREAK)) return new BreakKeyword(tokens.consume().getPosition()); - else if(token.getType().equals(Token.Type.CONTINUE)) return new ContinueKeyword(tokens.consume().getPosition()); - else if(token.getType().equals(Token.Type.FAIL)) return new FailKeyword(tokens.consume().getPosition()); - else throw new UnsupportedOperationException("Unexpected token " + token.getType() + ": " + token.getPosition()); + Expression expression = switch(token.getType()) { + case FOR_LOOP, IF_STATEMENT, WHILE_LOOP -> { + Token identifier = tokenizer.consume(); + ParserUtil.ensureType(tokenizer.consume(), Token.Type.GROUP_BEGIN); + yield switch(identifier.getType()) { + case FOR_LOOP -> parseForLoop(tokenizer, identifier.getPosition(), scopeBuilder); + case IF_STATEMENT -> parseIfStatement(tokenizer, identifier.getPosition(), controlStructure, scopeBuilder); + case WHILE_LOOP -> parseWhileLoop(tokenizer, identifier.getPosition(), scopeBuilder); + default -> throw new UnsupportedOperationException("Unknown keyword " + identifier.getContent() + ": " + identifier.getPosition()); + }; + } + case IDENTIFIER -> { + if(scopeBuilder.contains(token.getContent())) yield parseAssignment(tokenizer, scopeBuilder); // Assume variable assignment + else yield parseFunction(tokenizer, true, scopeBuilder); + } + case NUMBER_VARIABLE, STRING_VARIABLE, BOOLEAN_VARIABLE -> parseVariableDeclaration(tokenizer, scopeBuilder); + case RETURN -> new ReturnKeyword(tokenizer.consume().getPosition()); + case BREAK -> new BreakKeyword(tokenizer.consume().getPosition()); + case CONTINUE -> new ContinueKeyword(tokenizer.consume().getPosition()); + case FAIL -> new FailKeyword(tokenizer.consume().getPosition()); + default -> throw new UnsupportedOperationException("Unexpected token " + token.getType() + ": " + token.getPosition()); + }; + return expression; } - private VariableAssignmentNode parseAssignment(Tokenizer tokens, ScopeBuilder scopeBuilder) { - Token identifier = tokens.consume(); + private VariableAssignmentNode parseAssignment(Tokenizer tokenizer, ScopeBuilder scopeBuilder) { + Token identifier = tokenizer.consume(); - ParserUtil.checkType(identifier, Token.Type.IDENTIFIER); + ParserUtil.ensureType(identifier, Token.Type.IDENTIFIER); - ParserUtil.checkType(tokens.consume(), Token.Type.ASSIGNMENT); + ParserUtil.ensureType(tokenizer.consume(), Token.Type.ASSIGNMENT); - Expression value = parseExpression(tokens, true, scopeBuilder); + Expression value = parseLogicMathExpression(tokenizer, true, scopeBuilder); String id = identifier.getContent(); @@ -415,21 +407,20 @@ public class Parser { }; } - private Function parseFunction(Tokenizer tokens, boolean fullStatement, ScopeBuilder scopeBuilder) { - Token identifier = tokens.consume(); - ParserUtil.checkType(identifier, Token.Type.IDENTIFIER); // First token must be identifier + private Function parseFunction(Tokenizer tokenizer, boolean fullStatement, ScopeBuilder scopeBuilder) { + Token identifier = tokenizer.consume(); + ParserUtil.ensureType(identifier, Token.Type.IDENTIFIER); // First token must be identifier if(!functions.containsKey(identifier.getContent())) throw new ParseException("No such function \"" + identifier.getContent() + "\"", identifier.getPosition()); - ParserUtil.checkType(tokens.consume(), Token.Type.GROUP_BEGIN); // Second is body begin + ParserUtil.ensureType(tokenizer.consume(), Token.Type.GROUP_BEGIN); // Second is body begin + List> args = getFunctionArgs(tokenizer, scopeBuilder); // Extract arguments, consume the rest. - List> args = getArgs(tokens, scopeBuilder); // Extract arguments, consume the rest. + ParserUtil.ensureType(tokenizer.consume(), Token.Type.GROUP_END); // Remove body end - ParserUtil.checkType(tokens.consume(), Token.Type.GROUP_END); // Remove body end - - if(fullStatement) ParserUtil.checkType(tokens.current(), Token.Type.STATEMENT_END); + if(fullStatement) ParserUtil.ensureType(tokenizer.current(), Token.Type.STATEMENT_END); if(ignoredFunctions.contains(identifier.getContent())) { return Function.NULL; @@ -453,13 +444,13 @@ public class Parser { throw new UnsupportedOperationException("Unsupported function: " + identifier.getContent()); } - private List> getArgs(Tokenizer tokens, ScopeBuilder scopeBuilder) { + private List> getFunctionArgs(Tokenizer tokenizer, ScopeBuilder scopeBuilder) { List> args = new ArrayList<>(); - while(!tokens.current().getType().equals(Token.Type.GROUP_END)) { - args.add(parseExpression(tokens, true, scopeBuilder)); - ParserUtil.checkType(tokens.current(), Token.Type.SEPARATOR, Token.Type.GROUP_END); - if(tokens.current().getType().equals(Token.Type.SEPARATOR)) tokens.consume(); + while(!tokenizer.current().isType(Token.Type.GROUP_END)) { + args.add(parseLogicMathExpression(tokenizer, true, scopeBuilder)); + ParserUtil.ensureType(tokenizer.current(), Token.Type.SEPARATOR, Token.Type.GROUP_END); + if(tokenizer.current().isType(Token.Type.SEPARATOR)) tokenizer.consume(); } return args; } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/ParserUtil.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/ParserUtil.java index 54513ede4..38fbec1d0 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/ParserUtil.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/ParserUtil.java @@ -51,7 +51,7 @@ public class ParserUtil { PRECEDENCE.put(Token.Type.BOOLEAN_OR, booleanOps); } - public static void checkType(Token token, Token.Type... expected) { + public static void ensureType(Token token, Token.Type... expected) { for(Token.Type type : expected) if(token.getType().equals(type)) return; throw new ParseException("Expected " + Arrays.toString(expected) + " but found " + token.getType(), token.getPosition()); } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Block.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Block.java index 8e9e7831c..ea70d5ca0 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Block.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Block.java @@ -13,19 +13,24 @@ import com.dfsek.terra.addons.terrascript.parser.lang.Block.ReturnInfo; import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; -public class Block implements Statement> { - private final List> items; +public class Block implements Expression> { + private final List> items; private final SourcePosition position; - public Block(List> items, SourcePosition position) { + public Block(List> items, SourcePosition position) { this.items = items; this.position = position; } @Override - public ReturnInfo invoke(ImplementationArguments implementationArguments, Scope scope) { - for(Statement item : items) { - Object result = item.invoke(implementationArguments, scope); + public ReturnType returnType() { + return ReturnType.VOID; + } + + @Override + public ReturnInfo evaluate(ImplementationArguments implementationArguments, Scope scope) { + for(Expression item : items) { + Object result = item.evaluate(implementationArguments, scope); if(result instanceof ReturnInfo level) { if(!level.getLevel().equals(ReturnLevel.NONE)) return level; } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Executable.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Executable.java index 176140c6d..f4b2077fa 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Executable.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Executable.java @@ -14,6 +14,6 @@ public class Executable { } public boolean execute(ImplementationArguments arguments) { - return script.invoke(arguments, scope.get()).getLevel() != Block.ReturnLevel.FAIL; + return script.evaluate(arguments, scope.get()).getLevel() != Block.ReturnLevel.FAIL; } } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Expression.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Expression.java index be4d7c837..580c26c17 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Expression.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Expression.java @@ -7,9 +7,24 @@ package com.dfsek.terra.addons.terrascript.parser.lang; -public interface Expression extends Statement { +import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; + + +public interface Expression { ReturnType returnType(); + T evaluate(ImplementationArguments implementationArguments, Scope scope); + + default double applyDouble(ImplementationArguments implementationArguments, Scope scope) { + throw new UnsupportedOperationException("Cannot apply " + this + " as double"); + } + + default boolean applyBoolean(ImplementationArguments implementationArguments, Scope scope) { + throw new UnsupportedOperationException("Cannot apply " + this + " as double"); + } + + SourcePosition getPosition(); + enum ReturnType { NUMBER(true), STRING(true), diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Statement.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Statement.java index 200666878..04a573bbd 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Statement.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/Statement.java @@ -7,19 +7,9 @@ package com.dfsek.terra.addons.terrascript.parser.lang; -import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; - - -public interface Statement { - T invoke(ImplementationArguments implementationArguments, Scope scope); - - default double applyDouble(ImplementationArguments implementationArguments, Scope scope) { - throw new UnsupportedOperationException("Cannot apply " + this + " as double"); +public interface Statement extends Expression { + @Override + default ReturnType returnType() { + return ReturnType.VOID; } - - default boolean applyBoolean(ImplementationArguments implementationArguments, Scope scope) { - throw new UnsupportedOperationException("Cannot apply " + this + " as double"); - } - - SourcePosition getPosition(); } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/constants/ConstantExpression.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/constants/ConstantExpression.java index f0eab50dd..47a7376c8 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/constants/ConstantExpression.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/constants/ConstantExpression.java @@ -23,7 +23,7 @@ public abstract class ConstantExpression implements Expression { } @Override - public T invoke(ImplementationArguments implementationArguments, Scope scope) { + public T evaluate(ImplementationArguments implementationArguments, Scope scope) { return constant; } 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 60fe482d4..2647528f6 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 @@ -21,7 +21,7 @@ public interface Function extends Expression { } @Override - public Object invoke(ImplementationArguments implementationArguments, Scope scope) { + public Object evaluate(ImplementationArguments implementationArguments, Scope scope) { return null; } @@ -33,11 +33,11 @@ public interface Function extends Expression { @Override default double applyDouble(ImplementationArguments implementationArguments, Scope scope) { - return ((Number) invoke(implementationArguments, scope)).doubleValue(); + return ((Number) evaluate(implementationArguments, scope)).doubleValue(); } @Override default boolean applyBoolean(ImplementationArguments implementationArguments, Scope scope) { - return (Boolean) invoke(implementationArguments, scope); + return (Boolean) evaluate(implementationArguments, scope); } } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/flow/BreakKeyword.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/flow/BreakKeyword.java index 3ac27b9ed..37d5d7e60 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/flow/BreakKeyword.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/flow/BreakKeyword.java @@ -22,7 +22,7 @@ public class BreakKeyword implements Keyword> { } @Override - public Block.ReturnInfo invoke(ImplementationArguments implementationArguments, Scope scope) { + public Block.ReturnInfo evaluate(ImplementationArguments implementationArguments, Scope scope) { return new Block.ReturnInfo<>(Block.ReturnLevel.BREAK, null); } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/flow/ContinueKeyword.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/flow/ContinueKeyword.java index 1086311c7..62d6eaa5a 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/flow/ContinueKeyword.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/flow/ContinueKeyword.java @@ -22,7 +22,7 @@ public class ContinueKeyword implements Keyword> { } @Override - public Block.ReturnInfo invoke(ImplementationArguments implementationArguments, Scope scope) { + public Block.ReturnInfo evaluate(ImplementationArguments implementationArguments, Scope scope) { return new Block.ReturnInfo<>(Block.ReturnLevel.CONTINUE, null); } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/flow/FailKeyword.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/flow/FailKeyword.java index 3bb5939b4..faf3eb58e 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/flow/FailKeyword.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/flow/FailKeyword.java @@ -22,7 +22,7 @@ public class FailKeyword implements Keyword> { } @Override - public Block.ReturnInfo invoke(ImplementationArguments implementationArguments, Scope scope) { + public Block.ReturnInfo evaluate(ImplementationArguments implementationArguments, Scope scope) { return new Block.ReturnInfo<>(Block.ReturnLevel.FAIL, null); } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/flow/ReturnKeyword.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/flow/ReturnKeyword.java index c40fa31c6..147632b3a 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/flow/ReturnKeyword.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/flow/ReturnKeyword.java @@ -22,7 +22,7 @@ public class ReturnKeyword implements Keyword> { } @Override - public Block.ReturnInfo invoke(ImplementationArguments implementationArguments, Scope scope) { + public Block.ReturnInfo evaluate(ImplementationArguments implementationArguments, Scope scope) { return new Block.ReturnInfo<>(Block.ReturnLevel.RETURN, null); } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/looplike/ForKeyword.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/looplike/ForKeyword.java index 6e26143f9..3058fd6cc 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/looplike/ForKeyword.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/looplike/ForKeyword.java @@ -18,12 +18,12 @@ import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; public class ForKeyword implements Keyword> { private final Block conditional; - private final Statement initializer; + private final Expression initializer; private final Expression statement; - private final Statement incrementer; + private final Expression incrementer; private final SourcePosition position; - public ForKeyword(Block conditional, Statement initializer, Expression statement, Statement incrementer, SourcePosition position) { + public ForKeyword(Block conditional, Expression initializer, Expression statement, Expression incrementer, SourcePosition position) { this.conditional = conditional; this.initializer = initializer; this.statement = statement; @@ -32,11 +32,11 @@ public class ForKeyword implements Keyword> { } @Override - public Block.ReturnInfo invoke(ImplementationArguments implementationArguments, Scope scope) { - for(initializer.invoke(implementationArguments, scope); - statement.invoke(implementationArguments, scope); - incrementer.invoke(implementationArguments, scope)) { - Block.ReturnInfo level = conditional.invoke(implementationArguments, scope); + public Block.ReturnInfo evaluate(ImplementationArguments implementationArguments, Scope scope) { + for(initializer.evaluate(implementationArguments, scope); + statement.evaluate(implementationArguments, scope); + incrementer.evaluate(implementationArguments, scope)) { + Block.ReturnInfo level = conditional.evaluate(implementationArguments, scope); if(level.getLevel().equals(Block.ReturnLevel.BREAK)) break; if(level.getLevel().isReturnFast()) return level; } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/looplike/IfKeyword.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/looplike/IfKeyword.java index 62e034182..f2c02bc68 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/looplike/IfKeyword.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/looplike/IfKeyword.java @@ -37,15 +37,15 @@ public class IfKeyword implements Keyword> { } @Override - public Block.ReturnInfo invoke(ImplementationArguments implementationArguments, Scope scope) { - if(statement.invoke(implementationArguments, scope)) return conditional.invoke(implementationArguments, scope); + public Block.ReturnInfo evaluate(ImplementationArguments implementationArguments, Scope scope) { + if(statement.evaluate(implementationArguments, scope)) return conditional.evaluate(implementationArguments, scope); else { for(Pair, Block> pair : elseIf) { - if(pair.getLeft().invoke(implementationArguments, scope)) { - return pair.getRight().invoke(implementationArguments, scope); + if(pair.getLeft().evaluate(implementationArguments, scope)) { + return pair.getRight().evaluate(implementationArguments, scope); } } - if(elseBlock != null) return elseBlock.invoke(implementationArguments, scope); + if(elseBlock != null) return elseBlock.evaluate(implementationArguments, scope); } return new Block.ReturnInfo<>(Block.ReturnLevel.NONE, null); } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/looplike/WhileKeyword.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/looplike/WhileKeyword.java index a88067d77..518e9df12 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/looplike/WhileKeyword.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/keywords/looplike/WhileKeyword.java @@ -27,9 +27,9 @@ public class WhileKeyword implements Keyword> { } @Override - public Block.ReturnInfo invoke(ImplementationArguments implementationArguments, Scope scope) { - while(statement.invoke(implementationArguments, scope)) { - Block.ReturnInfo level = conditional.invoke(implementationArguments, scope); + public Block.ReturnInfo evaluate(ImplementationArguments implementationArguments, Scope scope) { + while(statement.evaluate(implementationArguments, scope)) { + Block.ReturnInfo level = conditional.evaluate(implementationArguments, scope); if(level.getLevel().equals(Block.ReturnLevel.BREAK)) break; if(level.getLevel().isReturnFast()) return level; } 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 fc0886c0d..4fe865a3c 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 @@ -24,7 +24,7 @@ public class BooleanAndOperation extends BinaryOperation { } @Override - public Boolean invoke(ImplementationArguments implementationArguments, Scope scope) { + public Boolean evaluate(ImplementationArguments implementationArguments, Scope scope) { return 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 1f70d2b4c..3d25d58b6 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 @@ -19,7 +19,7 @@ public class BooleanNotOperation extends UnaryOperation { } @Override - public Boolean invoke(ImplementationArguments implementationArguments, Scope scope) { + public Boolean evaluate(ImplementationArguments implementationArguments, Scope scope) { return applyBoolean(implementationArguments, scope); } 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 92225e9ca..96fb141f6 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 @@ -19,7 +19,7 @@ public class BooleanOrOperation extends BinaryOperation { } @Override - public Boolean invoke(ImplementationArguments implementationArguments, Scope scope) { + public Boolean evaluate(ImplementationArguments implementationArguments, Scope scope) { return applyBoolean(implementationArguments, scope); } 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 748e619a0..e4cfe509e 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 @@ -35,7 +35,7 @@ public class ConcatenationOperation extends BinaryOperation { } @Override - public Object invoke(ImplementationArguments implementationArguments, Scope scope) { - return toString(left.invoke(implementationArguments, scope)) + toString(right.invoke(implementationArguments, scope)); + public Object evaluate(ImplementationArguments implementationArguments, Scope scope) { + return toString(left.evaluate(implementationArguments, scope)) + toString(right.evaluate(implementationArguments, scope)); } } 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 69b736418..2e4255b64 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 @@ -24,7 +24,7 @@ public class DivisionOperation extends BinaryOperation { } @Override - public Number invoke(ImplementationArguments implementationArguments, Scope scope) { + public Number evaluate(ImplementationArguments implementationArguments, Scope scope) { return 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 15397789f..215d05e46 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 @@ -19,7 +19,7 @@ public class ModuloOperation extends BinaryOperation { } @Override - public Number invoke(ImplementationArguments implementationArguments, Scope scope) { + public Number evaluate(ImplementationArguments implementationArguments, Scope scope) { return applyDouble(implementationArguments, scope); } 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 f535a60f4..5cbbbbbaf 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 @@ -19,7 +19,7 @@ public class MultiplicationOperation extends BinaryOperation { } @Override - public Number invoke(ImplementationArguments implementationArguments, Scope scope) { + public Number evaluate(ImplementationArguments implementationArguments, Scope scope) { return applyDouble(implementationArguments, scope); } 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 8ab2ac3bb..b6bd0e9a3 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 @@ -24,7 +24,7 @@ public class NegationOperation extends UnaryOperation { } @Override - public Number invoke(ImplementationArguments implementationArguments, Scope scope) { + public Number evaluate(ImplementationArguments implementationArguments, Scope scope) { return 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 f5a58cc3a..c58d2464a 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 @@ -19,7 +19,7 @@ public class NumberAdditionOperation extends BinaryOperation { } @Override - public Number invoke(ImplementationArguments implementationArguments, Scope scope) { + public Number evaluate(ImplementationArguments implementationArguments, Scope scope) { return applyDouble(implementationArguments, scope); } 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 6def5f080..106993239 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 @@ -19,7 +19,7 @@ public class SubtractionOperation extends BinaryOperation { } @Override - public Number invoke(ImplementationArguments implementationArguments, Scope scope) { + public Number evaluate(ImplementationArguments implementationArguments, Scope scope) { return applyDouble(implementationArguments, scope); } 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 0a34297b3..fb03a31df 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 @@ -31,14 +31,14 @@ public class EqualsStatement extends BinaryOperation { } @Override - public Boolean invoke(ImplementationArguments implementationArguments, Scope scope) { + public Boolean evaluate(ImplementationArguments implementationArguments, Scope scope) { return applyBoolean(implementationArguments, scope); } @Override public boolean applyBoolean(ImplementationArguments implementationArguments, Scope scope) { - Object leftValue = left.invoke(implementationArguments, scope); - Object rightValue = right.invoke(implementationArguments, scope); + Object leftValue = left.evaluate(implementationArguments, scope); + Object rightValue = right.evaluate(implementationArguments, scope); if(leftValue instanceof Number l && rightValue instanceof Number r) { return FastMath.abs(l.doubleValue() - r.doubleValue()) <= EPSILON; } 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 6e89467f1..f26e3757a 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 @@ -25,7 +25,7 @@ public class GreaterOrEqualsThanStatement extends BinaryOperation { @Override - public Boolean invoke(ImplementationArguments implementationArguments, Scope scope) { + public Boolean evaluate(ImplementationArguments implementationArguments, Scope scope) { return applyBoolean(implementationArguments, scope); } 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 26007fc1b..c3b4f2581 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 @@ -21,7 +21,7 @@ public class LessThanOrEqualsStatement extends BinaryOperation @Override - public Boolean invoke(ImplementationArguments implementationArguments, Scope scope) { + public Boolean evaluate(ImplementationArguments implementationArguments, Scope scope) { return applyBoolean(implementationArguments, scope); } 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 db2eaa04d..94490e04b 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 @@ -21,7 +21,7 @@ public class LessThanStatement extends BinaryOperation { @Override - public Boolean invoke(ImplementationArguments implementationArguments, Scope scope) { + public Boolean evaluate(ImplementationArguments implementationArguments, Scope scope) { return applyBoolean(implementationArguments, scope); } 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 09e4c08cf..d5dd2c90b 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 @@ -24,14 +24,14 @@ public class NotEqualsStatement extends BinaryOperation { } @Override - public Boolean invoke(ImplementationArguments implementationArguments, Scope scope) { + public Boolean evaluate(ImplementationArguments implementationArguments, Scope scope) { return applyBoolean(implementationArguments, scope); } @Override public boolean applyBoolean(ImplementationArguments implementationArguments, Scope scope) { - Object leftValue = left.invoke(implementationArguments, scope); - Object rightValue = right.invoke(implementationArguments, scope); + Object leftValue = left.evaluate(implementationArguments, scope); + Object rightValue = right.evaluate(implementationArguments, scope); if(leftValue instanceof Number l && rightValue instanceof Number r) { return FastMath.abs(l.doubleValue() - r.doubleValue()) > EPSILON; } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/assign/BoolAssignmentNode.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/assign/BoolAssignmentNode.java index 8cc4c608d..09068ca06 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/assign/BoolAssignmentNode.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/assign/BoolAssignmentNode.java @@ -12,7 +12,12 @@ public class BoolAssignmentNode extends VariableAssignmentNode { } @Override - public Boolean invoke(ImplementationArguments implementationArguments, Scope scope) { + public ReturnType returnType() { + return ReturnType.BOOLEAN; + } + + @Override + public Boolean evaluate(ImplementationArguments implementationArguments, Scope scope) { return applyBoolean(implementationArguments, scope); } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/assign/NumAssignmentNode.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/assign/NumAssignmentNode.java index 2f464ad0d..5eb3b450e 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/assign/NumAssignmentNode.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/assign/NumAssignmentNode.java @@ -12,7 +12,12 @@ public class NumAssignmentNode extends VariableAssignmentNode { } @Override - public Number invoke(ImplementationArguments implementationArguments, Scope scope) { + public ReturnType returnType() { + return ReturnType.NUMBER; + } + + @Override + public Number evaluate(ImplementationArguments implementationArguments, Scope scope) { return applyDouble(implementationArguments, scope); } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/assign/StrAssignmentNode.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/assign/StrAssignmentNode.java index bad4029c7..fe203d791 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/assign/StrAssignmentNode.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/assign/StrAssignmentNode.java @@ -12,8 +12,13 @@ public class StrAssignmentNode extends VariableAssignmentNode { } @Override - public String invoke(ImplementationArguments implementationArguments, Scope scope) { - String val = value.invoke(implementationArguments, scope); + public ReturnType returnType() { + return ReturnType.STRING; + } + + @Override + public String evaluate(ImplementationArguments implementationArguments, Scope scope) { + String val = value.evaluate(implementationArguments, scope); scope.setStr(index, val); return val; } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/assign/VariableAssignmentNode.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/assign/VariableAssignmentNode.java index 4d6f0692d..e9cc9d959 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/assign/VariableAssignmentNode.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/assign/VariableAssignmentNode.java @@ -12,7 +12,7 @@ import com.dfsek.terra.addons.terrascript.parser.lang.Expression; import com.dfsek.terra.addons.terrascript.tokenizer.SourcePosition; -public abstract class VariableAssignmentNode implements Statement { +public abstract class VariableAssignmentNode implements Expression { protected final Expression value; protected final int index; private final SourcePosition position; diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/reference/BoolVariableReferenceNode.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/reference/BoolVariableReferenceNode.java index 859847c6e..6b0b212b1 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/reference/BoolVariableReferenceNode.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/reference/BoolVariableReferenceNode.java @@ -11,7 +11,7 @@ public class BoolVariableReferenceNode extends VariableReferenceNode { } @Override - public Boolean invoke(ImplementationArguments implementationArguments, Scope scope) { + public Boolean evaluate(ImplementationArguments implementationArguments, Scope scope) { return scope.getBool(index); } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/reference/NumVariableReferenceNode.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/reference/NumVariableReferenceNode.java index 5a438e447..287708cb3 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/reference/NumVariableReferenceNode.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/reference/NumVariableReferenceNode.java @@ -11,7 +11,7 @@ public class NumVariableReferenceNode extends VariableReferenceNode { } @Override - public Number invoke(ImplementationArguments implementationArguments, Scope scope) { + public Number evaluate(ImplementationArguments implementationArguments, Scope scope) { return scope.getNum(index); } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/reference/StrVariableReferenceNode.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/reference/StrVariableReferenceNode.java index 7fa4d2477..3babc57d7 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/reference/StrVariableReferenceNode.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/parser/lang/variables/reference/StrVariableReferenceNode.java @@ -11,7 +11,7 @@ public class StrVariableReferenceNode extends VariableReferenceNode { } @Override - public String invoke(ImplementationArguments implementationArguments, Scope scope) { + public String evaluate(ImplementationArguments implementationArguments, Scope scope) { return scope.getStr(index); } } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/BinaryNumberFunctionBuilder.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/BinaryNumberFunctionBuilder.java index d42217950..5543d337a 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/BinaryNumberFunctionBuilder.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/BinaryNumberFunctionBuilder.java @@ -36,9 +36,9 @@ public class BinaryNumberFunctionBuilder implements FunctionBuilder) argumentList.get(0)).invoke(implementationArguments, scope), - ((Expression) argumentList.get(1)).invoke(implementationArguments, scope)); + public Number evaluate(ImplementationArguments implementationArguments, Scope scope) { + return function.apply(((Expression) argumentList.get(0)).evaluate(implementationArguments, scope), + ((Expression) argumentList.get(1)).evaluate(implementationArguments, scope)); } @Override diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/UnaryBooleanFunctionBuilder.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/UnaryBooleanFunctionBuilder.java index a1d9a8ac5..2d784df59 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/UnaryBooleanFunctionBuilder.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/UnaryBooleanFunctionBuilder.java @@ -37,8 +37,8 @@ public class UnaryBooleanFunctionBuilder implements FunctionBuilder) argumentList.get(0)).invoke(implementationArguments, scope), + public Void evaluate(ImplementationArguments implementationArguments, Scope scope) { + function.accept(((Expression) argumentList.get(0)).evaluate(implementationArguments, scope), (TerraImplementationArguments) implementationArguments); return null; } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/UnaryNumberFunctionBuilder.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/UnaryNumberFunctionBuilder.java index 8e90742ba..4de5199ae 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/UnaryNumberFunctionBuilder.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/UnaryNumberFunctionBuilder.java @@ -35,8 +35,8 @@ public class UnaryNumberFunctionBuilder implements FunctionBuilder) argumentList.get(0)).invoke(implementationArguments, scope)); + public Number evaluate(ImplementationArguments implementationArguments, Scope scope) { + return function.apply(((Expression) argumentList.get(0)).evaluate(implementationArguments, scope)); } @Override diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/UnaryStringFunctionBuilder.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/UnaryStringFunctionBuilder.java index 7e7bb36a9..6f266c28e 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/UnaryStringFunctionBuilder.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/UnaryStringFunctionBuilder.java @@ -35,8 +35,8 @@ public class UnaryStringFunctionBuilder implements FunctionBuilder) argumentList.get(0)).invoke(implementationArguments, scope)); + public Void evaluate(ImplementationArguments implementationArguments, Scope scope) { + function.accept(((Expression) argumentList.get(0)).evaluate(implementationArguments, scope)); return null; } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/ZeroArgFunctionBuilder.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/ZeroArgFunctionBuilder.java index ab66fb889..a6a81cc84 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/ZeroArgFunctionBuilder.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/ZeroArgFunctionBuilder.java @@ -36,7 +36,7 @@ public class ZeroArgFunctionBuilder implements FunctionBuilder> { } @Override - public T invoke(ImplementationArguments implementationArguments, Scope scope) { + public T evaluate(ImplementationArguments implementationArguments, Scope scope) { return function.apply((TerraImplementationArguments) implementationArguments); } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/BiomeFunction.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/BiomeFunction.java index 2e673a789..ea3e5b82e 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/BiomeFunction.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/BiomeFunction.java @@ -35,11 +35,11 @@ public class BiomeFunction implements Function { @Override - public String invoke(ImplementationArguments implementationArguments, Scope scope) { + public String evaluate(ImplementationArguments implementationArguments, Scope scope) { TerraImplementationArguments arguments = (TerraImplementationArguments) implementationArguments; - Vector2 xz = RotationUtil.rotateVector(Vector2.of(x.invoke(implementationArguments, scope).doubleValue(), - z.invoke(implementationArguments, scope).doubleValue()), + Vector2 xz = RotationUtil.rotateVector(Vector2.of(x.evaluate(implementationArguments, scope).doubleValue(), + z.evaluate(implementationArguments, scope).doubleValue()), arguments.getRotation()); @@ -49,7 +49,7 @@ public class BiomeFunction implements Function { .toVector3() .mutable() .add(Vector3.of(FastMath.roundToInt(xz.getX()), - y.invoke(implementationArguments, scope).intValue(), + y.evaluate(implementationArguments, scope).intValue(), FastMath.roundToInt(xz.getZ()))).immutable(), arguments.getWorld().getSeed()).getID(); } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/BlockFunction.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/BlockFunction.java index f0a42ca4b..fa7a5c75e 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/BlockFunction.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/BlockFunction.java @@ -49,7 +49,7 @@ public class BlockFunction implements Function { } @Override - public Void invoke(ImplementationArguments implementationArguments, Scope scope) { + public Void evaluate(ImplementationArguments implementationArguments, Scope scope) { TerraImplementationArguments arguments = (TerraImplementationArguments) implementationArguments; BlockState rot = getBlockState(implementationArguments, scope); setBlock(implementationArguments, scope, arguments, rot); @@ -68,14 +68,14 @@ public class BlockFunction implements Function { void setBlock(ImplementationArguments implementationArguments, Scope scope, TerraImplementationArguments arguments, BlockState rot) { - Vector2 xz = RotationUtil.rotateVector(Vector2.of(x.invoke(implementationArguments, scope).doubleValue(), - z.invoke(implementationArguments, scope).doubleValue()), arguments.getRotation()); + Vector2 xz = RotationUtil.rotateVector(Vector2.of(x.evaluate(implementationArguments, scope).doubleValue(), + z.evaluate(implementationArguments, scope).doubleValue()), arguments.getRotation()); try { Vector3.Mutable set = Vector3.of(FastMath.roundToInt(xz.getX()), - y.invoke(implementationArguments, scope).doubleValue(), + y.evaluate(implementationArguments, scope).doubleValue(), FastMath.roundToInt(xz.getZ())).mutable().add(arguments.getOrigin()); BlockState current = arguments.getWorld().getBlockState(set); - if(overwrite.invoke(implementationArguments, scope) || current.isAir()) { + if(overwrite.evaluate(implementationArguments, scope) || current.isAir()) { arguments.getWorld().setBlockState(set, rot); } } catch(RuntimeException e) { @@ -84,7 +84,7 @@ public class BlockFunction implements Function { } protected BlockState getBlockState(ImplementationArguments arguments, Scope scope) { - return data.computeIfAbsent(blockData.invoke(arguments, scope), platform.getWorldHandle()::createBlockState); + return data.computeIfAbsent(blockData.evaluate(arguments, scope), platform.getWorldHandle()::createBlockState); } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/CheckBlockFunction.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/CheckBlockFunction.java index efb13f7dc..ad383a63c 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/CheckBlockFunction.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/CheckBlockFunction.java @@ -33,11 +33,11 @@ public class CheckBlockFunction implements Function { @Override - public String invoke(ImplementationArguments implementationArguments, Scope scope) { + public String evaluate(ImplementationArguments implementationArguments, Scope scope) { TerraImplementationArguments arguments = (TerraImplementationArguments) implementationArguments; - Vector2 xz = RotationUtil.rotateVector(Vector2.of(x.invoke(implementationArguments, scope).doubleValue(), - z.invoke(implementationArguments, scope).doubleValue()), + Vector2 xz = RotationUtil.rotateVector(Vector2.of(x.evaluate(implementationArguments, scope).doubleValue(), + z.evaluate(implementationArguments, scope).doubleValue()), arguments.getRotation()); @@ -46,7 +46,7 @@ public class CheckBlockFunction implements Function { .toVector3() .mutable() .add(Vector3.of(FastMath.roundToInt(xz.getX()), - y.invoke(implementationArguments, scope) + y.evaluate(implementationArguments, scope) .doubleValue(), FastMath.roundToInt(xz.getZ())))) .getAsString(); if(data.contains("[")) return data.substring(0, data.indexOf('[')); // Strip properties diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/EntityFunction.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/EntityFunction.java index f1ae72f7a..0261010d6 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/EntityFunction.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/EntityFunction.java @@ -43,12 +43,12 @@ public class EntityFunction implements Function { } @Override - public Void invoke(ImplementationArguments implementationArguments, Scope scope) { + public Void evaluate(ImplementationArguments implementationArguments, Scope scope) { TerraImplementationArguments arguments = (TerraImplementationArguments) implementationArguments; - Vector2 xz = RotationUtil.rotateVector(Vector2.of(x.invoke(implementationArguments, scope).doubleValue(), - z.invoke(implementationArguments, scope).doubleValue()), arguments.getRotation()); + Vector2 xz = RotationUtil.rotateVector(Vector2.of(x.evaluate(implementationArguments, scope).doubleValue(), + z.evaluate(implementationArguments, scope).doubleValue()), arguments.getRotation()); - Entity entity = arguments.getWorld().spawnEntity(Vector3.of(xz.getX(), y.invoke(implementationArguments, scope).doubleValue(), + Entity entity = arguments.getWorld().spawnEntity(Vector3.of(xz.getX(), y.evaluate(implementationArguments, scope).doubleValue(), xz.getZ()) .mutable() .add(arguments.getOrigin()) diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/GetMarkFunction.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/GetMarkFunction.java index def8a47c0..230aa2125 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/GetMarkFunction.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/GetMarkFunction.java @@ -32,13 +32,13 @@ public class GetMarkFunction implements Function { } @Override - public String invoke(ImplementationArguments implementationArguments, Scope scope) { + public String evaluate(ImplementationArguments implementationArguments, Scope scope) { TerraImplementationArguments arguments = (TerraImplementationArguments) implementationArguments; - Vector2 xz = RotationUtil.rotateVector(Vector2.of(x.invoke(implementationArguments, scope).doubleValue(), - z.invoke(implementationArguments, scope).doubleValue()), arguments.getRotation()); + Vector2 xz = RotationUtil.rotateVector(Vector2.of(x.evaluate(implementationArguments, scope).doubleValue(), + z.evaluate(implementationArguments, scope).doubleValue()), arguments.getRotation()); String mark = arguments.getMark(Vector3.of(FastMath.floorToInt(xz.getX()), FastMath.floorToInt( - y.invoke(implementationArguments, scope).doubleValue()), + y.evaluate(implementationArguments, scope).doubleValue()), FastMath.floorToInt(xz.getZ())) .mutable() .add(arguments.getOrigin()) diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/LootFunction.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/LootFunction.java index b404cf402..eeae70e9d 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/LootFunction.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/LootFunction.java @@ -54,20 +54,20 @@ public class LootFunction implements Function { } @Override - public Void invoke(ImplementationArguments implementationArguments, Scope scope) { + public Void evaluate(ImplementationArguments implementationArguments, Scope scope) { TerraImplementationArguments arguments = (TerraImplementationArguments) implementationArguments; - Vector2 xz = RotationUtil.rotateVector(Vector2.of(x.invoke(implementationArguments, scope).doubleValue(), - z.invoke(implementationArguments, scope).doubleValue()), + Vector2 xz = RotationUtil.rotateVector(Vector2.of(x.evaluate(implementationArguments, scope).doubleValue(), + z.evaluate(implementationArguments, scope).doubleValue()), arguments.getRotation()); - String id = data.invoke(implementationArguments, scope); + String id = data.evaluate(implementationArguments, scope); registry.get(RegistryKey.parse(id)) .ifPresentOrElse(table -> { Vector3 apply = Vector3.of(FastMath.roundToInt(xz.getX()), - y.invoke(implementationArguments, scope) + y.evaluate(implementationArguments, scope) .intValue(), FastMath.roundToInt(xz.getZ())).mutable().add(arguments.getOrigin()).immutable(); diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/PullFunction.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/PullFunction.java index 4b2ba3ead..db79330ac 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/PullFunction.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/PullFunction.java @@ -41,12 +41,12 @@ public class PullFunction implements Function { } @Override - public Void invoke(ImplementationArguments implementationArguments, Scope scope) { + public Void evaluate(ImplementationArguments implementationArguments, Scope scope) { TerraImplementationArguments arguments = (TerraImplementationArguments) implementationArguments; - Vector2 xz = RotationUtil.rotateVector(Vector2.of(x.invoke(implementationArguments, scope).doubleValue(), - z.invoke(implementationArguments, scope).doubleValue()), arguments.getRotation()); + Vector2 xz = RotationUtil.rotateVector(Vector2.of(x.evaluate(implementationArguments, scope).doubleValue(), + z.evaluate(implementationArguments, scope).doubleValue()), arguments.getRotation()); - Vector3.Mutable mutable = Vector3.of(FastMath.roundToInt(xz.getX()), y.invoke(implementationArguments, scope).intValue(), + Vector3.Mutable mutable = Vector3.of(FastMath.roundToInt(xz.getX()), y.evaluate(implementationArguments, scope).intValue(), FastMath.roundToInt(xz.getZ())).mutable().add(arguments.getOrigin()); while(mutable.getY() > arguments.getWorld().getMinHeight()) { if(!arguments.getWorld().getBlockState(mutable).isAir()) { diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/RandomFunction.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/RandomFunction.java index 92fc38a6f..0d08f0a9a 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/RandomFunction.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/RandomFunction.java @@ -31,9 +31,9 @@ public class RandomFunction implements Function { } @Override - public Integer invoke(ImplementationArguments implementationArguments, Scope scope) { + public Integer evaluate(ImplementationArguments implementationArguments, Scope scope) { return ((TerraImplementationArguments) implementationArguments).getRandom().nextInt( - numberReturnable.invoke(implementationArguments, scope).intValue()); + numberReturnable.evaluate(implementationArguments, scope).intValue()); } @Override diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/RecursionsFunction.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/RecursionsFunction.java index d196521f1..098265399 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/RecursionsFunction.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/RecursionsFunction.java @@ -27,7 +27,7 @@ public class RecursionsFunction implements Function { } @Override - public Number invoke(ImplementationArguments implementationArguments, Scope scope) { + public Number evaluate(ImplementationArguments implementationArguments, Scope scope) { return ((TerraImplementationArguments) implementationArguments).getRecursions(); } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/SetMarkFunction.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/SetMarkFunction.java index 030abd690..5f3e2346e 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/SetMarkFunction.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/SetMarkFunction.java @@ -34,17 +34,17 @@ public class SetMarkFunction implements Function { } @Override - public Void invoke(ImplementationArguments implementationArguments, Scope scope) { + public Void evaluate(ImplementationArguments implementationArguments, Scope scope) { TerraImplementationArguments arguments = (TerraImplementationArguments) implementationArguments; - Vector2 xz = RotationUtil.rotateVector(Vector2.of(x.invoke(implementationArguments, scope).doubleValue(), - z.invoke(implementationArguments, scope).doubleValue()), arguments.getRotation()); + Vector2 xz = RotationUtil.rotateVector(Vector2.of(x.evaluate(implementationArguments, scope).doubleValue(), + z.evaluate(implementationArguments, scope).doubleValue()), arguments.getRotation()); arguments.setMark(Vector3.of(FastMath.floorToInt(xz.getX()), FastMath.floorToInt( - y.invoke(implementationArguments, scope).doubleValue()), + y.evaluate(implementationArguments, scope).doubleValue()), FastMath.floorToInt(xz.getZ())).mutable().add(arguments.getOrigin()).immutable(), - mark.invoke(implementationArguments, scope)); + mark.evaluate(implementationArguments, scope)); return null; } diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/StateFunction.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/StateFunction.java index cacfe3ed6..b938fe12f 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/StateFunction.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/StateFunction.java @@ -39,17 +39,17 @@ public class StateFunction implements Function { } @Override - public Void invoke(ImplementationArguments implementationArguments, Scope scope) { + public Void evaluate(ImplementationArguments implementationArguments, Scope scope) { TerraImplementationArguments arguments = (TerraImplementationArguments) implementationArguments; - Vector2 xz = RotationUtil.rotateVector(Vector2.of(x.invoke(implementationArguments, scope).doubleValue(), - z.invoke(implementationArguments, scope).doubleValue()), arguments.getRotation()); + Vector2 xz = RotationUtil.rotateVector(Vector2.of(x.evaluate(implementationArguments, scope).doubleValue(), + z.evaluate(implementationArguments, scope).doubleValue()), arguments.getRotation()); - Vector3 origin = Vector3.of(FastMath.roundToInt(xz.getX()), y.invoke(implementationArguments, scope).intValue(), + Vector3 origin = Vector3.of(FastMath.roundToInt(xz.getX()), y.evaluate(implementationArguments, scope).intValue(), FastMath.roundToInt(xz.getZ())).mutable().add(arguments.getOrigin()).immutable(); try { BlockEntity state = arguments.getWorld().getBlockEntity(origin); - state.applyState(data.invoke(implementationArguments, scope)); + state.applyState(data.evaluate(implementationArguments, scope)); state.update(false); } catch(Exception e) { LOGGER.warn("Could not apply BlockState at {}", origin, e); diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/StructureFunction.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/StructureFunction.java index 72fc4d43a..8eec96cc3 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/StructureFunction.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/functions/StructureFunction.java @@ -55,20 +55,20 @@ public class StructureFunction implements Function { } @Override - public Boolean invoke(ImplementationArguments implementationArguments, Scope scope) { + public Boolean evaluate(ImplementationArguments implementationArguments, Scope scope) { TerraImplementationArguments arguments = (TerraImplementationArguments) implementationArguments; if(arguments.getRecursions() > platform.getTerraConfig().getMaxRecursion()) throw new RuntimeException("Structure recursion too deep: " + arguments.getRecursions()); - Vector2 xz = RotationUtil.rotateVector(Vector2.of(x.invoke(implementationArguments, scope).doubleValue(), - z.invoke(implementationArguments, scope).doubleValue()), arguments.getRotation()); + Vector2 xz = RotationUtil.rotateVector(Vector2.of(x.evaluate(implementationArguments, scope).doubleValue(), + z.evaluate(implementationArguments, scope).doubleValue()), arguments.getRotation()); - String app = id.invoke(implementationArguments, scope); + String app = id.evaluate(implementationArguments, scope); return registry.getByID(app).map(script -> { Rotation rotation1; - String rotString = rotations.get(arguments.getRandom().nextInt(rotations.size())).invoke(implementationArguments, scope); + String rotString = rotations.get(arguments.getRandom().nextInt(rotations.size())).evaluate(implementationArguments, scope); try { rotation1 = Rotation.valueOf(rotString); } catch(IllegalArgumentException e) { @@ -80,7 +80,7 @@ public class StructureFunction implements Function { return structureScript.generate(arguments.getOrigin(), arguments.getWorld() .buffer(FastMath.roundToInt(xz.getX()), - y.invoke(implementationArguments, scope).intValue(), + y.evaluate(implementationArguments, scope).intValue(), FastMath.roundToInt(xz.getZ())), arguments.getRandom(), arguments.getRotation().rotate(rotation1), arguments.getRecursions() + 1); @@ -88,7 +88,7 @@ public class StructureFunction implements Function { return script.generate(arguments.getOrigin(), arguments.getWorld() .buffer(FastMath.roundToInt(xz.getX()), - y.invoke(implementationArguments, scope).intValue(), + y.evaluate(implementationArguments, scope).intValue(), FastMath.roundToInt(xz.getZ())), arguments.getRandom(), arguments.getRotation().rotate(rotation1)); diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/tokenizer/Token.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/tokenizer/Token.java index a2ffeaeef..b26020ee7 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/tokenizer/Token.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/tokenizer/Token.java @@ -39,6 +39,10 @@ public class Token { return this.type.equals(Type.NUMBER) || this.type.equals(Type.STRING) || this.type.equals(Type.BOOLEAN); } + public boolean isType(Type type) { + return type == getType(); + } + public boolean isBinaryOperator() { return type.equals(Type.ADDITION_OPERATOR) || type.equals(Type.SUBTRACTION_OPERATOR) @@ -77,16 +81,12 @@ public class Token { || type.equals(Type.NUMBER_VARIABLE); } - public boolean isLoopLike() { + public boolean isControlStructure() { return type.equals(Type.IF_STATEMENT) || type.equals(Type.WHILE_LOOP) || type.equals(Type.FOR_LOOP); } - public boolean isIdentifier() { - return type.equals(Type.IDENTIFIER); - } - public enum Type { /** * Function identifier or language keyword diff --git a/common/addons/structure-terrascript-loader/src/test/java/structure/LookaheadStreamTest.java b/common/addons/structure-terrascript-loader/src/test/java/structure/LookaheadStreamTest.java index bb9983901..a1f0ccbbe 100644 --- a/common/addons/structure-terrascript-loader/src/test/java/structure/LookaheadStreamTest.java +++ b/common/addons/structure-terrascript-loader/src/test/java/structure/LookaheadStreamTest.java @@ -11,13 +11,13 @@ import org.junit.jupiter.api.Test; import java.io.StringReader; -import com.dfsek.terra.addons.terrascript.tokenizer.PeekableStream; +import com.dfsek.terra.addons.terrascript.tokenizer.LookaheadStream; -public class PeekableStreamTest { +public class LookaheadStreamTest { @Test public void lookahead() { - PeekableStream lookahead = new PeekableStream(new StringReader("Test string...")); + LookaheadStream lookahead = new LookaheadStream(new StringReader("Test string...")); for(int i = 0; lookahead.next(i) != null; i++) { System.out.print(lookahead.next(i).getCharacter()); diff --git a/common/addons/structure-terrascript-loader/src/test/java/structure/ParserTest.java b/common/addons/structure-terrascript-loader/src/test/java/structure/ParserTest.java index b6a298c12..ab62ec3d9 100644 --- a/common/addons/structure-terrascript-loader/src/test/java/structure/ParserTest.java +++ b/common/addons/structure-terrascript-loader/src/test/java/structure/ParserTest.java @@ -77,9 +77,9 @@ public class ParserTest { } @Override - public Void invoke(ImplementationArguments implementationArguments, Scope scope) { - System.out.println("string: " + a.invoke(implementationArguments, scope) + ", double: " + - b.invoke(implementationArguments, scope)); + public Void evaluate(ImplementationArguments implementationArguments, Scope scope) { + System.out.println("string: " + a.evaluate(implementationArguments, scope) + ", double: " + + b.evaluate(implementationArguments, scope)); return null; } diff --git a/common/addons/terrascript-function-check-noise-3d/src/main/java/com/dfsek/terra/addon/terrascript/check/CheckFunction.java b/common/addons/terrascript-function-check-noise-3d/src/main/java/com/dfsek/terra/addon/terrascript/check/CheckFunction.java index 377229a37..89a35c5fd 100644 --- a/common/addons/terrascript-function-check-noise-3d/src/main/java/com/dfsek/terra/addon/terrascript/check/CheckFunction.java +++ b/common/addons/terrascript-function-check-noise-3d/src/main/java/com/dfsek/terra/addon/terrascript/check/CheckFunction.java @@ -37,19 +37,19 @@ public class CheckFunction implements Function { @Override - public String invoke(ImplementationArguments implementationArguments, Scope scope) { + public String evaluate(ImplementationArguments implementationArguments, Scope scope) { TerraImplementationArguments arguments = (TerraImplementationArguments) implementationArguments; - Vector2 xz = Vector2.of(x.invoke(implementationArguments, scope).doubleValue(), - z.invoke(implementationArguments, scope).doubleValue()); + Vector2 xz = Vector2.of(x.evaluate(implementationArguments, scope).doubleValue(), + z.evaluate(implementationArguments, scope).doubleValue()); RotationUtil.rotateVector(xz, arguments.getRotation()); Vector3 location = arguments.getOrigin().toVector3Mutable().add( - Vector3.of(FastMath.roundToInt(xz.getX()), y.invoke(implementationArguments, scope).doubleValue(), + Vector3.of(FastMath.roundToInt(xz.getX()), y.evaluate(implementationArguments, scope).doubleValue(), FastMath.roundToInt(xz.getZ()))).immutable(); return apply(location, arguments.getWorld()); diff --git a/common/addons/terrascript-function-sampler/src/main/java/com/dfsek/terra/addons/terrascript/sampler/ConstantSamplerFunction.java b/common/addons/terrascript-function-sampler/src/main/java/com/dfsek/terra/addons/terrascript/sampler/ConstantSamplerFunction.java index 5b70b7faa..41f9b45ec 100644 --- a/common/addons/terrascript-function-sampler/src/main/java/com/dfsek/terra/addons/terrascript/sampler/ConstantSamplerFunction.java +++ b/common/addons/terrascript-function-sampler/src/main/java/com/dfsek/terra/addons/terrascript/sampler/ConstantSamplerFunction.java @@ -32,16 +32,16 @@ public class ConstantSamplerFunction implements Function { } @Override - public Number invoke(ImplementationArguments implementationArguments, Scope scope) { + public Number evaluate(ImplementationArguments implementationArguments, Scope scope) { TerraImplementationArguments arguments = (TerraImplementationArguments) implementationArguments; - double x = this.x.invoke(implementationArguments, scope).doubleValue(); + double x = this.x.evaluate(implementationArguments, scope).doubleValue(); - double z = this.z.invoke(implementationArguments, scope).doubleValue(); + double z = this.z.evaluate(implementationArguments, scope).doubleValue(); if(twoD) { return sampler.noise(arguments.getWorld().getSeed(), x, z); } else { - double y = this.y.invoke(implementationArguments, scope).doubleValue(); + double y = this.y.evaluate(implementationArguments, scope).doubleValue(); return sampler.noise(arguments.getWorld().getSeed(), x, y, z); } } diff --git a/common/addons/terrascript-function-sampler/src/main/java/com/dfsek/terra/addons/terrascript/sampler/SamplerFunction.java b/common/addons/terrascript-function-sampler/src/main/java/com/dfsek/terra/addons/terrascript/sampler/SamplerFunction.java index 4da543eb9..d82192a4d 100644 --- a/common/addons/terrascript-function-sampler/src/main/java/com/dfsek/terra/addons/terrascript/sampler/SamplerFunction.java +++ b/common/addons/terrascript-function-sampler/src/main/java/com/dfsek/terra/addons/terrascript/sampler/SamplerFunction.java @@ -37,17 +37,17 @@ public class SamplerFunction implements Function { } @Override - public Number invoke(ImplementationArguments implementationArguments, Scope scope) { + public Number evaluate(ImplementationArguments implementationArguments, Scope scope) { TerraImplementationArguments arguments = (TerraImplementationArguments) implementationArguments; - double x = this.x.invoke(implementationArguments, scope).doubleValue(); + double x = this.x.evaluate(implementationArguments, scope).doubleValue(); - double z = this.z.invoke(implementationArguments, scope).doubleValue(); + double z = this.z.evaluate(implementationArguments, scope).doubleValue(); - NoiseSampler sampler = samplerFunction.apply(() -> function.invoke(implementationArguments, scope)); + NoiseSampler sampler = samplerFunction.apply(() -> function.evaluate(implementationArguments, scope)); if(twoD) { return sampler.noise(arguments.getWorld().getSeed(), x, z); } else { - double y = this.y.invoke(implementationArguments, scope).doubleValue(); + double y = this.y.evaluate(implementationArguments, scope).doubleValue(); return sampler.noise(arguments.getWorld().getSeed(), x, y, z); } }