mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-06-18 14:50:56 +00:00
Finish initial layered generator implementation
This commit is contained in:
+21
-17
@@ -1,12 +1,18 @@
|
|||||||
package com.dfsek.terra.addons.chunkgenerator;
|
package com.dfsek.terra.addons.chunkgenerator;
|
||||||
|
|
||||||
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
|
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.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.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.RangeLayerPredicateTemplate;
|
||||||
import com.dfsek.terra.addons.chunkgenerator.config.predicate.SamplerLayerPredicateTemplate;
|
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.PaletteLayerResolverTemplate;
|
||||||
import com.dfsek.terra.addons.chunkgenerator.config.resolve.PredicateLayerResolverTemplate;
|
import com.dfsek.terra.addons.chunkgenerator.config.resolve.PredicateLayerResolverTemplate;
|
||||||
import com.dfsek.terra.addons.chunkgenerator.generation.LayeredChunkGenerator;
|
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.events.config.pack.ConfigPackPreLoadEvent;
|
||||||
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
||||||
import com.dfsek.terra.api.inject.annotations.Inject;
|
import com.dfsek.terra.api.inject.annotations.Inject;
|
||||||
|
|
||||||
import com.dfsek.terra.api.registry.CheckedRegistry;
|
import com.dfsek.terra.api.registry.CheckedRegistry;
|
||||||
import com.dfsek.terra.api.util.reflection.TypeKey;
|
import com.dfsek.terra.api.util.reflection.TypeKey;
|
||||||
import com.dfsek.terra.api.world.chunk.generation.util.provider.ChunkGeneratorProvider;
|
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 {
|
public class LayeredChunkGeneratorAddon implements AddonInitializer {
|
||||||
|
|
||||||
@@ -51,34 +51,38 @@ public class LayeredChunkGeneratorAddon implements AddonInitializer {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize() {
|
public void initialize() {
|
||||||
|
|
||||||
|
LayerPalettePackConfigTemplate paletteConfig = new LayerPalettePackConfigTemplate();
|
||||||
|
LayerPredicatePackConfigTemplate predicateConfig = new LayerPredicatePackConfigTemplate();
|
||||||
|
LayerResolverPackConfigTemplate resolverConfig = new LayerResolverPackConfigTemplate();
|
||||||
|
|
||||||
platform.getEventManager()
|
platform.getEventManager()
|
||||||
.getHandler(FunctionalEventHandler.class)
|
.getHandler(FunctionalEventHandler.class)
|
||||||
.register(addon, ConfigPackPreLoadEvent.class)
|
.register(addon, ConfigPackPreLoadEvent.class)
|
||||||
.priority(50)
|
.priority(1000)
|
||||||
.then(event -> {
|
.then(event -> {
|
||||||
CheckedRegistry<Supplier<ObjectTemplate<LayerPalette>>> paletteRegistry = event.getPack().getOrCreateRegistry(LAYER_PALETTE_TOKEN);
|
CheckedRegistry<Supplier<ObjectTemplate<LayerPalette>>> paletteRegistry = event.getPack().getOrCreateRegistry(LAYER_PALETTE_TOKEN);
|
||||||
paletteRegistry.register(addon.key("BLOCK"), BlockLayerPaletteTemplate::new);
|
paletteRegistry.register(addon.key("BLOCK"), BlockLayerPaletteTemplate::new);
|
||||||
})
|
event.loadTemplate(paletteConfig);
|
||||||
.then(event -> {
|
|
||||||
logger.info("Registering LayerResolvers..");
|
|
||||||
LayeredChunkGeneratorPackConfigTemplate config = event.loadTemplate(new LayeredChunkGeneratorPackConfigTemplate());
|
|
||||||
CheckedRegistry<Supplier<ObjectTemplate<LayerResolver>>> resolverRegistry = event.getPack().getOrCreateRegistry(LAYER_RESOLVER_TOKEN);
|
|
||||||
resolverRegistry.register(addon.key("PREDICATE"), PredicateLayerResolverTemplate::new);
|
|
||||||
resolverRegistry.register(addon.key("PALETTE"), () -> new PaletteLayerResolverTemplate(config.getPalettes()));
|
|
||||||
})
|
})
|
||||||
.then(event -> {
|
.then(event -> {
|
||||||
CheckedRegistry<Supplier<ObjectTemplate<LayerPredicate>>> predicateRegistry = event.getPack().getOrCreateRegistry(LAYER_PREDICATE_TOKEN);
|
CheckedRegistry<Supplier<ObjectTemplate<LayerPredicate>>> predicateRegistry = event.getPack().getOrCreateRegistry(LAYER_PREDICATE_TOKEN);
|
||||||
predicateRegistry.register(addon.key("BELOW"), BelowLayerPredicateTemplate::new);
|
predicateRegistry.register(addon.key("BELOW"), BelowLayerPredicateTemplate::new);
|
||||||
predicateRegistry.register(addon.key("RANGE"), RangeLayerPredicateTemplate::new);
|
predicateRegistry.register(addon.key("RANGE"), RangeLayerPredicateTemplate::new);
|
||||||
predicateRegistry.register(addon.key("SAMPLER"), SamplerLayerPredicateTemplate::new);
|
predicateRegistry.register(addon.key("SAMPLER"), SamplerLayerPredicateTemplate::new);
|
||||||
|
event.loadTemplate(predicateConfig);
|
||||||
|
})
|
||||||
|
.then(event -> {
|
||||||
|
CheckedRegistry<Supplier<ObjectTemplate<LayerResolver>>> 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 -> {
|
.then(event -> {
|
||||||
LayeredChunkGeneratorPackConfigTemplate config = event.loadTemplate(new LayeredChunkGeneratorPackConfigTemplate());
|
|
||||||
event.getPack()
|
event.getPack()
|
||||||
.getOrCreateRegistry(ChunkGeneratorProvider.class)
|
.getOrCreateRegistry(ChunkGeneratorProvider.class)
|
||||||
.register(addon.key("LAYERED"),
|
.register(addon.key("LAYERED"),
|
||||||
pack -> new LayeredChunkGenerator(platform, config.getResolver()));
|
pack -> new LayeredChunkGenerator(platform, resolverConfig.getResolver()));
|
||||||
})
|
})
|
||||||
.failThrough();
|
.failThrough();
|
||||||
}
|
}
|
||||||
|
|||||||
-36
@@ -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<String, LayerPalette> palettes;
|
|
||||||
|
|
||||||
public Map<String, LayerPalette> getPalettes() {
|
|
||||||
return palettes;
|
|
||||||
}
|
|
||||||
|
|
||||||
public NoiseSampler getSampler() {
|
|
||||||
return sampler;
|
|
||||||
}
|
|
||||||
|
|
||||||
public LayerResolver getResolver() {
|
|
||||||
return resolver;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+21
@@ -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<String, LayerPalette> palettes;
|
||||||
|
|
||||||
|
public Map<String, LayerPalette> getPalettes() {
|
||||||
|
return palettes;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
+21
@@ -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<String, LayerPredicate> predicates;
|
||||||
|
|
||||||
|
public Map<String, LayerPredicate> getPredicates() {
|
||||||
|
return predicates;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
+18
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
+19
-4
@@ -1,8 +1,11 @@
|
|||||||
package com.dfsek.terra.addons.chunkgenerator.config.resolve;
|
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.annotations.Value;
|
||||||
|
|
||||||
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
|
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.predicate.LayerPredicate;
|
||||||
import com.dfsek.terra.addons.chunkgenerator.layer.resolve.LayerResolver;
|
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;
|
import com.dfsek.terra.api.config.meta.Meta;
|
||||||
|
|
||||||
|
|
||||||
public class PredicateLayerResolverTemplate implements ObjectTemplate<LayerResolver> {
|
public class PredicateLayerResolverTemplate implements ObjectTemplate<LayerResolver>, ValidatedConfigTemplate {
|
||||||
|
|
||||||
|
private final Map<String, LayerPredicate> predicates;
|
||||||
|
|
||||||
|
public PredicateLayerResolverTemplate(Map<String, LayerPredicate> predicates) {
|
||||||
|
this.predicates = predicates;
|
||||||
|
}
|
||||||
|
|
||||||
@Value("if")
|
@Value("if")
|
||||||
private @Meta LayerPredicate predicate;
|
private @Meta String predicate;
|
||||||
|
|
||||||
@Value("then")
|
@Value("then")
|
||||||
private @Meta LayerResolver trueResolver;
|
private @Meta LayerResolver trueResolver;
|
||||||
@@ -24,6 +33,12 @@ public class PredicateLayerResolverTemplate implements ObjectTemplate<LayerResol
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PredicateLayerResolver get() {
|
public PredicateLayerResolver get() {
|
||||||
return new PredicateLayerResolver(predicate, trueResolver, falseResolver);
|
return new PredicateLayerResolver(predicates.get(predicate), trueResolver, falseResolver);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean validate() throws ValidationException {
|
||||||
|
if (!predicates.containsKey(predicate)) throw new ValidationException("The predicate " + predicate + " does not exist!");
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-5
@@ -1,5 +1,7 @@
|
|||||||
package com.dfsek.terra.addons.chunkgenerator.generation;
|
package com.dfsek.terra.addons.chunkgenerator.generation;
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import com.dfsek.terra.addons.chunkgenerator.layer.palette.LayerPalette;
|
import com.dfsek.terra.addons.chunkgenerator.layer.palette.LayerPalette;
|
||||||
import com.dfsek.terra.addons.chunkgenerator.layer.resolve.LayerResolver;
|
import com.dfsek.terra.addons.chunkgenerator.layer.resolve.LayerResolver;
|
||||||
import com.dfsek.terra.api.Platform;
|
import com.dfsek.terra.api.Platform;
|
||||||
@@ -12,8 +14,6 @@ import com.dfsek.terra.api.world.chunk.generation.ProtoChunk;
|
|||||||
import com.dfsek.terra.api.world.chunk.generation.util.Palette;
|
import com.dfsek.terra.api.world.chunk.generation.util.Palette;
|
||||||
import com.dfsek.terra.api.world.info.WorldProperties;
|
import com.dfsek.terra.api.world.info.WorldProperties;
|
||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
|
|
||||||
public class LayeredChunkGenerator implements ChunkGenerator {
|
public class LayeredChunkGenerator implements ChunkGenerator {
|
||||||
|
|
||||||
@@ -48,7 +48,7 @@ public class LayeredChunkGenerator implements ChunkGenerator {
|
|||||||
|
|
||||||
Biome biome = biomeColumn.get(y);
|
Biome biome = biomeColumn.get(y);
|
||||||
|
|
||||||
LayerPalette layerPalette = resolver.resolve(seed, biome, x, y, z);
|
LayerPalette layerPalette = resolver.resolve(seed, biome, cx, y, cz);
|
||||||
|
|
||||||
if (previousLayerPalette == layerPalette) {
|
if (previousLayerPalette == layerPalette) {
|
||||||
paletteLevel++;
|
paletteLevel++;
|
||||||
@@ -57,9 +57,9 @@ public class LayeredChunkGenerator implements ChunkGenerator {
|
|||||||
}
|
}
|
||||||
previousLayerPalette = layerPalette;
|
previousLayerPalette = layerPalette;
|
||||||
|
|
||||||
Palette palette = layerPalette.get(seed, biome, x, y, z);
|
Palette palette = layerPalette.get(seed, biome, cx, y, cz);
|
||||||
|
|
||||||
chunk.setBlock(cx, y, cz, palette.get(paletteLevel, x, y, z, seed));
|
chunk.setBlock(cx, y, cz, palette.get(paletteLevel, cx, y, cz, seed));
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
-2
@@ -2,8 +2,6 @@ package com.dfsek.terra.addons.chunkgenerator.layer.palette;
|
|||||||
|
|
||||||
import com.dfsek.terra.api.world.biome.Biome;
|
import com.dfsek.terra.api.world.biome.Biome;
|
||||||
import com.dfsek.terra.api.world.chunk.generation.util.Palette;
|
import com.dfsek.terra.api.world.chunk.generation.util.Palette;
|
||||||
import com.dfsek.terra.api.world.info.WorldProperties;
|
|
||||||
|
|
||||||
|
|
||||||
public interface LayerPalette {
|
public interface LayerPalette {
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user