From 2a9d94094cd62d6f07e31ee5af5dd5f8b9aab502 Mon Sep 17 00:00:00 2001 From: Astrash Date: Tue, 12 Jul 2022 13:15:27 +1000 Subject: [PATCH] Finish initial layered generator implementation --- .../LayeredChunkGeneratorAddon.java | 38 ++++++++++--------- ...yeredChunkGeneratorPackConfigTemplate.java | 36 ------------------ .../LayerPalettePackConfigTemplate.java | 21 ++++++++++ .../LayerPredicatePackConfigTemplate.java | 21 ++++++++++ .../LayerResolverPackConfigTemplate.java | 18 +++++++++ .../PredicateLayerResolverTemplate.java | 23 +++++++++-- .../generation/LayeredChunkGenerator.java | 10 ++--- .../layer/palette/LayerPalette.java | 2 - 8 files changed, 105 insertions(+), 64 deletions(-) delete mode 100644 common/addons/chunk-generator-layered/src/main/java/com/dfsek/terra/addons/chunkgenerator/config/LayeredChunkGeneratorPackConfigTemplate.java create mode 100644 common/addons/chunk-generator-layered/src/main/java/com/dfsek/terra/addons/chunkgenerator/config/palette/LayerPalettePackConfigTemplate.java create mode 100644 common/addons/chunk-generator-layered/src/main/java/com/dfsek/terra/addons/chunkgenerator/config/predicate/LayerPredicatePackConfigTemplate.java create mode 100644 common/addons/chunk-generator-layered/src/main/java/com/dfsek/terra/addons/chunkgenerator/config/resolve/LayerResolverPackConfigTemplate.java diff --git a/common/addons/chunk-generator-layered/src/main/java/com/dfsek/terra/addons/chunkgenerator/LayeredChunkGeneratorAddon.java b/common/addons/chunk-generator-layered/src/main/java/com/dfsek/terra/addons/chunkgenerator/LayeredChunkGeneratorAddon.java index 850bcffd3..4b03f5121 100644 --- a/common/addons/chunk-generator-layered/src/main/java/com/dfsek/terra/addons/chunkgenerator/LayeredChunkGeneratorAddon.java +++ b/common/addons/chunk-generator-layered/src/main/java/com/dfsek/terra/addons/chunkgenerator/LayeredChunkGeneratorAddon.java @@ -1,12 +1,18 @@ package com.dfsek.terra.addons.chunkgenerator; import com.dfsek.tectonic.api.config.template.object.ObjectTemplate; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.function.Supplier; -import com.dfsek.terra.addons.chunkgenerator.config.LayeredChunkGeneratorPackConfigTemplate; import com.dfsek.terra.addons.chunkgenerator.config.palette.BlockLayerPaletteTemplate; +import com.dfsek.terra.addons.chunkgenerator.config.palette.LayerPalettePackConfigTemplate; import com.dfsek.terra.addons.chunkgenerator.config.predicate.BelowLayerPredicateTemplate; +import com.dfsek.terra.addons.chunkgenerator.config.predicate.LayerPredicatePackConfigTemplate; import com.dfsek.terra.addons.chunkgenerator.config.predicate.RangeLayerPredicateTemplate; import com.dfsek.terra.addons.chunkgenerator.config.predicate.SamplerLayerPredicateTemplate; +import com.dfsek.terra.addons.chunkgenerator.config.resolve.LayerResolverPackConfigTemplate; import com.dfsek.terra.addons.chunkgenerator.config.resolve.PaletteLayerResolverTemplate; import com.dfsek.terra.addons.chunkgenerator.config.resolve.PredicateLayerResolverTemplate; import com.dfsek.terra.addons.chunkgenerator.generation.LayeredChunkGenerator; @@ -19,16 +25,10 @@ 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; - import com.dfsek.terra.api.registry.CheckedRegistry; import com.dfsek.terra.api.util.reflection.TypeKey; import com.dfsek.terra.api.world.chunk.generation.util.provider.ChunkGeneratorProvider; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.function.Supplier; - public class LayeredChunkGeneratorAddon implements AddonInitializer { @@ -51,34 +51,38 @@ public class LayeredChunkGeneratorAddon implements AddonInitializer { @Override public void initialize() { + + LayerPalettePackConfigTemplate paletteConfig = new LayerPalettePackConfigTemplate(); + LayerPredicatePackConfigTemplate predicateConfig = new LayerPredicatePackConfigTemplate(); + LayerResolverPackConfigTemplate resolverConfig = new LayerResolverPackConfigTemplate(); platform.getEventManager() .getHandler(FunctionalEventHandler.class) .register(addon, ConfigPackPreLoadEvent.class) - .priority(50) + .priority(1000) .then(event -> { CheckedRegistry>> paletteRegistry = event.getPack().getOrCreateRegistry(LAYER_PALETTE_TOKEN); paletteRegistry.register(addon.key("BLOCK"), BlockLayerPaletteTemplate::new); - }) - .then(event -> { - logger.info("Registering LayerResolvers.."); - LayeredChunkGeneratorPackConfigTemplate config = event.loadTemplate(new LayeredChunkGeneratorPackConfigTemplate()); - CheckedRegistry>> resolverRegistry = event.getPack().getOrCreateRegistry(LAYER_RESOLVER_TOKEN); - resolverRegistry.register(addon.key("PREDICATE"), PredicateLayerResolverTemplate::new); - resolverRegistry.register(addon.key("PALETTE"), () -> new PaletteLayerResolverTemplate(config.getPalettes())); + event.loadTemplate(paletteConfig); }) .then(event -> { CheckedRegistry>> predicateRegistry = event.getPack().getOrCreateRegistry(LAYER_PREDICATE_TOKEN); predicateRegistry.register(addon.key("BELOW"), BelowLayerPredicateTemplate::new); predicateRegistry.register(addon.key("RANGE"), RangeLayerPredicateTemplate::new); predicateRegistry.register(addon.key("SAMPLER"), SamplerLayerPredicateTemplate::new); + event.loadTemplate(predicateConfig); + }) + .then(event -> { + CheckedRegistry>> resolverRegistry = event.getPack().getOrCreateRegistry(LAYER_RESOLVER_TOKEN); + resolverRegistry.register(addon.key("TEST_PREDICATE"), () -> new PredicateLayerResolverTemplate(predicateConfig.getPredicates())); + resolverRegistry.register(addon.key("USE_PALETTE"), () -> new PaletteLayerResolverTemplate(paletteConfig.getPalettes())); + event.loadTemplate(resolverConfig); }) .then(event -> { - LayeredChunkGeneratorPackConfigTemplate config = event.loadTemplate(new LayeredChunkGeneratorPackConfigTemplate()); event.getPack() .getOrCreateRegistry(ChunkGeneratorProvider.class) .register(addon.key("LAYERED"), - pack -> new LayeredChunkGenerator(platform, config.getResolver())); + pack -> new LayeredChunkGenerator(platform, resolverConfig.getResolver())); }) .failThrough(); } diff --git a/common/addons/chunk-generator-layered/src/main/java/com/dfsek/terra/addons/chunkgenerator/config/LayeredChunkGeneratorPackConfigTemplate.java b/common/addons/chunk-generator-layered/src/main/java/com/dfsek/terra/addons/chunkgenerator/config/LayeredChunkGeneratorPackConfigTemplate.java deleted file mode 100644 index 0363cd420..000000000 --- a/common/addons/chunk-generator-layered/src/main/java/com/dfsek/terra/addons/chunkgenerator/config/LayeredChunkGeneratorPackConfigTemplate.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.dfsek.terra.addons.chunkgenerator.config; - -import com.dfsek.tectonic.api.config.template.ConfigTemplate; -import com.dfsek.tectonic.api.config.template.annotations.Default; -import com.dfsek.tectonic.api.config.template.annotations.Value; - -import com.dfsek.terra.addons.chunkgenerator.layer.palette.LayerPalette; -import com.dfsek.terra.addons.chunkgenerator.layer.resolve.LayerResolver; -import com.dfsek.terra.api.config.meta.Meta; -import com.dfsek.terra.api.noise.NoiseSampler; - -import java.util.Map; - - -public class LayeredChunkGeneratorPackConfigTemplate implements ConfigTemplate { - @Value("generation.sampler") - private @Meta NoiseSampler sampler; - - @Value("generation.resolver") - private @Meta LayerResolver resolver; - - @Value("generation.palettes") - private @Meta Map palettes; - - public Map getPalettes() { - return palettes; - } - - public NoiseSampler getSampler() { - return sampler; - } - - public LayerResolver getResolver() { - return resolver; - } -} diff --git a/common/addons/chunk-generator-layered/src/main/java/com/dfsek/terra/addons/chunkgenerator/config/palette/LayerPalettePackConfigTemplate.java b/common/addons/chunk-generator-layered/src/main/java/com/dfsek/terra/addons/chunkgenerator/config/palette/LayerPalettePackConfigTemplate.java new file mode 100644 index 000000000..e68a0628d --- /dev/null +++ b/common/addons/chunk-generator-layered/src/main/java/com/dfsek/terra/addons/chunkgenerator/config/palette/LayerPalettePackConfigTemplate.java @@ -0,0 +1,21 @@ +package com.dfsek.terra.addons.chunkgenerator.config.palette; + +import com.dfsek.tectonic.api.config.template.ConfigTemplate; +import com.dfsek.tectonic.api.config.template.annotations.Value; + +import java.util.Map; + +import com.dfsek.terra.addons.chunkgenerator.layer.palette.LayerPalette; +import com.dfsek.terra.api.config.meta.Meta; + + +public class LayerPalettePackConfigTemplate implements ConfigTemplate { + + @Value("generation.palettes") + private @Meta Map palettes; + + public Map getPalettes() { + return palettes; + } + +} diff --git a/common/addons/chunk-generator-layered/src/main/java/com/dfsek/terra/addons/chunkgenerator/config/predicate/LayerPredicatePackConfigTemplate.java b/common/addons/chunk-generator-layered/src/main/java/com/dfsek/terra/addons/chunkgenerator/config/predicate/LayerPredicatePackConfigTemplate.java new file mode 100644 index 000000000..fbddab2c0 --- /dev/null +++ b/common/addons/chunk-generator-layered/src/main/java/com/dfsek/terra/addons/chunkgenerator/config/predicate/LayerPredicatePackConfigTemplate.java @@ -0,0 +1,21 @@ +package com.dfsek.terra.addons.chunkgenerator.config.predicate; + +import com.dfsek.tectonic.api.config.template.ConfigTemplate; +import com.dfsek.tectonic.api.config.template.annotations.Value; + +import java.util.Map; + +import com.dfsek.terra.addons.chunkgenerator.layer.predicate.LayerPredicate; +import com.dfsek.terra.api.config.meta.Meta; + + +public class LayerPredicatePackConfigTemplate implements ConfigTemplate { + + @Value("generation.predicates") + private @Meta Map predicates; + + public Map getPredicates() { + return predicates; + } + +} diff --git a/common/addons/chunk-generator-layered/src/main/java/com/dfsek/terra/addons/chunkgenerator/config/resolve/LayerResolverPackConfigTemplate.java b/common/addons/chunk-generator-layered/src/main/java/com/dfsek/terra/addons/chunkgenerator/config/resolve/LayerResolverPackConfigTemplate.java new file mode 100644 index 000000000..8f848a27a --- /dev/null +++ b/common/addons/chunk-generator-layered/src/main/java/com/dfsek/terra/addons/chunkgenerator/config/resolve/LayerResolverPackConfigTemplate.java @@ -0,0 +1,18 @@ +package com.dfsek.terra.addons.chunkgenerator.config.resolve; + +import com.dfsek.tectonic.api.config.template.ConfigTemplate; +import com.dfsek.tectonic.api.config.template.annotations.Value; + +import com.dfsek.terra.addons.chunkgenerator.layer.resolve.LayerResolver; +import com.dfsek.terra.api.config.meta.Meta; + + +public class LayerResolverPackConfigTemplate implements ConfigTemplate { + + @Value("generation.resolver") + private @Meta LayerResolver resolver; + + public LayerResolver getResolver() { + return resolver; + } +} diff --git a/common/addons/chunk-generator-layered/src/main/java/com/dfsek/terra/addons/chunkgenerator/config/resolve/PredicateLayerResolverTemplate.java b/common/addons/chunk-generator-layered/src/main/java/com/dfsek/terra/addons/chunkgenerator/config/resolve/PredicateLayerResolverTemplate.java index 3e4da4d6e..03a9c3346 100644 --- a/common/addons/chunk-generator-layered/src/main/java/com/dfsek/terra/addons/chunkgenerator/config/resolve/PredicateLayerResolverTemplate.java +++ b/common/addons/chunk-generator-layered/src/main/java/com/dfsek/terra/addons/chunkgenerator/config/resolve/PredicateLayerResolverTemplate.java @@ -1,8 +1,11 @@ package com.dfsek.terra.addons.chunkgenerator.config.resolve; +import com.dfsek.tectonic.api.config.template.ValidatedConfigTemplate; import com.dfsek.tectonic.api.config.template.annotations.Value; - import com.dfsek.tectonic.api.config.template.object.ObjectTemplate; +import com.dfsek.tectonic.api.exception.ValidationException; + +import java.util.Map; import com.dfsek.terra.addons.chunkgenerator.layer.predicate.LayerPredicate; import com.dfsek.terra.addons.chunkgenerator.layer.resolve.LayerResolver; @@ -10,10 +13,16 @@ import com.dfsek.terra.addons.chunkgenerator.layer.resolve.PredicateLayerResolve import com.dfsek.terra.api.config.meta.Meta; -public class PredicateLayerResolverTemplate implements ObjectTemplate { +public class PredicateLayerResolverTemplate implements ObjectTemplate, ValidatedConfigTemplate { + + private final Map predicates; + + public PredicateLayerResolverTemplate(Map predicates) { + this.predicates = predicates; + } @Value("if") - private @Meta LayerPredicate predicate; + private @Meta String predicate; @Value("then") private @Meta LayerResolver trueResolver; @@ -24,6 +33,12 @@ public class PredicateLayerResolverTemplate implements ObjectTemplate