mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-06-17 14:21:08 +00:00
Add CheckBlockFunction, which mustn't be discussed without mentioning that it shall be covered with disclaimers.
This commit is contained in:
@@ -8,4 +8,6 @@ public interface BlockData extends Cloneable, Handle {
|
|||||||
boolean matches(MaterialData materialData);
|
boolean matches(MaterialData materialData);
|
||||||
|
|
||||||
BlockData clone();
|
BlockData clone();
|
||||||
|
|
||||||
|
String getAsString();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import com.dfsek.terra.api.structures.parser.lang.Block;
|
|||||||
import com.dfsek.terra.api.structures.script.builders.BinaryNumberFunctionBuilder;
|
import com.dfsek.terra.api.structures.script.builders.BinaryNumberFunctionBuilder;
|
||||||
import com.dfsek.terra.api.structures.script.builders.BiomeFunctionBuilder;
|
import com.dfsek.terra.api.structures.script.builders.BiomeFunctionBuilder;
|
||||||
import com.dfsek.terra.api.structures.script.builders.BlockFunctionBuilder;
|
import com.dfsek.terra.api.structures.script.builders.BlockFunctionBuilder;
|
||||||
|
import com.dfsek.terra.api.structures.script.builders.CheckBlockFunctionBuilder;
|
||||||
import com.dfsek.terra.api.structures.script.builders.CheckFunctionBuilder;
|
import com.dfsek.terra.api.structures.script.builders.CheckFunctionBuilder;
|
||||||
import com.dfsek.terra.api.structures.script.builders.EntityFunctionBuilder;
|
import com.dfsek.terra.api.structures.script.builders.EntityFunctionBuilder;
|
||||||
import com.dfsek.terra.api.structures.script.builders.GetMarkFunctionBuilder;
|
import com.dfsek.terra.api.structures.script.builders.GetMarkFunctionBuilder;
|
||||||
@@ -56,7 +57,8 @@ public class StructureScript {
|
|||||||
.registerFunction("pull", new PullFunctionBuilder(main))
|
.registerFunction("pull", new PullFunctionBuilder(main))
|
||||||
.registerFunction("loot", new LootFunctionBuilder(main, lootRegistry))
|
.registerFunction("loot", new LootFunctionBuilder(main, lootRegistry))
|
||||||
.registerFunction("entity", new EntityFunctionBuilder(main))
|
.registerFunction("entity", new EntityFunctionBuilder(main))
|
||||||
.registerFunction("biome", new BiomeFunctionBuilder(main))
|
.registerFunction("getBiome", new BiomeFunctionBuilder(main))
|
||||||
|
.registerFunction("getBlock", new CheckBlockFunctionBuilder())
|
||||||
.registerFunction("abs", new UnaryNumberFunctionBuilder(number -> FastMath.abs(number.doubleValue())))
|
.registerFunction("abs", new UnaryNumberFunctionBuilder(number -> FastMath.abs(number.doubleValue())))
|
||||||
.registerFunction("pow", new BinaryNumberFunctionBuilder((number, number2) -> FastMath.pow(number.doubleValue(), number2.doubleValue())))
|
.registerFunction("pow", new BinaryNumberFunctionBuilder((number, number2) -> FastMath.pow(number.doubleValue(), number2.doubleValue())))
|
||||||
.registerFunction("sqrt", new UnaryNumberFunctionBuilder(number -> FastMath.sqrt(number.doubleValue())))
|
.registerFunction("sqrt", new UnaryNumberFunctionBuilder(number -> FastMath.sqrt(number.doubleValue())))
|
||||||
|
|||||||
+33
@@ -0,0 +1,33 @@
|
|||||||
|
package com.dfsek.terra.api.structures.script.builders;
|
||||||
|
|
||||||
|
import com.dfsek.terra.api.structures.parser.lang.Returnable;
|
||||||
|
import com.dfsek.terra.api.structures.parser.lang.functions.FunctionBuilder;
|
||||||
|
import com.dfsek.terra.api.structures.script.functions.CheckBlockFunction;
|
||||||
|
import com.dfsek.terra.api.structures.tokenizer.Position;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class CheckBlockFunctionBuilder implements FunctionBuilder<CheckBlockFunction> {
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
@Override
|
||||||
|
public CheckBlockFunction build(List<Returnable<?>> argumentList, Position position) {
|
||||||
|
return new CheckBlockFunction((Returnable<Number>) argumentList.get(0), (Returnable<Number>) argumentList.get(1), (Returnable<Number>) argumentList.get(2), position);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int argNumber() {
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Returnable.ReturnType getArgument(int position) {
|
||||||
|
switch(position) {
|
||||||
|
case 0:
|
||||||
|
case 1:
|
||||||
|
case 2:
|
||||||
|
return Returnable.ReturnType.NUMBER;
|
||||||
|
default:
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+48
@@ -0,0 +1,48 @@
|
|||||||
|
package com.dfsek.terra.api.structures.script.functions;
|
||||||
|
|
||||||
|
import com.dfsek.terra.api.math.vector.Vector2;
|
||||||
|
import com.dfsek.terra.api.math.vector.Vector3;
|
||||||
|
import com.dfsek.terra.api.structures.parser.lang.ImplementationArguments;
|
||||||
|
import com.dfsek.terra.api.structures.parser.lang.Returnable;
|
||||||
|
import com.dfsek.terra.api.structures.parser.lang.functions.Function;
|
||||||
|
import com.dfsek.terra.api.structures.script.TerraImplementationArguments;
|
||||||
|
import com.dfsek.terra.api.structures.structure.RotationUtil;
|
||||||
|
import com.dfsek.terra.api.structures.tokenizer.Position;
|
||||||
|
import net.jafama.FastMath;
|
||||||
|
|
||||||
|
public class CheckBlockFunction implements Function<String> {
|
||||||
|
private final Returnable<Number> x, y, z;
|
||||||
|
private final Position position;
|
||||||
|
|
||||||
|
public CheckBlockFunction(Returnable<Number> x, Returnable<Number> y, Returnable<Number> z, Position position) {
|
||||||
|
this.x = x;
|
||||||
|
this.y = y;
|
||||||
|
this.z = z;
|
||||||
|
this.position = position;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String apply(ImplementationArguments implementationArguments) {
|
||||||
|
TerraImplementationArguments arguments = (TerraImplementationArguments) implementationArguments;
|
||||||
|
|
||||||
|
Vector2 xz = new Vector2(x.apply(implementationArguments).doubleValue(), z.apply(implementationArguments).doubleValue());
|
||||||
|
|
||||||
|
RotationUtil.rotateVector(xz, arguments.getRotation());
|
||||||
|
|
||||||
|
String data = arguments.getBuffer().getOrigin().clone().add(new Vector3(FastMath.roundToInt(xz.getX()), y.apply(implementationArguments).intValue(), FastMath.roundToInt(xz.getZ()))).getBlock().getBlockData().getAsString();
|
||||||
|
if(data.contains("[")) return data.substring(0, data.indexOf('[')); // Strip properties
|
||||||
|
else return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Position getPosition() {
|
||||||
|
return position;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ReturnType returnType() {
|
||||||
|
return ReturnType.STRING;
|
||||||
|
}
|
||||||
|
}
|
||||||
+5
@@ -68,4 +68,9 @@ public class BukkitBlockData implements BlockData {
|
|||||||
throw new Error(e);
|
throw new Error(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getAsString() {
|
||||||
|
return delegate.getAsString(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,6 +30,11 @@ public class FabricBlockData implements BlockData {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getAsString() {
|
||||||
|
return delegate.toString();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BlockState getHandle() {
|
public BlockState getHandle() {
|
||||||
return delegate;
|
return delegate;
|
||||||
|
|||||||
Reference in New Issue
Block a user