implement TerraScriptCheckFunctionAddon

This commit is contained in:
dfsek 2021-12-02 18:04:16 -07:00
parent b222129478
commit ad66fa8022
7 changed files with 49 additions and 22 deletions

View File

@ -3,10 +3,10 @@ package com.dfsek.terra.addons.chunkgenerator.config;
import com.dfsek.tectonic.config.ConfigTemplate; import com.dfsek.tectonic.config.ConfigTemplate;
public class NoiseChunkGeneratorPackConfig implements ConfigTemplate { public class WorldSamplerContext implements ConfigTemplate {
private final int elevationBlend; private final int elevationBlend;
public NoiseChunkGeneratorPackConfig(int elevationBlend) { public WorldSamplerContext(int elevationBlend) {
this.elevationBlend = elevationBlend; this.elevationBlend = elevationBlend;
} }
} }

View File

@ -9,11 +9,9 @@ package com.dfsek.terra.addons.terrascript;
import com.dfsek.tectonic.exception.LoadException; import com.dfsek.tectonic.exception.LoadException;
import java.io.InputStream;
import java.util.Map;
import com.dfsek.terra.addons.manifest.api.AddonInitializer; import com.dfsek.terra.addons.manifest.api.AddonInitializer;
import com.dfsek.terra.addons.terrascript.parser.exceptions.ParseException; import com.dfsek.terra.addons.terrascript.parser.exceptions.ParseException;
import com.dfsek.terra.addons.terrascript.parser.lang.functions.FunctionBuilder;
import com.dfsek.terra.addons.terrascript.script.StructureScript; import com.dfsek.terra.addons.terrascript.script.StructureScript;
import com.dfsek.terra.api.Platform; import com.dfsek.terra.api.Platform;
import com.dfsek.terra.api.addon.BaseAddon; import com.dfsek.terra.api.addon.BaseAddon;
@ -25,6 +23,10 @@ import com.dfsek.terra.api.structure.LootTable;
import com.dfsek.terra.api.structure.Structure; import com.dfsek.terra.api.structure.Structure;
import com.dfsek.terra.api.util.StringUtil; import com.dfsek.terra.api.util.StringUtil;
import java.io.InputStream;
import java.lang.reflect.Type;
import java.util.Map;
public class TerraScriptAddon implements AddonInitializer { public class TerraScriptAddon implements AddonInitializer {
@Inject @Inject
@ -47,7 +49,8 @@ public class TerraScriptAddon implements AddonInitializer {
String id = StringUtil.fileName(entry.getKey()); String id = StringUtil.fileName(entry.getKey());
StructureScript structureScript = new StructureScript(entry.getValue(), id, platform, structureRegistry, StructureScript structureScript = new StructureScript(entry.getValue(), id, platform, structureRegistry,
lootRegistry, lootRegistry,
event.getPack().getRegistryFactory().create()); event.getPack().getOrCreateRegistry(
(Type) FunctionBuilder.class));
structureRegistry.register(structureScript.getID(), structureScript); structureRegistry.register(structureScript.getID(), structureScript);
} catch(ParseException e) { } catch(ParseException e) {
throw new LoadException("Failed to load script \"" + entry.getKey() + "\"", e); throw new LoadException("Failed to load script \"" + entry.getKey() + "\"", e);
@ -55,6 +58,7 @@ public class TerraScriptAddon implements AddonInitializer {
} }
}).close(); }).close();
}) })
.priority(2)
.failThrough(); .failThrough();
} }
} }

View File

