diff --git a/common/src/main/java/com/dfsek/terra/api/structures/script/StructureScript.java b/common/src/main/java/com/dfsek/terra/api/structures/script/StructureScript.java index 055e2a087..2498a125e 100644 --- a/common/src/main/java/com/dfsek/terra/api/structures/script/StructureScript.java +++ b/common/src/main/java/com/dfsek/terra/api/structures/script/StructureScript.java @@ -20,9 +20,11 @@ import com.dfsek.terra.api.structures.script.builders.RandomFunctionBuilder; import com.dfsek.terra.api.structures.script.builders.RecursionsFunctionBuilder; import com.dfsek.terra.api.structures.script.builders.StructureFunctionBuilder; import com.dfsek.terra.api.structures.script.builders.UnaryNumberFunctionBuilder; +import com.dfsek.terra.api.structures.script.builders.UnaryStringFunctionBuilder; import com.dfsek.terra.api.structures.structure.Rotation; import com.dfsek.terra.api.structures.structure.buffer.Buffer; import com.dfsek.terra.api.structures.structure.buffer.StructureBuffer; +import com.dfsek.terra.debug.Debug; import com.dfsek.terra.generation.math.SamplerCache; import com.dfsek.terra.registry.LootRegistry; import com.dfsek.terra.registry.ScriptRegistry; @@ -38,6 +40,7 @@ import java.util.Random; public class StructureScript { private final Block block; private final String id; + String tempID; private final LinkedHashMap cache; public StructureScript(InputStream inputStream, TerraPlugin main, ScriptRegistry registry, LootRegistry lootRegistry, SamplerCache cache) throws ParseException { @@ -47,6 +50,7 @@ public class StructureScript { } catch(IOException e) { throw new RuntimeException(e); } + parser.registerFunction("block", new BlockFunctionBuilder(main)) .registerFunction("check", new CheckFunctionBuilder(main, cache)) .registerFunction("structure", new StructureFunctionBuilder(registry, main)) @@ -59,6 +63,7 @@ public class StructureScript { .registerFunction("entity", new EntityFunctionBuilder(main)) .registerFunction("getBiome", new BiomeFunctionBuilder(main)) .registerFunction("getBlock", new CheckBlockFunctionBuilder()) + .registerFunction("print", new UnaryStringFunctionBuilder(string -> Debug.info("[" + tempID + "] " + string))) .registerFunction("abs", new UnaryNumberFunctionBuilder(number -> FastMath.abs(number.doubleValue()))) .registerFunction("pow", new BinaryNumberFunctionBuilder((number, number2) -> FastMath.pow(number.doubleValue(), number2.doubleValue()))) .registerFunction("sqrt", new UnaryNumberFunctionBuilder(number -> FastMath.sqrt(number.doubleValue()))) @@ -71,6 +76,7 @@ public class StructureScript { block = parser.parse(); this.id = parser.getID(); + tempID = id; this.cache = new LinkedHashMap() { @Override protected boolean removeEldestEntry(Map.Entry eldest) { @@ -106,7 +112,8 @@ public class StructureScript { public boolean test(Location location, Random random, Rotation rotation) { StructureBuffer buffer = new StructureBuffer(location); - return !block.apply(new TerraImplementationArguments(buffer, rotation, random, 0)).getLevel().equals(Block.ReturnLevel.FAIL); + block.apply(new TerraImplementationArguments(buffer, rotation, random, 0)); + return buffer.succeeded(); } public boolean executeInBuffer(Buffer buffer, Random random, Rotation rotation, int recursions) { diff --git a/common/src/main/java/com/dfsek/terra/api/structures/script/builders/UnaryStringFunctionBuilder.java b/common/src/main/java/com/dfsek/terra/api/structures/script/builders/UnaryStringFunctionBuilder.java new file mode 100644 index 000000000..f3436899a --- /dev/null +++ b/common/src/main/java/com/dfsek/terra/api/structures/script/builders/UnaryStringFunctionBuilder.java @@ -0,0 +1,51 @@ +package com.dfsek.terra.api.structures.script.builders; + +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.parser.lang.functions.FunctionBuilder; +import com.dfsek.terra.api.structures.tokenizer.Position; + +import java.util.List; + +public class UnaryStringFunctionBuilder implements FunctionBuilder> { + + private final java.util.function.Consumer function; + + public UnaryStringFunctionBuilder(java.util.function.Consumer function) { + this.function = function; + } + + @Override + public Function build(List> argumentList, Position position) { + return new Function() { + @Override + public ReturnType returnType() { + return ReturnType.VOID; + } + + @SuppressWarnings("unchecked") + @Override + public Void apply(ImplementationArguments implementationArguments) { + function.accept(((Returnable) argumentList.get(0)).apply(implementationArguments)); + return null; + } + + @Override + public Position getPosition() { + return position; + } + }; + } + + @Override + public int argNumber() { + return 1; + } + + @Override + public Returnable.ReturnType getArgument(int position) { + if(position == 0) return Returnable.ReturnType.NUMBER; + return null; + } +} diff --git a/platforms/bukkit/src/main/resources/config.yml b/platforms/bukkit/src/main/resources/config.yml index fc5ac9ad3..9ad3c8b47 100644 --- a/platforms/bukkit/src/main/resources/config.yml +++ b/platforms/bukkit/src/main/resources/config.yml @@ -5,7 +5,7 @@ dump-default: true biome-search-resolution: 4 cache: carver: 512 - structure: 128 + structure: 32 sampler: 512 master-disable: caves: false \ No newline at end of file