mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-08-30 13:50:46 +00:00
implement physics on the api side
we will see if platform changes are needed
This commit is contained in:
+5
-3
@@ -30,12 +30,14 @@ public class BlockFunctionBuilder implements FunctionBuilder<BlockFunction> {
|
|||||||
@Override
|
@Override
|
||||||
public BlockFunction build(List<Returnable<?>> argumentList, Position position) {
|
public BlockFunction build(List<Returnable<?>> argumentList, Position position) {
|
||||||
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> overwrite = new BooleanConstant(true, position);
|
||||||
if(argumentList.size() == 5) booleanReturnable = (Returnable<Boolean>) argumentList.get(4);
|
if(argumentList.size() >= 5) overwrite = (Returnable<Boolean>) argumentList.get(4);
|
||||||
|
Returnable<Boolean> physics = new BooleanConstant(true, position);
|
||||||
|
if(argumentList.size() == 6) physics = (Returnable<Boolean>) argumentList.get(5);
|
||||||
if(argumentList.get(3) instanceof StringConstant) {
|
if(argumentList.get(3) instanceof StringConstant) {
|
||||||
return new BlockFunction.Constant((Returnable<Number>) argumentList.get(0), (Returnable<Number>) argumentList.get(1),
|
return new BlockFunction.Constant((Returnable<Number>) argumentList.get(0), (Returnable<Number>) argumentList.get(1),
|
||||||
(Returnable<Number>) argumentList.get(2), (StringConstant) argumentList.get(3),
|
(Returnable<Number>) argumentList.get(2), (StringConstant) argumentList.get(3),
|
||||||
booleanReturnable, platform, position);
|
overwrite, physics, platform, position);
|
||||||
}
|
}
|
||||||
return new BlockFunction((Returnable<Number>) argumentList.get(0), (Returnable<Number>) argumentList.get(1),
|
return new BlockFunction((Returnable<Number>) argumentList.get(0), (Returnable<Number>) argumentList.get(1),
|
||||||
(Returnable<Number>) argumentList.get(2), (Returnable<String>) argumentList.get(3), booleanReturnable,
|
(Returnable<Number>) argumentList.get(2), (Returnable<String>) argumentList.get(3), booleanReturnable,
|
||||||
|
|||||||
+6
-4
@@ -35,10 +35,11 @@ public class BlockFunction implements Function<Void> {
|
|||||||
protected final Platform platform;
|
protected final Platform platform;
|
||||||
private final Map<String, BlockState> data = new HashMap<>();
|
private final Map<String, BlockState> data = new HashMap<>();
|
||||||
private final Returnable<Boolean> overwrite;
|
private final Returnable<Boolean> overwrite;
|
||||||
|
private final Returnable<Boolean> physics;
|
||||||
private final Position position;
|
private final Position position;
|
||||||
|
|
||||||
public BlockFunction(Returnable<Number> x, Returnable<Number> y, Returnable<Number> z, Returnable<String> blockData,
|
public BlockFunction(Returnable<Number> x, Returnable<Number> y, Returnable<Number> z, Returnable<String> blockData,
|
||||||
Returnable<Boolean> overwrite, Platform platform, Position position) {
|
Returnable<Boolean> overwrite, Returnable<Boolean> physics, Platform platform, Position position) {
|
||||||
this.x = x;
|
this.x = x;
|
||||||
this.y = y;
|
this.y = y;
|
||||||
this.z = z;
|
this.z = z;
|
||||||
@@ -46,6 +47,7 @@ public class BlockFunction implements Function<Void> {
|
|||||||
this.overwrite = overwrite;
|
this.overwrite = overwrite;
|
||||||
this.platform = platform;
|
this.platform = platform;
|
||||||
this.position = position;
|
this.position = position;
|
||||||
|
this.physics = physics;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -76,7 +78,7 @@ public class BlockFunction implements Function<Void> {
|
|||||||
FastMath.roundToInt(xz.getZ())).mutable().add(arguments.getOrigin());
|
FastMath.roundToInt(xz.getZ())).mutable().add(arguments.getOrigin());
|
||||||
BlockState current = arguments.getWorld().getBlockState(set);
|
BlockState current = arguments.getWorld().getBlockState(set);
|
||||||
if(overwrite.apply(implementationArguments, scope) || current.isAir()) {
|
if(overwrite.apply(implementationArguments, scope) || current.isAir()) {
|
||||||
arguments.getWorld().setBlockState(set, rot);
|
arguments.getWorld().setBlockState(set, rot, physics.apply(implementationArguments, scope));
|
||||||
}
|
}
|
||||||
} catch(RuntimeException e) {
|
} catch(RuntimeException e) {
|
||||||
logger.error("Failed to place block at location {}", arguments.getOrigin(), e);
|
logger.error("Failed to place block at location {}", arguments.getOrigin(), e);
|
||||||
@@ -92,8 +94,8 @@ public class BlockFunction implements Function<Void> {
|
|||||||
private final BlockState state;
|
private final BlockState state;
|
||||||
|
|
||||||
public Constant(Returnable<Number> x, Returnable<Number> y, Returnable<Number> z, StringConstant blockData,
|
public Constant(Returnable<Number> x, Returnable<Number> y, Returnable<Number> z, StringConstant blockData,
|
||||||
Returnable<Boolean> overwrite, Platform platform, Position position) {
|
Returnable<Boolean> overwrite, Returnable<Boolean> physics, Platform platform, Position position) {
|
||||||
super(x, y, z, blockData, overwrite, platform, position);
|
super(x, y, z, blockData, overwrite, physics, platform, position);
|
||||||
this.state = platform.getWorldHandle().createBlockState(blockData.getConstant());
|
this.state = platform.getWorldHandle().createBlockState(blockData.getConstant());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user