@ -7,13 +7,12 @@
package com.dfsek.terra.addons.terrascript.script; package com.dfsek.terra.addons.terrascript.script;
import com.dfsek.terra.api.world.ServerWorld;
import com.dfsek.terra.api.world.WritableWorld;
import com.google.common.cache.Cache; import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheBuilder;
import net.jafama.FastMath; import net.jafama.FastMath;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
@ -29,7 +28,6 @@ import com.dfsek.terra.addons.terrascript.script.builders.BinaryNumberFunctionBu
import com.dfsek.terra.addons.terrascript.script.builders.BiomeFunctionBuilder; import com.dfsek.terra.addons.terrascript.script.builders.BiomeFunctionBuilder;
import com.dfsek.terra.addons.terrascript.script.builders.BlockFunctionBuilder; import com.dfsek.terra.addons.terrascript.script.builders.BlockFunctionBuilder;
import com.dfsek.terra.addons.terrascript.script.builders.CheckBlockFunctionBuilder; import com.dfsek.terra.addons.terrascript.script.builders.CheckBlockFunctionBuilder;
import com.dfsek.terra.addons.terrascript.script.builders.CheckFunctionBuilder;
import com.dfsek.terra.addons.terrascript.script.builders.EntityFunctionBuilder; import com.dfsek.terra.addons.terrascript.script.builders.EntityFunctionBuilder;
import com.dfsek.terra.addons.terrascript.script.builders.GetMarkFunctionBuilder; import com.dfsek.terra.addons.terrascript.script.builders.GetMarkFunctionBuilder;
import com.dfsek.terra.addons.terrascript.script.builders.LootFunctionBuilder; import com.dfsek.terra.addons.terrascript.script.builders.LootFunctionBuilder;
@ -53,11 +51,10 @@ import com.dfsek.terra.api.structure.buffer.buffers.DirectBuffer;
import com.dfsek.terra.api.structure.buffer.buffers.StructureBuffer; import com.dfsek.terra.api.structure.buffer.buffers.StructureBuffer;
import com.dfsek.terra.api.util.Rotation; import com.dfsek.terra.api.util.Rotation;
import com.dfsek.terra.api.util.vector.Vector3; import com.dfsek.terra.api.util.vector.Vector3;
import com.dfsek.terra.api.world.ServerWorld;
import com.dfsek.terra.api.world.WritableWorld;
import com.dfsek.terra.api.world.chunk.Chunk; import com.dfsek.terra.api.world.chunk.Chunk;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class StructureScript implements Structure { public class StructureScript implements Structure {
private final Block block; private final Block block;
@ -83,7 +80,6 @@ public class StructureScript implements Structure {
parser parser
.registerFunction("block", new BlockFunctionBuilder(platform)) .registerFunction("block", new BlockFunctionBuilder(platform))
.registerFunction("debugBlock", new BlockFunctionBuilder(platform)) .registerFunction("debugBlock", new BlockFunctionBuilder(platform))
.registerFunction("check", new CheckFunctionBuilder(platform))
.registerFunction("structure", new StructureFunctionBuilder(registry, platform)) .registerFunction("structure", new StructureFunctionBuilder(registry, platform))
.registerFunction("randomInt", new RandomFunctionBuilder()) .registerFunction("randomInt", new RandomFunctionBuilder())
.registerFunction("recursions", new RecursionsFunctionBuilder()) .registerFunction("recursions", new RecursionsFunctionBuilder())

View File

@ -5,7 +5,7 @@
* reference the LICENSE file in this module's root directory. * reference the LICENSE file in this module's root directory.
*/ */
package com.dfsek.terra.addons.terrascript.script.functions; package com.dfsek.terra.addon.terrascript.check;
import com.dfsek.terra.api.world.WritableWorld; import com.dfsek.terra.api.world.WritableWorld;
@ -27,12 +27,10 @@ import com.dfsek.terra.api.world.chunk.generation.util.math.SamplerProvider;
public class CheckFunction implements Function<String> { public class CheckFunction implements Function<String> {
private final Platform platform;
private final Returnable<Number> x, y, z; private final Returnable<Number> x, y, z;
private final Position position; private final Position position;
public CheckFunction(Platform platform, Returnable<Number> x, Returnable<Number> y, Returnable<Number> z, Position position) { public CheckFunction(Returnable<Number> x, Returnable<Number> y, Returnable<Number> z, Position position) {
this.platform = platform;
this.x = x; this.x = x;
this.y = y; this.y = y;
this.z = z; this.z = z;

View File

@ -5,13 +5,12 @@
* reference the LICENSE file in this module's root directory. * reference the LICENSE file in this module's root directory.
*/ */
package com.dfsek.terra.addons.terrascript.script.builders; package com.dfsek.terra.addon.terrascript.check;
import java.util.List; import java.util.List;
import com.dfsek.terra.addons.terrascript.parser.lang.Returnable; import com.dfsek.terra.addons.terrascript.parser.lang.Returnable;
import com.dfsek.terra.addons.terrascript.parser.lang.functions.FunctionBuilder; import com.dfsek.terra.addons.terrascript.parser.lang.functions.FunctionBuilder;
import com.dfsek.terra.addons.terrascript.script.functions.CheckFunction;
import com.dfsek.terra.addons.terrascript.tokenizer.Position; import com.dfsek.terra.addons.terrascript.tokenizer.Position;
import com.dfsek.terra.api.Platform; import com.dfsek.terra.api.Platform;
@ -26,7 +25,7 @@ public class CheckFunctionBuilder implements FunctionBuilder<CheckFunction> {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@Override @Override
public CheckFunction build(List<Returnable<?>> argumentList, Position position) { public CheckFunction build(List<Returnable<?>> argumentList, Position position) {
return new CheckFunction(platform, (Returnable<Number>) argumentList.get(0), (Returnable<Number>) argumentList.get(1), return new CheckFunction((Returnable<Number>) argumentList.get(0), (Returnable<Number>) argumentList.get(1),
(Returnable<Number>) argumentList.get(2), position); (Returnable<Number>) argumentList.get(2), position);
} }

View File

@ -0,0 +1,30 @@
package com.dfsek.terra.addon.terrascript.check;
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
import com.dfsek.terra.addons.terrascript.parser.lang.functions.FunctionBuilder;
import com.dfsek.terra.api.Platform;
import com.dfsek.terra.api.addon.BaseAddon;
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
import com.dfsek.terra.api.inject.annotations.Inject;
public class TerraScriptCheckFunctionAddon implements AddonInitializer {
@Inject
private Platform platform;
@Inject
private BaseAddon addon;
@Override
public void initialize() {
platform.getEventManager()
.getHandler(FunctionalEventHandler.class)
.register(addon, ConfigPackPreLoadEvent.class)
.priority(1)
.then(event -> {
event.getPack().getOrCreateRegistry(FunctionBuilder.class).register("check", new CheckFunctionBuilder(platform));
})
.failThrough();
}
}

View File

@ -4,7 +4,7 @@ contributors:
id: structure-terrascript-loader id: structure-terrascript-loader
version: @VERSION@ version: @VERSION@
entrypoints: entrypoints:
- "com.dfsek.terra.addons.terrascript.TerraScriptAddon" - "com.dfsek.terra.addon.terrascript.check.TerraScriptCheckFunctionAddon"
website: website:
issues: https://github.com/PolyhedralDev/Terra-structure-terrascript-loader/issues issues: https://github.com/PolyhedralDev/Terra-structure-terrascript-loader/issues
source: https://github.com/PolyhedralDev/Terra-structure-terrascript-loader source: https://github.com/PolyhedralDev/Terra-structure-terrascript-loader