mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-06-18 23:01:03 +00:00
Implement layer samplers
This commit is contained in:
+27
-10
@@ -6,19 +6,22 @@ import org.slf4j.LoggerFactory;
|
|||||||
|
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
import com.dfsek.terra.addons.chunkgenerator.config.palette.BlockLayerPaletteTemplate;
|
|
||||||
import com.dfsek.terra.addons.chunkgenerator.config.pack.LayerPalettePackConfigTemplate;
|
|
||||||
import com.dfsek.terra.addons.chunkgenerator.config.predicate.BelowLayerPredicateTemplate;
|
|
||||||
import com.dfsek.terra.addons.chunkgenerator.config.pack.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.pack.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;
|
|
||||||
import com.dfsek.terra.addons.chunkgenerator.api.LayerPalette;
|
import com.dfsek.terra.addons.chunkgenerator.api.LayerPalette;
|
||||||
import com.dfsek.terra.addons.chunkgenerator.api.LayerPredicate;
|
import com.dfsek.terra.addons.chunkgenerator.api.LayerPredicate;
|
||||||
import com.dfsek.terra.addons.chunkgenerator.api.LayerResolver;
|
import com.dfsek.terra.addons.chunkgenerator.api.LayerResolver;
|
||||||
|
import com.dfsek.terra.addons.chunkgenerator.api.LayerSampler;
|
||||||
|
import com.dfsek.terra.addons.chunkgenerator.config.pack.LayerPalettePackConfigTemplate;
|
||||||
|
import com.dfsek.terra.addons.chunkgenerator.config.pack.LayerPredicatePackConfigTemplate;
|
||||||
|
import com.dfsek.terra.addons.chunkgenerator.config.pack.LayerResolverPackConfigTemplate;
|
||||||
|
import com.dfsek.terra.addons.chunkgenerator.config.pack.LayerSamplerPackConfigTemplate;
|
||||||
|
import com.dfsek.terra.addons.chunkgenerator.config.palette.BlockLayerPaletteTemplate;
|
||||||
|
import com.dfsek.terra.addons.chunkgenerator.config.predicate.BelowLayerPredicateTemplate;
|
||||||
|
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.PaletteLayerResolverTemplate;
|
||||||
|
import com.dfsek.terra.addons.chunkgenerator.config.resolve.PredicateLayerResolverTemplate;
|
||||||
|
import com.dfsek.terra.addons.chunkgenerator.config.sampler.SimpleLayerSamplerTemplate;
|
||||||
|
import com.dfsek.terra.addons.chunkgenerator.generation.LayeredChunkGenerator;
|
||||||
import com.dfsek.terra.addons.chunkgenerator.util.InstanceWrapper;
|
import com.dfsek.terra.addons.chunkgenerator.util.InstanceWrapper;
|
||||||
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
|
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
|
||||||
import com.dfsek.terra.api.Platform;
|
import com.dfsek.terra.api.Platform;
|
||||||
@@ -35,6 +38,12 @@ public class LayeredChunkGeneratorAddon implements AddonInitializer {
|
|||||||
|
|
||||||
private static final Logger logger = LoggerFactory.getLogger(LayeredChunkGenerator.class);
|
private static final Logger logger = LoggerFactory.getLogger(LayeredChunkGenerator.class);
|
||||||
|
|
||||||
|
public static final TypeKey<Supplier<ObjectTemplate<LayerSampler>>> LAYER_SAMPLER_TYPE_TOKEN = new TypeKey<>() {
|
||||||
|
};
|
||||||
|
|
||||||
|
public static final TypeKey<InstanceWrapper<LayerSampler>> LAYER_SAMPLER_TOKEN = new TypeKey<>() {
|
||||||
|
};
|
||||||
|
|
||||||
public static final TypeKey<Supplier<ObjectTemplate<LayerPalette>>> LAYER_PALETTE_TYPE_TOKEN = new TypeKey<>() {
|
public static final TypeKey<Supplier<ObjectTemplate<LayerPalette>>> LAYER_PALETTE_TYPE_TOKEN = new TypeKey<>() {
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -63,6 +72,14 @@ public class LayeredChunkGeneratorAddon implements AddonInitializer {
|
|||||||
.getHandler(FunctionalEventHandler.class)
|
.getHandler(FunctionalEventHandler.class)
|
||||||
.register(addon, ConfigPackPreLoadEvent.class)
|
.register(addon, ConfigPackPreLoadEvent.class)
|
||||||
.priority(1000)
|
.priority(1000)
|
||||||
|
.then(event -> {
|
||||||
|
CheckedRegistry<Supplier<ObjectTemplate<LayerSampler>>> samplerTypeRegistry = event.getPack().getOrCreateRegistry(LAYER_SAMPLER_TYPE_TOKEN);
|
||||||
|
CheckedRegistry<InstanceWrapper<LayerSampler>> samplerRegistry = event.getPack().getOrCreateRegistry(LAYER_SAMPLER_TOKEN);
|
||||||
|
samplerTypeRegistry.register(addon.key("SIMPLE"), SimpleLayerSamplerTemplate::new);
|
||||||
|
event.loadTemplate(new LayerSamplerPackConfigTemplate()).getSamplers().forEach((key, sampler) -> {
|
||||||
|
samplerRegistry.register(addon.key(key), new InstanceWrapper<>(sampler));
|
||||||
|
});
|
||||||
|
})
|
||||||
.then(event -> {
|
.then(event -> {
|
||||||
CheckedRegistry<Supplier<ObjectTemplate<LayerPalette>>> paletteTypeRegistry = event.getPack().getOrCreateRegistry(LAYER_PALETTE_TYPE_TOKEN);
|
CheckedRegistry<Supplier<ObjectTemplate<LayerPalette>>> paletteTypeRegistry = event.getPack().getOrCreateRegistry(LAYER_PALETTE_TYPE_TOKEN);
|
||||||
paletteTypeRegistry.register(addon.key("BLOCK"), BlockLayerPaletteTemplate::new);
|
paletteTypeRegistry.register(addon.key("BLOCK"), BlockLayerPaletteTemplate::new);
|
||||||
|
|||||||
+11
@@ -0,0 +1,11 @@
|
|||||||
|
package com.dfsek.terra.addons.chunkgenerator.api;
|
||||||
|
|
||||||
|
import com.dfsek.terra.api.noise.NoiseSampler;
|
||||||
|
import com.dfsek.terra.api.world.biome.Biome;
|
||||||
|
|
||||||
|
|
||||||
|
public interface LayerSampler {
|
||||||
|
double sample(long seed, Biome biome, int x, int y, int z);
|
||||||
|
|
||||||
|
NoiseSampler getSampler();
|
||||||
|
}
|
||||||
+21
@@ -0,0 +1,21 @@
|
|||||||
|
package com.dfsek.terra.addons.chunkgenerator.config.pack;
|
||||||
|
|
||||||
|
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.api.LayerSampler;
|
||||||
|
import com.dfsek.terra.api.config.meta.Meta;
|
||||||
|
|
||||||
|
|
||||||
|
public class LayerSamplerPackConfigTemplate implements ConfigTemplate {
|
||||||
|
|
||||||
|
@Value("generation.samplers")
|
||||||
|
private @Meta Map<String, LayerSampler> samplers;
|
||||||
|
|
||||||
|
public Map<String, LayerSampler> getSamplers() {
|
||||||
|
return samplers;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
+9
-3
@@ -1,21 +1,27 @@
|
|||||||
package com.dfsek.terra.addons.chunkgenerator.config.predicate;
|
package com.dfsek.terra.addons.chunkgenerator.config.predicate;
|
||||||
|
|
||||||
|
import com.dfsek.tectonic.api.config.template.annotations.Default;
|
||||||
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.terra.addons.chunkgenerator.api.LayerPredicate;
|
import com.dfsek.terra.addons.chunkgenerator.api.LayerPredicate;
|
||||||
|
import com.dfsek.terra.addons.chunkgenerator.api.LayerSampler;
|
||||||
import com.dfsek.terra.addons.chunkgenerator.layer.predicate.SamplerLayerPredicate;
|
import com.dfsek.terra.addons.chunkgenerator.layer.predicate.SamplerLayerPredicate;
|
||||||
|
import com.dfsek.terra.addons.chunkgenerator.util.InstanceWrapper;
|
||||||
import com.dfsek.terra.api.config.meta.Meta;
|
import com.dfsek.terra.api.config.meta.Meta;
|
||||||
import com.dfsek.terra.api.noise.NoiseSampler;
|
|
||||||
|
|
||||||
|
|
||||||
public class SamplerLayerPredicateTemplate implements ObjectTemplate<LayerPredicate> {
|
public class SamplerLayerPredicateTemplate implements ObjectTemplate<LayerPredicate> {
|
||||||
|
|
||||||
@Value("sampler")
|
@Value("sampler")
|
||||||
private @Meta NoiseSampler sampler;
|
private @Meta InstanceWrapper<LayerSampler> sampler;
|
||||||
|
|
||||||
|
@Value("threshold")
|
||||||
|
@Default
|
||||||
|
private double threshold = 0;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public LayerPredicate get() {
|
public LayerPredicate get() {
|
||||||
return new SamplerLayerPredicate(sampler);
|
return new SamplerLayerPredicate(sampler.get(), threshold);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+21
@@ -0,0 +1,21 @@
|
|||||||
|
package com.dfsek.terra.addons.chunkgenerator.config.sampler;
|
||||||
|
|
||||||
|
import com.dfsek.tectonic.api.config.template.annotations.Value;
|
||||||
|
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
|
||||||
|
|
||||||
|
import com.dfsek.terra.addons.chunkgenerator.api.LayerSampler;
|
||||||
|
import com.dfsek.terra.addons.chunkgenerator.layer.sampler.SimpleLayerSampler;
|
||||||
|
import com.dfsek.terra.api.config.meta.Meta;
|
||||||
|
import com.dfsek.terra.api.noise.NoiseSampler;
|
||||||
|
|
||||||
|
|
||||||
|
public class SimpleLayerSamplerTemplate implements ObjectTemplate<LayerSampler> {
|
||||||
|
|
||||||
|
@Value("sampler")
|
||||||
|
private @Meta NoiseSampler sampler;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LayerSampler get() {
|
||||||
|
return new SimpleLayerSampler(sampler);
|
||||||
|
}
|
||||||
|
}
|
||||||
+7
-5
@@ -1,21 +1,23 @@
|
|||||||
package com.dfsek.terra.addons.chunkgenerator.layer.predicate;
|
package com.dfsek.terra.addons.chunkgenerator.layer.predicate;
|
||||||
|
|
||||||
import com.dfsek.terra.addons.chunkgenerator.api.LayerPredicate;
|
import com.dfsek.terra.addons.chunkgenerator.api.LayerPredicate;
|
||||||
import com.dfsek.terra.api.noise.NoiseSampler;
|
import com.dfsek.terra.addons.chunkgenerator.api.LayerSampler;
|
||||||
import com.dfsek.terra.api.world.biome.Biome;
|
import com.dfsek.terra.api.world.biome.Biome;
|
||||||
|
|
||||||
|
|
||||||
public class SamplerLayerPredicate implements LayerPredicate {
|
public class SamplerLayerPredicate implements LayerPredicate {
|
||||||
|
|
||||||
private final NoiseSampler sampler;
|
private final LayerSampler sampler;
|
||||||
|
|
||||||
public SamplerLayerPredicate(NoiseSampler sampler) {
|
private final double threshold;
|
||||||
|
|
||||||
|
public SamplerLayerPredicate(LayerSampler sampler, double threshold) {
|
||||||
this.sampler = sampler;
|
this.sampler = sampler;
|
||||||
|
this.threshold = threshold;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean test(long seed, Biome biome, int x, int y, int z) {
|
public boolean test(long seed, Biome biome, int x, int y, int z) {
|
||||||
return sampler.noise(seed, x, y, z) > 0;
|
return sampler.sample(seed, biome, x, y, z) > threshold;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+25
@@ -0,0 +1,25 @@
|
|||||||
|
package com.dfsek.terra.addons.chunkgenerator.layer.sampler;
|
||||||
|
|
||||||
|
import com.dfsek.terra.addons.chunkgenerator.api.LayerSampler;
|
||||||
|
import com.dfsek.terra.api.noise.NoiseSampler;
|
||||||
|
import com.dfsek.terra.api.world.biome.Biome;
|
||||||
|
|
||||||
|
|
||||||
|
public class SimpleLayerSampler implements LayerSampler {
|
||||||
|
|
||||||
|
private NoiseSampler sampler;
|
||||||
|
|
||||||
|
public SimpleLayerSampler(NoiseSampler sampler) {
|
||||||
|
this.sampler = sampler;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double sample(long seed, Biome biome, int x, int y, int z) {
|
||||||
|
return sampler.noise(seed, x, y, z);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NoiseSampler getSampler() {
|
||||||
|
return sampler;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user