diff --git a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/BlockFunctionBuilder.java b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/BlockFunctionBuilder.java index daa001ca9..7d3805f3d 100644 --- a/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/BlockFunctionBuilder.java +++ b/common/addons/structure-terrascript-loader/src/main/java/com/dfsek/terra/addons/terrascript/script/builders/BlockFunctionBuilder.java @@ -30,12 +30,14 @@ public class BlockFunctionBuilder implements FunctionBuilder { @Override public BlockFunction build(List> argumentList, Position position) { if(argumentList.size() < 4) throw new ParseException("Expected data", position); - Returnable booleanReturnable = new BooleanConstant(true, position); - if(argumentList.size() == 5) booleanReturnable = (Returnable) argumentList.get(4); + Returnable overwrite = new BooleanConstant(true, position); + if(argumentList.size() >= 5) overwrite = (Returnable) argumentList.get(4); + Returnable physics = new BooleanConstant(true, position); + if(argumentList.size() == 6) physics = (Returnable) argumentList.get(5); if(argumentList.get(3) instanceof StringConstant) { return new BlockFunction.Constant((Returnable) argumentList.get(0), (Returnable) argumentList.get(1), (Returnable) argumentList.get(2), (StringConstant) argumentList.get(3), - booleanReturnable, platform, position); + overwrite, physics, platform, position); } return new BlockFunction((Returnable) argumentList.get(0), (Returnable) argumentList.get(1), (Returnable) argumentList.get(2), (Returnable) argumentList.get(3), booleanReturnable, 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 63d754975..7997a15aa 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 @@ -35,10 +35,11 @@ public class BlockFunction implements Function { protected final Platform platform; private final Map data = new HashMap<>(); private final Returnable overwrite; + private final Returnable physics; private final Position position; public BlockFunction(Returnable x, Returnable y, Returnable z, Returnable blockData, - Returnable overwrite, Platform platform, Position position) { + Returnable overwrite, Returnable physics, Platform platform, Position position) { this.x = x; this.y = y; this.z = z; @@ -46,6 +47,7 @@ public class BlockFunction implements Function { this.overwrite = overwrite; this.platform = platform; this.position = position; + this.physics = physics; } @Override @@ -76,7 +78,7 @@ public class BlockFunction implements Function { FastMath.roundToInt(xz.getZ())).mutable().add(arguments.getOrigin()); BlockState current = arguments.getWorld().getBlockState(set); if(overwrite.apply(implementationArguments, scope) || current.isAir()) { - arguments.getWorld().setBlockState(set, rot); + arguments.getWorld().setBlockState(set, rot, physics.apply(implementationArguments, scope)); } } catch(RuntimeException e) { logger.error("Failed to place block at location {}", arguments.getOrigin(), e); @@ -92,8 +94,8 @@ public class BlockFunction implements Function { private final BlockState state; public Constant(Returnable x, Returnable y, Returnable z, StringConstant blockData, - Returnable overwrite, Platform platform, Position position) { - super(x, y, z, blockData, overwrite, platform, position); + Returnable overwrite, Returnable physics, Platform platform, Position position) { + super(x, y, z, blockData, overwrite, physics, platform, position); this.state = platform.getWorldHandle().createBlockState(blockData.getConstant()); }