From 41e6b7f243c87e98d2203fcacd02816f0de1f849 Mon Sep 17 00:00:00 2001 From: dfsek Date: Sun, 17 Oct 2021 15:05:52 -0700 Subject: [PATCH 1/9] Initial commit --- .../addons/config-locators/build.gradle.kts | 2 + .../addons/feature/locator/LocatorAddon.java | 76 +++++++++++++++++++ .../locator/config/AndLocatorTemplate.java | 32 ++++++++ .../config/Noise3DLocatorTemplate.java | 20 +++++ .../locator/config/NoiseLocatorTemplate.java | 22 ++++++ .../locator/config/OrLocatorTemplate.java | 32 ++++++++ .../config/PatternLocatorTemplate.java | 24 ++++++ .../locator/config/RandomLocatorTemplate.java | 23 ++++++ .../config/SurfaceLocatorTemplate.java | 27 +++++++ .../pattern/AirMatchPatternTemplate.java | 22 ++++++ .../config/pattern/AndPatternTemplate.java | 32 ++++++++ .../pattern/BlockSetMatchPatternTemplate.java | 24 ++++++ .../config/pattern/NotPatternTemplate.java | 18 +++++ .../config/pattern/OrPatternTemplate.java | 32 ++++++++ .../SingleBlockMatchPatternTemplate.java | 25 ++++++ .../pattern/SolidMatchPatternTemplate.java | 19 +++++ .../locator/locators/Noise3DLocator.java | 27 +++++++ .../locator/locators/NoiseLocator.java | 33 ++++++++ .../locator/locators/PatternLocator.java | 29 +++++++ .../locator/locators/RandomLocator.java | 38 ++++++++++ .../locator/locators/SurfaceLocator.java | 32 ++++++++ .../locator/patterns/MatchPattern.java | 26 +++++++ .../feature/locator/patterns/Pattern.java | 20 +++++ 23 files changed, 635 insertions(+) create mode 100644 common/addons/config-locators/build.gradle.kts create mode 100644 common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/LocatorAddon.java create mode 100644 common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/AndLocatorTemplate.java create mode 100644 common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/Noise3DLocatorTemplate.java create mode 100644 common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/NoiseLocatorTemplate.java create mode 100644 common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/OrLocatorTemplate.java create mode 100644 common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/PatternLocatorTemplate.java create mode 100644 common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/RandomLocatorTemplate.java create mode 100644 common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/SurfaceLocatorTemplate.java create mode 100644 common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/AirMatchPatternTemplate.java create mode 100644 common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/AndPatternTemplate.java create mode 100644 common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/BlockSetMatchPatternTemplate.java create mode 100644 common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/NotPatternTemplate.java create mode 100644 common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/OrPatternTemplate.java create mode 100644 common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/SingleBlockMatchPatternTemplate.java create mode 100644 common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/SolidMatchPatternTemplate.java create mode 100644 common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/Noise3DLocator.java create mode 100644 common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/NoiseLocator.java create mode 100644 common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/PatternLocator.java create mode 100644 common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/RandomLocator.java create mode 100644 common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/SurfaceLocator.java create mode 100644 common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/patterns/MatchPattern.java create mode 100644 common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/patterns/Pattern.java diff --git a/common/addons/config-locators/build.gradle.kts b/common/addons/config-locators/build.gradle.kts new file mode 100644 index 000000000..7d82dc72f --- /dev/null +++ b/common/addons/config-locators/build.gradle.kts @@ -0,0 +1,2 @@ +dependencies { +} diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/LocatorAddon.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/LocatorAddon.java new file mode 100644 index 000000000..bffc6a2d5 --- /dev/null +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/LocatorAddon.java @@ -0,0 +1,76 @@ +package com.dfsek.terra.addons.feature.locator; + +import com.dfsek.tectonic.loading.object.ObjectTemplate; + +import java.util.function.Supplier; + +import com.dfsek.terra.addons.feature.locator.config.AndLocatorTemplate; +import com.dfsek.terra.addons.feature.locator.config.Noise3DLocatorTemplate; +import com.dfsek.terra.addons.feature.locator.config.NoiseLocatorTemplate; +import com.dfsek.terra.addons.feature.locator.config.OrLocatorTemplate; +import com.dfsek.terra.addons.feature.locator.config.PatternLocatorTemplate; +import com.dfsek.terra.addons.feature.locator.config.RandomLocatorTemplate; +import com.dfsek.terra.addons.feature.locator.config.SurfaceLocatorTemplate; +import com.dfsek.terra.addons.feature.locator.config.pattern.AirMatchPatternTemplate; +import com.dfsek.terra.addons.feature.locator.config.pattern.AndPatternTemplate; +import com.dfsek.terra.addons.feature.locator.config.pattern.BlockSetMatchPatternTemplate; +import com.dfsek.terra.addons.feature.locator.config.pattern.NotPatternTemplate; +import com.dfsek.terra.addons.feature.locator.config.pattern.OrPatternTemplate; +import com.dfsek.terra.addons.feature.locator.config.pattern.SingleBlockMatchPatternTemplate; +import com.dfsek.terra.addons.feature.locator.config.pattern.SolidMatchPatternTemplate; +import com.dfsek.terra.addons.feature.locator.patterns.Pattern; +import com.dfsek.terra.api.Platform; +import com.dfsek.terra.api.addon.TerraAddon; +import com.dfsek.terra.api.addon.annotations.Addon; +import com.dfsek.terra.api.addon.annotations.Author; +import com.dfsek.terra.api.addon.annotations.Version; +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; +import com.dfsek.terra.api.registry.CheckedRegistry; +import com.dfsek.terra.api.structure.feature.Locator; +import com.dfsek.terra.api.util.reflection.TypeKey; + + +@Addon("config-locators") +@Version("1.0.0") +@Author("Terra") +public class LocatorAddon extends TerraAddon { + + public static final TypeKey>> LOCATOR_TOKEN = new TypeKey<>() { + }; + public static final TypeKey>> PATTERN_TOKEN = new TypeKey<>() { + }; + @Inject + private Platform platform; + + @Override + public void initialize() { + platform.getEventManager() + .getHandler(FunctionalEventHandler.class) + .register(this, ConfigPackPreLoadEvent.class) + .then(event -> { + CheckedRegistry>> locatorRegistry = event.getPack().getOrCreateRegistry(LOCATOR_TOKEN); + locatorRegistry.register("SURFACE", () -> new SurfaceLocatorTemplate(platform)); + locatorRegistry.register("RANDOM", RandomLocatorTemplate::new); + locatorRegistry.register("PATTERN", PatternLocatorTemplate::new); + locatorRegistry.register("NOISE", NoiseLocatorTemplate::new); + locatorRegistry.register("NOISE_3D", Noise3DLocatorTemplate::new); + + locatorRegistry.register("AND", AndLocatorTemplate::new); + locatorRegistry.register("OR", OrLocatorTemplate::new); + }) + .then(event -> { + CheckedRegistry>> patternRegistry = event.getPack().getOrCreateRegistry(PATTERN_TOKEN); + patternRegistry.register("MATCH_AIR", AirMatchPatternTemplate::new); + patternRegistry.register("MATCH_SOLID", SolidMatchPatternTemplate::new); + patternRegistry.register("MATCH", SingleBlockMatchPatternTemplate::new); + patternRegistry.register("MATCH_SET", BlockSetMatchPatternTemplate::new); + + patternRegistry.register("AND", AndPatternTemplate::new); + patternRegistry.register("OR", OrPatternTemplate::new); + patternRegistry.register("NOT", NotPatternTemplate::new); + }) + .failThrough(); + } +} diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/AndLocatorTemplate.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/AndLocatorTemplate.java new file mode 100644 index 000000000..404c38a8a --- /dev/null +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/AndLocatorTemplate.java @@ -0,0 +1,32 @@ +package com.dfsek.terra.addons.feature.locator.config; + +import com.dfsek.tectonic.annotations.Value; +import com.dfsek.tectonic.config.ValidatedConfigTemplate; +import com.dfsek.tectonic.exception.ValidationException; +import com.dfsek.tectonic.loading.object.ObjectTemplate; + +import java.util.List; + +import com.dfsek.terra.api.config.meta.Meta; +import com.dfsek.terra.api.structure.feature.Locator; + + +public class AndLocatorTemplate implements ObjectTemplate, ValidatedConfigTemplate { + @Value("locators") + private @Meta List<@Meta Locator> locators; + + @Override + public Locator get() { + Locator current = locators.remove(0); + while(!locators.isEmpty()) { + current = current.and(locators.remove(0)); + } + return current; + } + + @Override + public boolean validate() throws ValidationException { + if(locators.isEmpty()) throw new ValidationException("AND Pattern must specify at least 1 pattern."); + return true; + } +} diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/Noise3DLocatorTemplate.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/Noise3DLocatorTemplate.java new file mode 100644 index 000000000..2a61e39dd --- /dev/null +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/Noise3DLocatorTemplate.java @@ -0,0 +1,20 @@ +package com.dfsek.terra.addons.feature.locator.config; + +import com.dfsek.tectonic.annotations.Value; +import com.dfsek.tectonic.loading.object.ObjectTemplate; + +import com.dfsek.terra.addons.feature.locator.locators.Noise3DLocator; +import com.dfsek.terra.api.config.meta.Meta; +import com.dfsek.terra.api.noise.NoiseSampler; +import com.dfsek.terra.api.structure.feature.Locator; + + +public class Noise3DLocatorTemplate implements ObjectTemplate { + @Value("sampler") + private @Meta NoiseSampler sampler; + + @Override + public Locator get() { + return new Noise3DLocator(sampler); + } +} diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/NoiseLocatorTemplate.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/NoiseLocatorTemplate.java new file mode 100644 index 000000000..ca0f33137 --- /dev/null +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/NoiseLocatorTemplate.java @@ -0,0 +1,22 @@ +package com.dfsek.terra.addons.feature.locator.config; + +import com.dfsek.tectonic.annotations.Value; +import com.dfsek.tectonic.loading.object.ObjectTemplate; + +import java.util.List; + +import com.dfsek.terra.addons.feature.locator.locators.NoiseLocator; +import com.dfsek.terra.api.config.meta.Meta; +import com.dfsek.terra.api.noise.NoiseSampler; +import com.dfsek.terra.api.structure.feature.Locator; + + +public class NoiseLocatorTemplate implements ObjectTemplate { + @Value("samplers") + private @Meta List<@Meta NoiseSampler> samplers; + + @Override + public Locator get() { + return new NoiseLocator(samplers); + } +} diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/OrLocatorTemplate.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/OrLocatorTemplate.java new file mode 100644 index 000000000..38e0d660c --- /dev/null +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/OrLocatorTemplate.java @@ -0,0 +1,32 @@ +package com.dfsek.terra.addons.feature.locator.config; + +import com.dfsek.tectonic.annotations.Value; +import com.dfsek.tectonic.config.ValidatedConfigTemplate; +import com.dfsek.tectonic.exception.ValidationException; +import com.dfsek.tectonic.loading.object.ObjectTemplate; + +import java.util.List; + +import com.dfsek.terra.api.config.meta.Meta; +import com.dfsek.terra.api.structure.feature.Locator; + + +public class OrLocatorTemplate implements ObjectTemplate, ValidatedConfigTemplate { + @Value("locators") + private @Meta List<@Meta Locator> locators; + + @Override + public Locator get() { + Locator current = locators.remove(0); + while(!locators.isEmpty()) { + current = current.or(locators.remove(0)); + } + return current; + } + + @Override + public boolean validate() throws ValidationException { + if(locators.isEmpty()) throw new ValidationException("AND Pattern must specify at least 1 pattern."); + return true; + } +} diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/PatternLocatorTemplate.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/PatternLocatorTemplate.java new file mode 100644 index 000000000..c27054675 --- /dev/null +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/PatternLocatorTemplate.java @@ -0,0 +1,24 @@ +package com.dfsek.terra.addons.feature.locator.config; + +import com.dfsek.tectonic.annotations.Value; +import com.dfsek.tectonic.loading.object.ObjectTemplate; + +import com.dfsek.terra.addons.feature.locator.locators.PatternLocator; +import com.dfsek.terra.addons.feature.locator.patterns.Pattern; +import com.dfsek.terra.api.config.meta.Meta; +import com.dfsek.terra.api.structure.feature.Locator; +import com.dfsek.terra.api.util.Range; + + +public class PatternLocatorTemplate implements ObjectTemplate { + @Value("range") + private @Meta Range range; + + @Value("pattern") + private @Meta Pattern pattern; + + @Override + public Locator get() { + return new PatternLocator(pattern, range); + } +} diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/RandomLocatorTemplate.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/RandomLocatorTemplate.java new file mode 100644 index 000000000..347294d3f --- /dev/null +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/RandomLocatorTemplate.java @@ -0,0 +1,23 @@ +package com.dfsek.terra.addons.feature.locator.config; + +import com.dfsek.tectonic.annotations.Value; +import com.dfsek.tectonic.loading.object.ObjectTemplate; + +import com.dfsek.terra.addons.feature.locator.locators.RandomLocator; +import com.dfsek.terra.api.config.meta.Meta; +import com.dfsek.terra.api.structure.feature.Locator; +import com.dfsek.terra.api.util.Range; + + +public class RandomLocatorTemplate implements ObjectTemplate { + @Value("height") + private @Meta Range height; + + @Value("amount") + private @Meta Range amount; + + @Override + public Locator get() { + return new RandomLocator(height, amount); + } +} diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/SurfaceLocatorTemplate.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/SurfaceLocatorTemplate.java new file mode 100644 index 000000000..fce147df8 --- /dev/null +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/SurfaceLocatorTemplate.java @@ -0,0 +1,27 @@ +package com.dfsek.terra.addons.feature.locator.config; + +import com.dfsek.tectonic.annotations.Value; +import com.dfsek.tectonic.loading.object.ObjectTemplate; + +import com.dfsek.terra.addons.feature.locator.locators.SurfaceLocator; +import com.dfsek.terra.api.Platform; +import com.dfsek.terra.api.config.meta.Meta; +import com.dfsek.terra.api.structure.feature.Locator; +import com.dfsek.terra.api.util.Range; + + +public class SurfaceLocatorTemplate implements ObjectTemplate { + private final Platform platform; + + @Value("range") + private @Meta Range range; + + public SurfaceLocatorTemplate(Platform platform) { + this.platform = platform; + } + + @Override + public Locator get() { + return new SurfaceLocator(range, platform); + } +} diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/AirMatchPatternTemplate.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/AirMatchPatternTemplate.java new file mode 100644 index 000000000..dfd65ec38 --- /dev/null +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/AirMatchPatternTemplate.java @@ -0,0 +1,22 @@ +package com.dfsek.terra.addons.feature.locator.config.pattern; + +import com.dfsek.tectonic.annotations.Value; +import com.dfsek.tectonic.loading.object.ObjectTemplate; + +import com.dfsek.terra.addons.feature.locator.patterns.MatchPattern; +import com.dfsek.terra.addons.feature.locator.patterns.Pattern; +import com.dfsek.terra.api.block.state.BlockState; +import com.dfsek.terra.api.config.meta.Meta; +import com.dfsek.terra.api.util.Range; + + +public class AirMatchPatternTemplate implements ObjectTemplate { + @Value("offset") + private @Meta Range offset; + + + @Override + public Pattern get() { + return new MatchPattern(offset, BlockState::isAir); + } +} diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/AndPatternTemplate.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/AndPatternTemplate.java new file mode 100644 index 000000000..78ff11428 --- /dev/null +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/AndPatternTemplate.java @@ -0,0 +1,32 @@ +package com.dfsek.terra.addons.feature.locator.config.pattern; + +import com.dfsek.tectonic.annotations.Value; +import com.dfsek.tectonic.config.ValidatedConfigTemplate; +import com.dfsek.tectonic.exception.ValidationException; +import com.dfsek.tectonic.loading.object.ObjectTemplate; + +import java.util.List; + +import com.dfsek.terra.addons.feature.locator.patterns.Pattern; +import com.dfsek.terra.api.config.meta.Meta; + + +public class AndPatternTemplate implements ObjectTemplate, ValidatedConfigTemplate { + @Value("patterns") + private @Meta List<@Meta Pattern> patterns; + + @Override + public Pattern get() { + Pattern current = patterns.remove(0); + while(!patterns.isEmpty()) { + current = current.and(patterns.remove(0)); + } + return current; + } + + @Override + public boolean validate() throws ValidationException { + if(patterns.isEmpty()) throw new ValidationException("AND Pattern must specify at least 1 pattern."); + return true; + } +} diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/BlockSetMatchPatternTemplate.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/BlockSetMatchPatternTemplate.java new file mode 100644 index 000000000..6f15ac36d --- /dev/null +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/BlockSetMatchPatternTemplate.java @@ -0,0 +1,24 @@ +package com.dfsek.terra.addons.feature.locator.config.pattern; + +import com.dfsek.tectonic.annotations.Value; +import com.dfsek.tectonic.loading.object.ObjectTemplate; + +import com.dfsek.terra.addons.feature.locator.patterns.MatchPattern; +import com.dfsek.terra.addons.feature.locator.patterns.Pattern; +import com.dfsek.terra.api.config.meta.Meta; +import com.dfsek.terra.api.util.Range; +import com.dfsek.terra.api.util.collection.MaterialSet; + + +public class BlockSetMatchPatternTemplate implements ObjectTemplate { + @Value("blocks") + private @Meta MaterialSet blocks; + + @Value("offset") + private @Meta Range offset; + + @Override + public Pattern get() { + return new MatchPattern(offset, blockState -> blocks.contains(blockState.getBlockType())); + } +} diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/NotPatternTemplate.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/NotPatternTemplate.java new file mode 100644 index 000000000..fcf40e57b --- /dev/null +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/NotPatternTemplate.java @@ -0,0 +1,18 @@ +package com.dfsek.terra.addons.feature.locator.config.pattern; + +import com.dfsek.tectonic.annotations.Value; +import com.dfsek.tectonic.loading.object.ObjectTemplate; + +import com.dfsek.terra.addons.feature.locator.patterns.Pattern; +import com.dfsek.terra.api.config.meta.Meta; + + +public class NotPatternTemplate implements ObjectTemplate { + @Value("pattern") + private @Meta Pattern pattern; + + @Override + public Pattern get() { + return pattern.not(); + } +} diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/OrPatternTemplate.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/OrPatternTemplate.java new file mode 100644 index 000000000..5e1369724 --- /dev/null +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/OrPatternTemplate.java @@ -0,0 +1,32 @@ +package com.dfsek.terra.addons.feature.locator.config.pattern; + +import com.dfsek.tectonic.annotations.Value; +import com.dfsek.tectonic.config.ValidatedConfigTemplate; +import com.dfsek.tectonic.exception.ValidationException; +import com.dfsek.tectonic.loading.object.ObjectTemplate; + +import java.util.List; + +import com.dfsek.terra.addons.feature.locator.patterns.Pattern; +import com.dfsek.terra.api.config.meta.Meta; + + +public class OrPatternTemplate implements ObjectTemplate, ValidatedConfigTemplate { + @Value("patterns") + private @Meta List<@Meta Pattern> patterns; + + @Override + public Pattern get() { + Pattern current = patterns.remove(0); + while(!patterns.isEmpty()) { + current = current.or(patterns.remove(0)); + } + return current; + } + + @Override + public boolean validate() throws ValidationException { + if(patterns.isEmpty()) throw new ValidationException("AND Pattern must specify at least 1 pattern."); + return true; + } +} diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/SingleBlockMatchPatternTemplate.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/SingleBlockMatchPatternTemplate.java new file mode 100644 index 000000000..782d0ca5d --- /dev/null +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/SingleBlockMatchPatternTemplate.java @@ -0,0 +1,25 @@ +package com.dfsek.terra.addons.feature.locator.config.pattern; + +import com.dfsek.tectonic.annotations.Value; +import com.dfsek.tectonic.loading.object.ObjectTemplate; + +import com.dfsek.terra.addons.feature.locator.patterns.MatchPattern; +import com.dfsek.terra.addons.feature.locator.patterns.Pattern; +import com.dfsek.terra.api.block.state.BlockState; +import com.dfsek.terra.api.config.meta.Meta; +import com.dfsek.terra.api.util.Range; + + +public class SingleBlockMatchPatternTemplate implements ObjectTemplate { + @Value("block") + private @Meta BlockState block; + + @Value("offset") + private @Meta Range offset; + + + @Override + public Pattern get() { + return new MatchPattern(offset, block::matches); + } +} diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/SolidMatchPatternTemplate.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/SolidMatchPatternTemplate.java new file mode 100644 index 000000000..eebb03197 --- /dev/null +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/SolidMatchPatternTemplate.java @@ -0,0 +1,19 @@ +package com.dfsek.terra.addons.feature.locator.config.pattern; + +import com.dfsek.tectonic.annotations.Value; +import com.dfsek.tectonic.loading.object.ObjectTemplate; + +import com.dfsek.terra.addons.feature.locator.patterns.MatchPattern; +import com.dfsek.terra.addons.feature.locator.patterns.Pattern; +import com.dfsek.terra.api.util.Range; + + +public class SolidMatchPatternTemplate implements ObjectTemplate { + @Value("offset") + private Range offset; + + @Override + public Pattern get() { + return new MatchPattern(offset, blockState -> blockState.getBlockType().isSolid()); + } +} diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/Noise3DLocator.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/Noise3DLocator.java new file mode 100644 index 000000000..571a33aa6 --- /dev/null +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/Noise3DLocator.java @@ -0,0 +1,27 @@ +package com.dfsek.terra.addons.feature.locator.locators; + +import com.dfsek.terra.api.noise.NoiseSampler; +import com.dfsek.terra.api.structure.feature.BinaryColumn; +import com.dfsek.terra.api.structure.feature.Locator; +import com.dfsek.terra.api.world.Column; + + +public class Noise3DLocator implements Locator { + private final NoiseSampler sampler; + + public Noise3DLocator(NoiseSampler sampler) { + this.sampler = sampler; + } + + @Override + public BinaryColumn getSuitableCoordinates(Column column) { + BinaryColumn results = column.newBinaryColumn(); + long seed = column.getWorld().getSeed(); + int x = column.getX(); + int z = column.getZ(); + column.forEach(y -> { + if(sampler.getNoiseSeeded(seed, x, y, z) > 0) results.set(y); + }); + return results; + } +} diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/NoiseLocator.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/NoiseLocator.java new file mode 100644 index 000000000..b88ad0295 --- /dev/null +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/NoiseLocator.java @@ -0,0 +1,33 @@ +package com.dfsek.terra.addons.feature.locator.locators; + +import net.jafama.FastMath; + +import java.util.List; + +import com.dfsek.terra.api.noise.NoiseSampler; +import com.dfsek.terra.api.structure.feature.BinaryColumn; +import com.dfsek.terra.api.structure.feature.Locator; +import com.dfsek.terra.api.world.Column; + + +public class NoiseLocator implements Locator { + private final List samplers; + + public NoiseLocator(List samplers) { + this.samplers = samplers; + } + + @Override + public BinaryColumn getSuitableCoordinates(Column column) { + BinaryColumn results = new BinaryColumn(column.getMinY(), column.getMaxY()); + + long seed = column.getWorld().getSeed(); + samplers.forEach(sampler -> { + int y = FastMath.floorToInt(sampler.getNoiseSeeded(seed, column.getX(), column.getX())); + if(y >= column.getMaxY() || y < column.getMinY()) return; + results.set(y); + }); + + return results; + } +} diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/PatternLocator.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/PatternLocator.java new file mode 100644 index 000000000..a5faddf4c --- /dev/null +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/PatternLocator.java @@ -0,0 +1,29 @@ +package com.dfsek.terra.addons.feature.locator.locators; + +import com.dfsek.terra.addons.feature.locator.patterns.Pattern; +import com.dfsek.terra.api.structure.feature.BinaryColumn; +import com.dfsek.terra.api.structure.feature.Locator; +import com.dfsek.terra.api.util.Range; +import com.dfsek.terra.api.world.Column; + + +public class PatternLocator implements Locator { + private final Pattern pattern; + private final Range search; + + public PatternLocator(Pattern pattern, Range search) { + this.pattern = pattern; + this.search = search; + } + + @Override + public BinaryColumn getSuitableCoordinates(Column column) { + BinaryColumn locations = new BinaryColumn(column.getMinY(), column.getMaxY()); + + for(int y : search) { + if(pattern.matches(y, column)) locations.set(y); + } + + return locations; + } +} diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/RandomLocator.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/RandomLocator.java new file mode 100644 index 000000000..78df7b875 --- /dev/null +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/RandomLocator.java @@ -0,0 +1,38 @@ +package com.dfsek.terra.addons.feature.locator.locators; + +import java.util.Random; + +import com.dfsek.terra.api.structure.feature.BinaryColumn; +import com.dfsek.terra.api.structure.feature.Locator; +import com.dfsek.terra.api.util.Range; +import com.dfsek.terra.api.world.Column; + + +public class RandomLocator implements Locator { + private final Range height; + + private final Range points; + + public RandomLocator(Range height, Range points) { + this.height = height; + this.points = points; + } + + @Override + public BinaryColumn getSuitableCoordinates(Column column) { + long seed = column.getWorld().getSeed(); + seed = 31 * seed + column.getX(); + seed = 31 * seed + column.getZ(); + + Random r = new Random(seed); + + int size = points.get(r); + + BinaryColumn results = new BinaryColumn(column.getMinY(), column.getMaxY()); + for(int i = 0; i < size; i++) { + results.set(height.get(r)); + } + + return results; + } +} diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/SurfaceLocator.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/SurfaceLocator.java new file mode 100644 index 000000000..942d45236 --- /dev/null +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/SurfaceLocator.java @@ -0,0 +1,32 @@ +package com.dfsek.terra.addons.feature.locator.locators; + +import com.dfsek.terra.api.Platform; +import com.dfsek.terra.api.block.state.BlockState; +import com.dfsek.terra.api.structure.feature.BinaryColumn; +import com.dfsek.terra.api.structure.feature.Locator; +import com.dfsek.terra.api.util.Range; +import com.dfsek.terra.api.world.Column; + + +public class SurfaceLocator implements Locator { + private final Range search; + + private final BlockState air; + + public SurfaceLocator(Range search, Platform platform) { + this.search = search; + this.air = platform.getWorldHandle().air(); + } + + @Override + public BinaryColumn getSuitableCoordinates(Column column) { + BinaryColumn location = new BinaryColumn(column.getMinY(), column.getMaxY()); + for(int y : search) { + if(column.getBlock(y).matches(air) && !column.getBlock(y - 1).matches(air)) { + location.set(y); + return location; + } + } + return location; + } +} diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/patterns/MatchPattern.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/patterns/MatchPattern.java new file mode 100644 index 000000000..d305d64d8 --- /dev/null +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/patterns/MatchPattern.java @@ -0,0 +1,26 @@ +package com.dfsek.terra.addons.feature.locator.patterns; + +import java.util.function.Predicate; + +import com.dfsek.terra.api.block.state.BlockState; +import com.dfsek.terra.api.util.Range; +import com.dfsek.terra.api.world.Column; + + +public class MatchPattern implements Pattern { + private final Range range; + private final Predicate matches; + + public MatchPattern(Range range, Predicate matches) { + this.range = range; + this.matches = matches; + } + + @Override + public boolean matches(int y, Column column) { + for(int i : range) { + if(!matches.test(column.getBlock(y + i))) return false; + } + return true; + } +} diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/patterns/Pattern.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/patterns/Pattern.java new file mode 100644 index 000000000..2aae3af0d --- /dev/null +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/patterns/Pattern.java @@ -0,0 +1,20 @@ +package com.dfsek.terra.addons.feature.locator.patterns; + +import com.dfsek.terra.api.world.Column; + + +public interface Pattern { + boolean matches(int y, Column column); + + default Pattern and(Pattern that) { + return (y, column) -> this.matches(y, column) && that.matches(y, column); + } + + default Pattern or(Pattern that) { + return (y, column) -> this.matches(y, column) || that.matches(y, column); + } + + default Pattern not() { + return (y, column) -> !this.matches(y, column); + } +} From d2b69637635ebd1e6b881b8244d51f1d8d0f9ee9 Mon Sep 17 00:00:00 2001 From: dfsek Date: Wed, 17 Nov 2021 10:20:05 -0700 Subject: [PATCH 2/9] create addon manifests --- .../src/main/resources/terra.addon.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 common/addons/config-locators/src/main/resources/terra.addon.yml diff --git a/common/addons/config-locators/src/main/resources/terra.addon.yml b/common/addons/config-locators/src/main/resources/terra.addon.yml new file mode 100644 index 000000000..0e4f3922e --- /dev/null +++ b/common/addons/config-locators/src/main/resources/terra.addon.yml @@ -0,0 +1,12 @@ +schema-version: 1 +contributors: + - Terra contributors +id: config-locators +version: 0.1.0 +entrypoints: + - "com.dfsek.terra.addons.feature.locator.LocatorAddon" +website: + issues: https://github.com/PolyhedralDev/Terra-config-locators/issues + source: https://github.com/PolyhedralDev/Terra-config-locators + docs: https://github.com/PolyhedralDev/Terra/wiki +license: GNU LGPL v3.0 \ No newline at end of file From c207f51bfc2b105f50076db21cb5b0e4172a2537 Mon Sep 17 00:00:00 2001 From: dfsek Date: Wed, 17 Nov 2021 12:20:17 -0700 Subject: [PATCH 3/9] depend on manifest addons in core addon modules --- common/addons/config-locators/build.gradle.kts | 1 + 1 file changed, 1 insertion(+) diff --git a/common/addons/config-locators/build.gradle.kts b/common/addons/config-locators/build.gradle.kts index 7d82dc72f..147905b20 100644 --- a/common/addons/config-locators/build.gradle.kts +++ b/common/addons/config-locators/build.gradle.kts @@ -1,2 +1,3 @@ dependencies { + "shadedApi"(project(":common:addons:manifest-addon-loader")) } From 8de78ef5f21596d9e88e4464fe11bc81a2c3e19d Mon Sep 17 00:00:00 2001 From: dfsek Date: Wed, 17 Nov 2021 12:39:23 -0700 Subject: [PATCH 4/9] create addon manifests --- .../terra/addons/feature/locator/LocatorAddon.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/LocatorAddon.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/LocatorAddon.java index bffc6a2d5..6561f23bd 100644 --- a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/LocatorAddon.java +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/LocatorAddon.java @@ -19,7 +19,9 @@ import com.dfsek.terra.addons.feature.locator.config.pattern.OrPatternTemplate; import com.dfsek.terra.addons.feature.locator.config.pattern.SingleBlockMatchPatternTemplate; import com.dfsek.terra.addons.feature.locator.config.pattern.SolidMatchPatternTemplate; import com.dfsek.terra.addons.feature.locator.patterns.Pattern; +import com.dfsek.terra.addons.manifest.api.AddonInitializer; import com.dfsek.terra.api.Platform; +import com.dfsek.terra.api.addon.BaseAddon; import com.dfsek.terra.api.addon.TerraAddon; import com.dfsek.terra.api.addon.annotations.Addon; import com.dfsek.terra.api.addon.annotations.Author; @@ -32,10 +34,8 @@ import com.dfsek.terra.api.structure.feature.Locator; import com.dfsek.terra.api.util.reflection.TypeKey; -@Addon("config-locators") -@Version("1.0.0") -@Author("Terra") -public class LocatorAddon extends TerraAddon { + +public class LocatorAddon implements AddonInitializer { public static final TypeKey>> LOCATOR_TOKEN = new TypeKey<>() { }; @@ -44,11 +44,14 @@ public class LocatorAddon extends TerraAddon { @Inject private Platform platform; + @Inject + private BaseAddon addon; + @Override public void initialize() { platform.getEventManager() .getHandler(FunctionalEventHandler.class) - .register(this, ConfigPackPreLoadEvent.class) + .register(addon, ConfigPackPreLoadEvent.class) .then(event -> { CheckedRegistry>> locatorRegistry = event.getPack().getOrCreateRegistry(LOCATOR_TOKEN); locatorRegistry.register("SURFACE", () -> new SurfaceLocatorTemplate(platform)); From 44e0a8452f9800e60df9ae1578ce5066f40e72ef Mon Sep 17 00:00:00 2001 From: dfsek Date: Wed, 17 Nov 2021 16:28:39 -0700 Subject: [PATCH 5/9] format --- .../addons/feature/locator/LocatorAddon.java | 41 ++++++++----------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/LocatorAddon.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/LocatorAddon.java index 6561f23bd..f9958c3b0 100644 --- a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/LocatorAddon.java +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/LocatorAddon.java @@ -22,10 +22,6 @@ import com.dfsek.terra.addons.feature.locator.patterns.Pattern; import com.dfsek.terra.addons.manifest.api.AddonInitializer; import com.dfsek.terra.api.Platform; import com.dfsek.terra.api.addon.BaseAddon; -import com.dfsek.terra.api.addon.TerraAddon; -import com.dfsek.terra.api.addon.annotations.Addon; -import com.dfsek.terra.api.addon.annotations.Author; -import com.dfsek.terra.api.addon.annotations.Version; 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; @@ -34,7 +30,6 @@ import com.dfsek.terra.api.structure.feature.Locator; import com.dfsek.terra.api.util.reflection.TypeKey; - public class LocatorAddon implements AddonInitializer { public static final TypeKey>> LOCATOR_TOKEN = new TypeKey<>() { @@ -53,27 +48,27 @@ public class LocatorAddon implements AddonInitializer { .getHandler(FunctionalEventHandler.class) .register(addon, ConfigPackPreLoadEvent.class) .then(event -> { - CheckedRegistry>> locatorRegistry = event.getPack().getOrCreateRegistry(LOCATOR_TOKEN); - locatorRegistry.register("SURFACE", () -> new SurfaceLocatorTemplate(platform)); - locatorRegistry.register("RANDOM", RandomLocatorTemplate::new); - locatorRegistry.register("PATTERN", PatternLocatorTemplate::new); - locatorRegistry.register("NOISE", NoiseLocatorTemplate::new); - locatorRegistry.register("NOISE_3D", Noise3DLocatorTemplate::new); + CheckedRegistry>> locatorRegistry = event.getPack().getOrCreateRegistry(LOCATOR_TOKEN); + locatorRegistry.register("SURFACE", () -> new SurfaceLocatorTemplate(platform)); + locatorRegistry.register("RANDOM", RandomLocatorTemplate::new); + locatorRegistry.register("PATTERN", PatternLocatorTemplate::new); + locatorRegistry.register("NOISE", NoiseLocatorTemplate::new); + locatorRegistry.register("NOISE_3D", Noise3DLocatorTemplate::new); - locatorRegistry.register("AND", AndLocatorTemplate::new); - locatorRegistry.register("OR", OrLocatorTemplate::new); - }) + locatorRegistry.register("AND", AndLocatorTemplate::new); + locatorRegistry.register("OR", OrLocatorTemplate::new); + }) .then(event -> { - CheckedRegistry>> patternRegistry = event.getPack().getOrCreateRegistry(PATTERN_TOKEN); - patternRegistry.register("MATCH_AIR", AirMatchPatternTemplate::new); - patternRegistry.register("MATCH_SOLID", SolidMatchPatternTemplate::new); - patternRegistry.register("MATCH", SingleBlockMatchPatternTemplate::new); - patternRegistry.register("MATCH_SET", BlockSetMatchPatternTemplate::new); + CheckedRegistry>> patternRegistry = event.getPack().getOrCreateRegistry(PATTERN_TOKEN); + patternRegistry.register("MATCH_AIR", AirMatchPatternTemplate::new); + patternRegistry.register("MATCH_SOLID", SolidMatchPatternTemplate::new); + patternRegistry.register("MATCH", SingleBlockMatchPatternTemplate::new); + patternRegistry.register("MATCH_SET", BlockSetMatchPatternTemplate::new); - patternRegistry.register("AND", AndPatternTemplate::new); - patternRegistry.register("OR", OrPatternTemplate::new); - patternRegistry.register("NOT", NotPatternTemplate::new); - }) + patternRegistry.register("AND", AndPatternTemplate::new); + patternRegistry.register("OR", OrPatternTemplate::new); + patternRegistry.register("NOT", NotPatternTemplate::new); + }) .failThrough(); } } From 869edff8736a632fa10eccdcfbc8edee960b60f5 Mon Sep 17 00:00:00 2001 From: dfsek Date: Thu, 18 Nov 2021 21:38:46 -0700 Subject: [PATCH 6/9] add feature dependencies --- .../config-locators/src/main/resources/terra.addon.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/common/addons/config-locators/src/main/resources/terra.addon.yml b/common/addons/config-locators/src/main/resources/terra.addon.yml index 0e4f3922e..e35cc6884 100644 --- a/common/addons/config-locators/src/main/resources/terra.addon.yml +++ b/common/addons/config-locators/src/main/resources/terra.addon.yml @@ -9,4 +9,7 @@ website: issues: https://github.com/PolyhedralDev/Terra-config-locators/issues source: https://github.com/PolyhedralDev/Terra-config-locators docs: https://github.com/PolyhedralDev/Terra/wiki -license: GNU LGPL v3.0 \ No newline at end of file +license: GNU LGPL v3.0 +depends: + config-feature: "0.1.+" + generation-stage-feature: "0.1.+" \ No newline at end of file From 6e06bfa86dfffbedfed0c4851e7a66ae1fc125d2 Mon Sep 17 00:00:00 2001 From: dfsek Date: Fri, 19 Nov 2021 08:47:17 -0700 Subject: [PATCH 7/9] relicense addons under MIT license --- common/addons/config-locators/LICENSE | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 common/addons/config-locators/LICENSE diff --git a/common/addons/config-locators/LICENSE b/common/addons/config-locators/LICENSE new file mode 100644 index 000000000..64c1cd516 --- /dev/null +++ b/common/addons/config-locators/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020-2021 Polyhedral Development + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file From 43426ea0849809f0eaa3074343839fdb7ab5e795 Mon Sep 17 00:00:00 2001 From: dfsek Date: Fri, 19 Nov 2021 15:42:25 -0700 Subject: [PATCH 8/9] add license headers --- .../dfsek/terra/addons/feature/locator/LocatorAddon.java | 7 +++++++ .../addons/feature/locator/config/AndLocatorTemplate.java | 7 +++++++ .../feature/locator/config/Noise3DLocatorTemplate.java | 7 +++++++ .../feature/locator/config/NoiseLocatorTemplate.java | 7 +++++++ .../addons/feature/locator/config/OrLocatorTemplate.java | 7 +++++++ .../feature/locator/config/PatternLocatorTemplate.java | 7 +++++++ .../feature/locator/config/RandomLocatorTemplate.java | 7 +++++++ .../feature/locator/config/SurfaceLocatorTemplate.java | 7 +++++++ .../locator/config/pattern/AirMatchPatternTemplate.java | 7 +++++++ .../feature/locator/config/pattern/AndPatternTemplate.java | 7 +++++++ .../config/pattern/BlockSetMatchPatternTemplate.java | 7 +++++++ .../feature/locator/config/pattern/NotPatternTemplate.java | 7 +++++++ .../feature/locator/config/pattern/OrPatternTemplate.java | 7 +++++++ .../config/pattern/SingleBlockMatchPatternTemplate.java | 7 +++++++ .../locator/config/pattern/SolidMatchPatternTemplate.java | 7 +++++++ .../addons/feature/locator/locators/Noise3DLocator.java | 7 +++++++ .../addons/feature/locator/locators/NoiseLocator.java | 7 +++++++ .../addons/feature/locator/locators/PatternLocator.java | 7 +++++++ .../addons/feature/locator/locators/RandomLocator.java | 7 +++++++ .../addons/feature/locator/locators/SurfaceLocator.java | 7 +++++++ .../addons/feature/locator/patterns/MatchPattern.java | 7 +++++++ .../terra/addons/feature/locator/patterns/Pattern.java | 7 +++++++ 22 files changed, 154 insertions(+) diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/LocatorAddon.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/LocatorAddon.java index f9958c3b0..58793ff57 100644 --- a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/LocatorAddon.java +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/LocatorAddon.java @@ -1,3 +1,10 @@ +/* + * Copyright (c) 2020-2021 Polyhedral Development + * + * The Terra Core Addons are licensed under the terms of the MIT License. For more details, + * reference the LICENSE file in this module's root directory. + */ + package com.dfsek.terra.addons.feature.locator; import com.dfsek.tectonic.loading.object.ObjectTemplate; diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/AndLocatorTemplate.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/AndLocatorTemplate.java index 404c38a8a..92fd29bee 100644 --- a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/AndLocatorTemplate.java +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/AndLocatorTemplate.java @@ -1,3 +1,10 @@ +/* + * Copyright (c) 2020-2021 Polyhedral Development + * + * The Terra Core Addons are licensed under the terms of the MIT License. For more details, + * reference the LICENSE file in this module's root directory. + */ + package com.dfsek.terra.addons.feature.locator.config; import com.dfsek.tectonic.annotations.Value; diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/Noise3DLocatorTemplate.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/Noise3DLocatorTemplate.java index 2a61e39dd..ae0452b61 100644 --- a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/Noise3DLocatorTemplate.java +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/Noise3DLocatorTemplate.java @@ -1,3 +1,10 @@ +/* + * Copyright (c) 2020-2021 Polyhedral Development + * + * The Terra Core Addons are licensed under the terms of the MIT License. For more details, + * reference the LICENSE file in this module's root directory. + */ + package com.dfsek.terra.addons.feature.locator.config; import com.dfsek.tectonic.annotations.Value; diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/NoiseLocatorTemplate.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/NoiseLocatorTemplate.java index ca0f33137..fb21fd5ff 100644 --- a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/NoiseLocatorTemplate.java +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/NoiseLocatorTemplate.java @@ -1,3 +1,10 @@ +/* + * Copyright (c) 2020-2021 Polyhedral Development + * + * The Terra Core Addons are licensed under the terms of the MIT License. For more details, + * reference the LICENSE file in this module's root directory. + */ + package com.dfsek.terra.addons.feature.locator.config; import com.dfsek.tectonic.annotations.Value; diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/OrLocatorTemplate.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/OrLocatorTemplate.java index 38e0d660c..6d171b155 100644 --- a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/OrLocatorTemplate.java +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/OrLocatorTemplate.java @@ -1,3 +1,10 @@ +/* + * Copyright (c) 2020-2021 Polyhedral Development + * + * The Terra Core Addons are licensed under the terms of the MIT License. For more details, + * reference the LICENSE file in this module's root directory. + */ + package com.dfsek.terra.addons.feature.locator.config; import com.dfsek.tectonic.annotations.Value; diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/PatternLocatorTemplate.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/PatternLocatorTemplate.java index c27054675..d179e45bf 100644 --- a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/PatternLocatorTemplate.java +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/PatternLocatorTemplate.java @@ -1,3 +1,10 @@ +/* + * Copyright (c) 2020-2021 Polyhedral Development + * + * The Terra Core Addons are licensed under the terms of the MIT License. For more details, + * reference the LICENSE file in this module's root directory. + */ + package com.dfsek.terra.addons.feature.locator.config; import com.dfsek.tectonic.annotations.Value; diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/RandomLocatorTemplate.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/RandomLocatorTemplate.java index 347294d3f..500e1fb67 100644 --- a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/RandomLocatorTemplate.java +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/RandomLocatorTemplate.java @@ -1,3 +1,10 @@ +/* + * Copyright (c) 2020-2021 Polyhedral Development + * + * The Terra Core Addons are licensed under the terms of the MIT License. For more details, + * reference the LICENSE file in this module's root directory. + */ + package com.dfsek.terra.addons.feature.locator.config; import com.dfsek.tectonic.annotations.Value; diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/SurfaceLocatorTemplate.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/SurfaceLocatorTemplate.java index fce147df8..146bdda47 100644 --- a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/SurfaceLocatorTemplate.java +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/SurfaceLocatorTemplate.java @@ -1,3 +1,10 @@ +/* + * Copyright (c) 2020-2021 Polyhedral Development + * + * The Terra Core Addons are licensed under the terms of the MIT License. For more details, + * reference the LICENSE file in this module's root directory. + */ + package com.dfsek.terra.addons.feature.locator.config; import com.dfsek.tectonic.annotations.Value; diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/AirMatchPatternTemplate.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/AirMatchPatternTemplate.java index dfd65ec38..540357396 100644 --- a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/AirMatchPatternTemplate.java +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/AirMatchPatternTemplate.java @@ -1,3 +1,10 @@ +/* + * Copyright (c) 2020-2021 Polyhedral Development + * + * The Terra Core Addons are licensed under the terms of the MIT License. For more details, + * reference the LICENSE file in this module's root directory. + */ + package com.dfsek.terra.addons.feature.locator.config.pattern; import com.dfsek.tectonic.annotations.Value; diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/AndPatternTemplate.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/AndPatternTemplate.java index 78ff11428..c860eab1f 100644 --- a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/AndPatternTemplate.java +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/AndPatternTemplate.java @@ -1,3 +1,10 @@ +/* + * Copyright (c) 2020-2021 Polyhedral Development + * + * The Terra Core Addons are licensed under the terms of the MIT License. For more details, + * reference the LICENSE file in this module's root directory. + */ + package com.dfsek.terra.addons.feature.locator.config.pattern; import com.dfsek.tectonic.annotations.Value; diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/BlockSetMatchPatternTemplate.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/BlockSetMatchPatternTemplate.java index 6f15ac36d..5775057ee 100644 --- a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/BlockSetMatchPatternTemplate.java +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/BlockSetMatchPatternTemplate.java @@ -1,3 +1,10 @@ +/* + * Copyright (c) 2020-2021 Polyhedral Development + * + * The Terra Core Addons are licensed under the terms of the MIT License. For more details, + * reference the LICENSE file in this module's root directory. + */ + package com.dfsek.terra.addons.feature.locator.config.pattern; import com.dfsek.tectonic.annotations.Value; diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/NotPatternTemplate.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/NotPatternTemplate.java index fcf40e57b..9208658da 100644 --- a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/NotPatternTemplate.java +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/NotPatternTemplate.java @@ -1,3 +1,10 @@ +/* + * Copyright (c) 2020-2021 Polyhedral Development + * + * The Terra Core Addons are licensed under the terms of the MIT License. For more details, + * reference the LICENSE file in this module's root directory. + */ + package com.dfsek.terra.addons.feature.locator.config.pattern; import com.dfsek.tectonic.annotations.Value; diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/OrPatternTemplate.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/OrPatternTemplate.java index 5e1369724..9003c2ef5 100644 --- a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/OrPatternTemplate.java +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/OrPatternTemplate.java @@ -1,3 +1,10 @@ +/* + * Copyright (c) 2020-2021 Polyhedral Development + * + * The Terra Core Addons are licensed under the terms of the MIT License. For more details, + * reference the LICENSE file in this module's root directory. + */ + package com.dfsek.terra.addons.feature.locator.config.pattern; import com.dfsek.tectonic.annotations.Value; diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/SingleBlockMatchPatternTemplate.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/SingleBlockMatchPatternTemplate.java index 782d0ca5d..25a329585 100644 --- a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/SingleBlockMatchPatternTemplate.java +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/SingleBlockMatchPatternTemplate.java @@ -1,3 +1,10 @@ +/* + * Copyright (c) 2020-2021 Polyhedral Development + * + * The Terra Core Addons are licensed under the terms of the MIT License. For more details, + * reference the LICENSE file in this module's root directory. + */ + package com.dfsek.terra.addons.feature.locator.config.pattern; import com.dfsek.tectonic.annotations.Value; diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/SolidMatchPatternTemplate.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/SolidMatchPatternTemplate.java index eebb03197..a2537d982 100644 --- a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/SolidMatchPatternTemplate.java +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/pattern/SolidMatchPatternTemplate.java @@ -1,3 +1,10 @@ +/* + * Copyright (c) 2020-2021 Polyhedral Development + * + * The Terra Core Addons are licensed under the terms of the MIT License. For more details, + * reference the LICENSE file in this module's root directory. + */ + package com.dfsek.terra.addons.feature.locator.config.pattern; import com.dfsek.tectonic.annotations.Value; diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/Noise3DLocator.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/Noise3DLocator.java index 571a33aa6..6231e2fe0 100644 --- a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/Noise3DLocator.java +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/Noise3DLocator.java @@ -1,3 +1,10 @@ +/* + * Copyright (c) 2020-2021 Polyhedral Development + * + * The Terra Core Addons are licensed under the terms of the MIT License. For more details, + * reference the LICENSE file in this module's root directory. + */ + package com.dfsek.terra.addons.feature.locator.locators; import com.dfsek.terra.api.noise.NoiseSampler; diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/NoiseLocator.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/NoiseLocator.java index b88ad0295..0a1a2ed39 100644 --- a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/NoiseLocator.java +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/NoiseLocator.java @@ -1,3 +1,10 @@ +/* + * Copyright (c) 2020-2021 Polyhedral Development + * + * The Terra Core Addons are licensed under the terms of the MIT License. For more details, + * reference the LICENSE file in this module's root directory. + */ + package com.dfsek.terra.addons.feature.locator.locators; import net.jafama.FastMath; diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/PatternLocator.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/PatternLocator.java index a5faddf4c..a37e59103 100644 --- a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/PatternLocator.java +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/PatternLocator.java @@ -1,3 +1,10 @@ +/* + * Copyright (c) 2020-2021 Polyhedral Development + * + * The Terra Core Addons are licensed under the terms of the MIT License. For more details, + * reference the LICENSE file in this module's root directory. + */ + package com.dfsek.terra.addons.feature.locator.locators; import com.dfsek.terra.addons.feature.locator.patterns.Pattern; diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/RandomLocator.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/RandomLocator.java index 78df7b875..e78a620e2 100644 --- a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/RandomLocator.java +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/RandomLocator.java @@ -1,3 +1,10 @@ +/* + * Copyright (c) 2020-2021 Polyhedral Development + * + * The Terra Core Addons are licensed under the terms of the MIT License. For more details, + * reference the LICENSE file in this module's root directory. + */ + package com.dfsek.terra.addons.feature.locator.locators; import java.util.Random; diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/SurfaceLocator.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/SurfaceLocator.java index 942d45236..f2decca21 100644 --- a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/SurfaceLocator.java +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/SurfaceLocator.java @@ -1,3 +1,10 @@ +/* + * Copyright (c) 2020-2021 Polyhedral Development + * + * The Terra Core Addons are licensed under the terms of the MIT License. For more details, + * reference the LICENSE file in this module's root directory. + */ + package com.dfsek.terra.addons.feature.locator.locators; import com.dfsek.terra.api.Platform; diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/patterns/MatchPattern.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/patterns/MatchPattern.java index d305d64d8..6a661cfc2 100644 --- a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/patterns/MatchPattern.java +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/patterns/MatchPattern.java @@ -1,3 +1,10 @@ +/* + * Copyright (c) 2020-2021 Polyhedral Development + * + * The Terra Core Addons are licensed under the terms of the MIT License. For more details, + * reference the LICENSE file in this module's root directory. + */ + package com.dfsek.terra.addons.feature.locator.patterns; import java.util.function.Predicate; diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/patterns/Pattern.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/patterns/Pattern.java index 2aae3af0d..a7b18d2f4 100644 --- a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/patterns/Pattern.java +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/patterns/Pattern.java @@ -1,3 +1,10 @@ +/* + * Copyright (c) 2020-2021 Polyhedral Development + * + * The Terra Core Addons are licensed under the terms of the MIT License. For more details, + * reference the LICENSE file in this module's root directory. + */ + package com.dfsek.terra.addons.feature.locator.patterns; import com.dfsek.terra.api.world.Column; From de267a8251af343e639012d55ea6bd9e42967f79 Mon Sep 17 00:00:00 2001 From: dfsek Date: Sat, 20 Nov 2021 22:34:40 -0700 Subject: [PATCH 9/9] fix BinaryColumn --- .../feature/locator/config/SurfaceLocatorTemplate.java | 2 +- .../addons/feature/locator/locators/SurfaceLocator.java | 8 ++------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/SurfaceLocatorTemplate.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/SurfaceLocatorTemplate.java index 146bdda47..209e54b46 100644 --- a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/SurfaceLocatorTemplate.java +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/config/SurfaceLocatorTemplate.java @@ -29,6 +29,6 @@ public class SurfaceLocatorTemplate implements ObjectTemplate { @Override public Locator get() { - return new SurfaceLocator(range, platform); + return new SurfaceLocator(range); } } diff --git a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/SurfaceLocator.java b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/SurfaceLocator.java index f2decca21..6e244f55f 100644 --- a/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/SurfaceLocator.java +++ b/common/addons/config-locators/src/main/java/com/dfsek/terra/addons/feature/locator/locators/SurfaceLocator.java @@ -18,20 +18,16 @@ import com.dfsek.terra.api.world.Column; public class SurfaceLocator implements Locator { private final Range search; - private final BlockState air; - - public SurfaceLocator(Range search, Platform platform) { + public SurfaceLocator(Range search) { this.search = search; - this.air = platform.getWorldHandle().air(); } @Override public BinaryColumn getSuitableCoordinates(Column column) { BinaryColumn location = new BinaryColumn(column.getMinY(), column.getMaxY()); for(int y : search) { - if(column.getBlock(y).matches(air) && !column.getBlock(y - 1).matches(air)) { + if(column.getBlock(y).isAir() && !column.getBlock(y - 1).isAir()) { location.set(y); - return location; } } return location;