diff --git a/common/src/main/java/com/dfsek/terra/api/structures/parser/lang/functions/def/DefinedFunction.java b/common/src/main/java/com/dfsek/terra/api/structures/parser/lang/functions/def/DefinedFunction.java index a34084104..923a399ad 100644 --- a/common/src/main/java/com/dfsek/terra/api/structures/parser/lang/functions/def/DefinedFunction.java +++ b/common/src/main/java/com/dfsek/terra/api/structures/parser/lang/functions/def/DefinedFunction.java @@ -1,6 +1,5 @@ package com.dfsek.terra.api.structures.parser.lang.functions.def; -import com.dfsek.terra.api.structures.parser.lang.Block; import com.dfsek.terra.api.structures.parser.lang.functions.Function; import com.dfsek.terra.api.structures.structure.Rotation; import com.dfsek.terra.api.structures.structure.buffer.Buffer; @@ -9,12 +8,14 @@ import com.dfsek.terra.api.structures.tokenizer.Position; import java.util.Random; public abstract class DefinedFunction implements Function { - private final Block block; + private final FunctionBlock block; private final String name; + private final Position position; - protected DefinedFunction(Block block, String name) { + protected DefinedFunction(FunctionBlock block, String name, Position position) { this.block = block; this.name = name; + this.position = position; } @Override @@ -24,11 +25,11 @@ public abstract class DefinedFunction implements Function { @Override public T apply(Buffer buffer, Rotation rotation, Random random, int recursions) { - return null; + return block.apply(buffer, rotation, random, recursions); } @Override public Position getPosition() { - return null; + return position; } } diff --git a/common/src/main/java/com/dfsek/terra/api/structures/parser/lang/functions/def/FunctionBlock.java b/common/src/main/java/com/dfsek/terra/api/structures/parser/lang/functions/def/FunctionBlock.java index e374d5d71..f0a55ab2f 100644 --- a/common/src/main/java/com/dfsek/terra/api/structures/parser/lang/functions/def/FunctionBlock.java +++ b/common/src/main/java/com/dfsek/terra/api/structures/parser/lang/functions/def/FunctionBlock.java @@ -9,7 +9,7 @@ import com.dfsek.terra.api.structures.tokenizer.Position; import java.util.List; import java.util.Random; -public class FunctionBlock implements Item> { +public class FunctionBlock implements Item { private final List> items; private final Position position; private final T defaultVal; @@ -26,15 +26,15 @@ public class FunctionBlock implements Item> { @SuppressWarnings("unchecked") @Override - public synchronized Block.ReturnInfo apply(Buffer buffer, Rotation rotation, Random random, int recursions) { + public synchronized T apply(Buffer buffer, Rotation rotation, Random random, int recursions) { for(Item item : items) { Object result = item.apply(buffer, rotation, random, recursions); if(result instanceof Block.ReturnInfo) { Block.ReturnInfo level = (Block.ReturnInfo) result; - if(!level.getLevel().equals(Block.ReturnLevel.NONE)) return level; + if(level.getLevel().equals(Block.ReturnLevel.RETURN)) return level.getData(); } } - return new Block.ReturnInfo<>(Block.ReturnLevel.NONE, defaultVal); + return defaultVal; } @Override diff --git a/common/src/main/java/com/dfsek/terra/config/base/ConfigPack.java b/common/src/main/java/com/dfsek/terra/config/base/ConfigPack.java index 3fd7e09b1..2a2f4247e 100644 --- a/common/src/main/java/com/dfsek/terra/config/base/ConfigPack.java +++ b/common/src/main/java/com/dfsek/terra/config/base/ConfigPack.java @@ -91,10 +91,12 @@ public class ConfigPack implements LoaderRegistrar { private final ConfigLoader selfLoader = new ConfigLoader(); private final Scope varScope = new Scope(); + private final CheckCache checkCache; public ConfigPack(File folder, TerraPlugin main) throws ConfigException { long l = System.nanoTime(); + this.checkCache = new CheckCache(main); floraRegistry = new FloraRegistry(main); paletteRegistry = new PaletteRegistry(main); treeRegistry = new TreeRegistry(main); @@ -116,6 +118,7 @@ public class ConfigPack implements LoaderRegistrar { public ConfigPack(ZipFile file, TerraPlugin main) throws ConfigException { long l = System.nanoTime(); + this.checkCache = new CheckCache(main); floraRegistry = new FloraRegistry(main); paletteRegistry = new PaletteRegistry(main); treeRegistry = new TreeRegistry(main); @@ -149,7 +152,6 @@ public class ConfigPack implements LoaderRegistrar { abstractConfigLoader .registerLoader(LootTable.class, new LootTableLoader(loader, main)); // These loaders need access to the Loader instance to get files. - CheckCache checkCache = new CheckCache(main); loader.open("structures/data", ".tesf").then(streams -> streams.forEach(stream -> { StructureScript structureScript = new StructureScript(stream, main, scriptRegistry, checkCache); scriptRegistry.add(structureScript.getId(), structureScript); @@ -258,4 +260,8 @@ public class ConfigPack implements LoaderRegistrar { public BiomeRegistry getBiomeRegistry() { return biomeRegistry; } + + public CheckCache getCheckCache() { + return checkCache; + } } diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/command/command/structure/SpawnCommand.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/command/command/structure/SpawnCommand.java index bf8462ae7..f604a5f5b 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/command/command/structure/SpawnCommand.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/command/command/structure/SpawnCommand.java @@ -1,5 +1,12 @@ package com.dfsek.terra.bukkit.command.command.structure; +import com.dfsek.terra.api.structures.parser.lang.constants.NumericConstant; +import com.dfsek.terra.api.structures.script.functions.CheckFunction; +import com.dfsek.terra.api.structures.structure.Rotation; +import com.dfsek.terra.api.structures.structure.buffer.StructureBuffer; +import com.dfsek.terra.api.structures.tokenizer.Position; +import com.dfsek.terra.api.util.FastRandom; +import com.dfsek.terra.bukkit.BukkitWorld; import com.dfsek.terra.bukkit.command.DebugCommand; import com.dfsek.terra.bukkit.command.WorldCommand; import org.bukkit.Location; @@ -23,14 +30,13 @@ public class SpawnCommand extends WorldCommand implements DebugCommand { int x = p.getBlockX(); int y = p.getBlockY(); int z = p.getBlockZ(); - /* - boolean air = StructureSpawnRequirement.AIR.getInstance(world, (TerraBukkitPlugin) getMain()).matches(x, y, z); - boolean ground = StructureSpawnRequirement.LAND.getInstance(world, (TerraBukkitPlugin) getMain()).matches(x, y, z); - boolean sea = StructureSpawnRequirement.OCEAN.getInstance(world, (TerraBukkitPlugin) getMain()).matches(x, y, z); + Position dummy = new Position(0, 0); + com.dfsek.terra.api.platform.world.World w = new BukkitWorld(world); + String check = new CheckFunction(getMain(), new NumericConstant(0, dummy), new NumericConstant(0, dummy), new NumericConstant(0, dummy), getMain().getWorld(w).getConfig().getCheckCache(), dummy).apply(new StructureBuffer( + new com.dfsek.terra.api.math.vector.Location(w, x, y, z) + ), Rotation.NONE, new FastRandom(), 0); - sender.sendMessage("AIR: " + air + "\nLAND: " + ground + "\nOCEAN: " + sea); - - */ + sender.sendMessage("Found: " + check); return true; }