mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-10-26 22:10:22 +00:00
implement BlockFunction Constant override
This commit is contained in:
1 parent
a28f46eca3
commit
5c92316725
2 files changed
+23
-2
No files matched your search
+4
@@ -3,6 +3,7 @@ package com.dfsek.terra.addons.terrascript.script.builders;
|
|||||||
import com.dfsek.terra.addons.terrascript.parser.exceptions.ParseException;
|
import com.dfsek.terra.addons.terrascript.parser.exceptions.ParseException;
|
||||||
import com.dfsek.terra.addons.terrascript.parser.lang.Returnable;
|
import com.dfsek.terra.addons.terrascript.parser.lang.Returnable;
|
||||||
import com.dfsek.terra.addons.terrascript.parser.lang.constants.BooleanConstant;
|
import com.dfsek.terra.addons.terrascript.parser.lang.constants.BooleanConstant;
|
||||||
|
import com.dfsek.terra.addons.terrascript.parser.lang.constants.StringConstant;
|
||||||
import com.dfsek.terra.addons.terrascript.parser.lang.functions.FunctionBuilder;
|
import com.dfsek.terra.addons.terrascript.parser.lang.functions.FunctionBuilder;
|
||||||
import com.dfsek.terra.addons.terrascript.script.functions.BlockFunction;
|
import com.dfsek.terra.addons.terrascript.script.functions.BlockFunction;
|
||||||
import com.dfsek.terra.addons.terrascript.tokenizer.Position;
|
import com.dfsek.terra.addons.terrascript.tokenizer.Position;
|
||||||
@@ -23,6 +24,9 @@ public class BlockFunctionBuilder implements FunctionBuilder<BlockFunction> {
|
|||||||
if(argumentList.size() < 4) throw new ParseException("Expected data", position);
|
if(argumentList.size() < 4) throw new ParseException("Expected data", position);
|
||||||
Returnable<Boolean> booleanReturnable = new BooleanConstant(true, position);
|
Returnable<Boolean> booleanReturnable = new BooleanConstant(true, position);
|
||||||
if(argumentList.size() == 5) booleanReturnable = (Returnable<Boolean>) argumentList.get(4);
|
if(argumentList.size() == 5) booleanReturnable = (Returnable<Boolean>) argumentList.get(4);
|
||||||
|
if(argumentList.get(3) instanceof StringConstant) {
|
||||||
|
return new BlockFunction.Constant((Returnable<Number>) argumentList.get(0), (Returnable<Number>) argumentList.get(1), (Returnable<Number>) argumentList.get(2), (StringConstant) argumentList.get(3), booleanReturnable, main, position);
|
||||||
|
}
|
||||||
return new BlockFunction((Returnable<Number>) argumentList.get(0), (Returnable<Number>) argumentList.get(1), (Returnable<Number>) argumentList.get(2), (Returnable<String>) argumentList.get(3), booleanReturnable, main, position);
|
return new BlockFunction((Returnable<Number>) argumentList.get(0), (Returnable<Number>) argumentList.get(1), (Returnable<Number>) argumentList.get(2), (Returnable<String>) argumentList.get(3), booleanReturnable, main, position);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+19
-2
@@ -3,6 +3,7 @@ package com.dfsek.terra.addons.terrascript.script.functions;
|
|||||||
import com.dfsek.terra.addons.terrascript.buffer.items.BufferedBlock;
|
import com.dfsek.terra.addons.terrascript.buffer.items.BufferedBlock;
|
||||||
import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments;
|
import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments;
|
||||||
import com.dfsek.terra.addons.terrascript.parser.lang.Returnable;
|
import com.dfsek.terra.addons.terrascript.parser.lang.Returnable;
|
||||||
|
import com.dfsek.terra.addons.terrascript.parser.lang.constants.StringConstant;
|
||||||
import com.dfsek.terra.addons.terrascript.parser.lang.functions.Function;
|
import com.dfsek.terra.addons.terrascript.parser.lang.functions.Function;
|
||||||
import com.dfsek.terra.addons.terrascript.parser.lang.variables.Variable;
|
import com.dfsek.terra.addons.terrascript.parser.lang.variables.Variable;
|
||||||
import com.dfsek.terra.addons.terrascript.script.TerraImplementationArguments;
|
import com.dfsek.terra.addons.terrascript.script.TerraImplementationArguments;
|
||||||
@@ -14,7 +15,6 @@ import com.dfsek.terra.api.vector.Vector2;
|
|||||||
import com.dfsek.terra.api.vector.Vector3;
|
import com.dfsek.terra.api.vector.Vector3;
|
||||||
import net.jafama.FastMath;
|
import net.jafama.FastMath;
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@@ -49,11 +49,15 @@ public class BlockFunction implements Function<Void> {
|
|||||||
@Override
|
@Override
|
||||||
public Void apply(ImplementationArguments implementationArguments, Map<String, Variable<?>> variableMap) {
|
public Void apply(ImplementationArguments implementationArguments, Map<String, Variable<?>> variableMap) {
|
||||||
TerraImplementationArguments arguments = (TerraImplementationArguments) implementationArguments;
|
TerraImplementationArguments arguments = (TerraImplementationArguments) implementationArguments;
|
||||||
BlockState rot = data.computeIfAbsent(blockData.apply(implementationArguments, variableMap), main.getWorldHandle()::createBlockData).clone();
|
BlockState rot = getBlockState(implementationArguments, variableMap).clone();
|
||||||
setBlock(implementationArguments, variableMap, arguments, rot);
|
setBlock(implementationArguments, variableMap, arguments, rot);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected BlockState getBlockState(ImplementationArguments arguments, Map<String, Variable<?>> variableMap) {
|
||||||
|
return data.computeIfAbsent(blockData.apply(arguments, variableMap), main.getWorldHandle()::createBlockData);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Position getPosition() {
|
public Position getPosition() {
|
||||||
return position;
|
return position;
|
||||||
@@ -63,4 +67,17 @@ public class BlockFunction implements Function<Void> {
|
|||||||
public ReturnType returnType() {
|
public ReturnType returnType() {
|
||||||
return ReturnType.VOID;
|
return ReturnType.VOID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class Constant extends BlockFunction {
|
||||||
|
private final BlockState state;
|
||||||
|
public Constant(Returnable<Number> x, Returnable<Number> y, Returnable<Number> z, StringConstant blockData, Returnable<Boolean> overwrite, TerraPlugin main, Position position) {
|
||||||
|
super(x, y, z, blockData, overwrite, main, position);
|
||||||
|
this.state = main.getWorldHandle().createBlockData(blockData.getConstant());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected BlockState getBlockState(ImplementationArguments arguments, Map<String, Variable<?>> variableMap) {
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user