From e2ba6716263db7a7548f2446c1ca4c7292df353d Mon Sep 17 00:00:00 2001 From: dfsek Date: Sat, 11 Jun 2022 02:46:59 -0700 Subject: [PATCH] add replace extrusion --- .../biome/extrusion/BiomeExtrusionAddon.java | 6 ++- .../extrusions/ReplaceExtrusionTemplate.java | 24 +++++++++ .../extrusions/SamplerExtrusionTemplate.java | 5 +- .../extrusions/SetExtrusionTemplate.java | 5 +- .../extrusions/ReplaceExtrusion.java | 49 +++++++++++++++++++ 5 files changed, 83 insertions(+), 6 deletions(-) create mode 100644 common/addons/biome-provider-extrusion/src/main/java/com/dfsek/terra/addons/biome/extrusion/config/extrusions/ReplaceExtrusionTemplate.java create mode 100644 common/addons/biome-provider-extrusion/src/main/java/com/dfsek/terra/addons/biome/extrusion/extrusions/ReplaceExtrusion.java diff --git a/common/addons/biome-provider-extrusion/src/main/java/com/dfsek/terra/addons/biome/extrusion/BiomeExtrusionAddon.java b/common/addons/biome-provider-extrusion/src/main/java/com/dfsek/terra/addons/biome/extrusion/BiomeExtrusionAddon.java index e2465b362..5d8b1275b 100644 --- a/common/addons/biome-provider-extrusion/src/main/java/com/dfsek/terra/addons/biome/extrusion/BiomeExtrusionAddon.java +++ b/common/addons/biome-provider-extrusion/src/main/java/com/dfsek/terra/addons/biome/extrusion/BiomeExtrusionAddon.java @@ -6,6 +6,7 @@ import com.dfsek.terra.addons.biome.extrusion.api.Extrusion; import com.dfsek.terra.addons.biome.extrusion.api.ReplaceableBiome; import com.dfsek.terra.addons.biome.extrusion.config.BiomeExtrusionTemplate; import com.dfsek.terra.addons.biome.extrusion.config.ReplaceableBiomeLoader; +import com.dfsek.terra.addons.biome.extrusion.config.extrusions.ReplaceExtrusionTemplate; import com.dfsek.terra.addons.biome.extrusion.config.extrusions.SetExtrusionTemplate; import com.dfsek.terra.addons.biome.extrusion.extrusions.SetExtrusion; import com.dfsek.terra.addons.manifest.api.AddonInitializer; @@ -49,9 +50,10 @@ public class BiomeExtrusionAddon implements AddonInitializer { providerRegistry.register(addon.key("EXTRUSION"), BiomeExtrusionTemplate::new); }) .then(event -> { - CheckedRegistry>> sourceRegistry = event.getPack().getOrCreateRegistry( + CheckedRegistry>> extrusionRegistry = event.getPack().getOrCreateRegistry( EXTRUSION_REGISTRY_KEY); - sourceRegistry.register(addon.key("SET"), SetExtrusionTemplate::new); + extrusionRegistry.register(addon.key("SET"), SetExtrusionTemplate::new); + extrusionRegistry.register(addon.key("REPLACE"), ReplaceExtrusionTemplate::new); }) .failThrough(); diff --git a/common/addons/biome-provider-extrusion/src/main/java/com/dfsek/terra/addons/biome/extrusion/config/extrusions/ReplaceExtrusionTemplate.java b/common/addons/biome-provider-extrusion/src/main/java/com/dfsek/terra/addons/biome/extrusion/config/extrusions/ReplaceExtrusionTemplate.java new file mode 100644 index 000000000..de5127b81 --- /dev/null +++ b/common/addons/biome-provider-extrusion/src/main/java/com/dfsek/terra/addons/biome/extrusion/config/extrusions/ReplaceExtrusionTemplate.java @@ -0,0 +1,24 @@ +package com.dfsek.terra.addons.biome.extrusion.config.extrusions; + +import com.dfsek.tectonic.api.config.template.annotations.Value; + +import com.dfsek.terra.addons.biome.extrusion.api.Extrusion; +import com.dfsek.terra.addons.biome.extrusion.api.ReplaceableBiome; +import com.dfsek.terra.addons.biome.extrusion.extrusions.ReplaceExtrusion; +import com.dfsek.terra.addons.biome.extrusion.extrusions.SetExtrusion; +import com.dfsek.terra.api.config.meta.Meta; +import com.dfsek.terra.api.util.collection.ProbabilityCollection; + + +public class ReplaceExtrusionTemplate extends SamplerExtrusionTemplate { + @Value("to") + private @Meta ProbabilityCollection<@Meta ReplaceableBiome> biomes; + + @Value("from") + private @Meta String fromTag; + + @Override + public Extrusion get() { + return new ReplaceExtrusion(sampler, range, biomes, fromTag); + } +} diff --git a/common/addons/biome-provider-extrusion/src/main/java/com/dfsek/terra/addons/biome/extrusion/config/extrusions/SamplerExtrusionTemplate.java b/common/addons/biome-provider-extrusion/src/main/java/com/dfsek/terra/addons/biome/extrusion/config/extrusions/SamplerExtrusionTemplate.java index d0315be4e..d21ef0f64 100644 --- a/common/addons/biome-provider-extrusion/src/main/java/com/dfsek/terra/addons/biome/extrusion/config/extrusions/SamplerExtrusionTemplate.java +++ b/common/addons/biome-provider-extrusion/src/main/java/com/dfsek/terra/addons/biome/extrusion/config/extrusions/SamplerExtrusionTemplate.java @@ -4,14 +4,15 @@ import com.dfsek.tectonic.api.config.template.annotations.Value; import com.dfsek.tectonic.api.config.template.object.ObjectTemplate; import com.dfsek.terra.addons.biome.extrusion.api.Extrusion; +import com.dfsek.terra.api.config.meta.Meta; import com.dfsek.terra.api.noise.NoiseSampler; import com.dfsek.terra.api.util.Range; public abstract class SamplerExtrusionTemplate implements ObjectTemplate { @Value("sampler") - protected NoiseSampler sampler; + protected @Meta NoiseSampler sampler; @Value("range") - protected Range range; + protected @Meta Range range; } diff --git a/common/addons/biome-provider-extrusion/src/main/java/com/dfsek/terra/addons/biome/extrusion/config/extrusions/SetExtrusionTemplate.java b/common/addons/biome-provider-extrusion/src/main/java/com/dfsek/terra/addons/biome/extrusion/config/extrusions/SetExtrusionTemplate.java index 90a4b05ad..1cfbaeb48 100644 --- a/common/addons/biome-provider-extrusion/src/main/java/com/dfsek/terra/addons/biome/extrusion/config/extrusions/SetExtrusionTemplate.java +++ b/common/addons/biome-provider-extrusion/src/main/java/com/dfsek/terra/addons/biome/extrusion/config/extrusions/SetExtrusionTemplate.java @@ -5,12 +5,13 @@ import com.dfsek.tectonic.api.config.template.annotations.Value; import com.dfsek.terra.addons.biome.extrusion.api.Extrusion; import com.dfsek.terra.addons.biome.extrusion.api.ReplaceableBiome; import com.dfsek.terra.addons.biome.extrusion.extrusions.SetExtrusion; +import com.dfsek.terra.api.config.meta.Meta; import com.dfsek.terra.api.util.collection.ProbabilityCollection; public class SetExtrusionTemplate extends SamplerExtrusionTemplate { - @Value("biomes") - private ProbabilityCollection biomes; + @Value("to") + private @Meta ProbabilityCollection<@Meta ReplaceableBiome> biomes; @Override public Extrusion get() { diff --git a/common/addons/biome-provider-extrusion/src/main/java/com/dfsek/terra/addons/biome/extrusion/extrusions/ReplaceExtrusion.java b/common/addons/biome-provider-extrusion/src/main/java/com/dfsek/terra/addons/biome/extrusion/extrusions/ReplaceExtrusion.java new file mode 100644 index 000000000..91efd92aa --- /dev/null +++ b/common/addons/biome-provider-extrusion/src/main/java/com/dfsek/terra/addons/biome/extrusion/extrusions/ReplaceExtrusion.java @@ -0,0 +1,49 @@ +package com.dfsek.terra.addons.biome.extrusion.extrusions; + +import com.dfsek.terra.addons.biome.extrusion.api.Extrusion; +import com.dfsek.terra.addons.biome.extrusion.api.ReplaceableBiome; +import com.dfsek.terra.api.noise.NoiseSampler; +import com.dfsek.terra.api.util.Range; +import com.dfsek.terra.api.util.collection.ProbabilityCollection; +import com.dfsek.terra.api.world.biome.Biome; + +import java.util.Collection; +import java.util.function.Predicate; +import java.util.stream.Collectors; + + +/** + * Sets biomes at locations based on a sampler. + */ +public class ReplaceExtrusion implements Extrusion { + private final NoiseSampler sampler; + + private final Range range; + + private final ProbabilityCollection biomes; + + private final String tag; + + public ReplaceExtrusion(NoiseSampler sampler, Range range, ProbabilityCollection biomes, String tag) { + this.sampler = sampler; + this.range = range; + this.biomes = biomes; + this.tag = tag; + } + + @Override + public Biome extrude(Biome original, int x, int y, int z, long seed) { + if(!original.getTags().contains(tag)) return original; + return range.ifInRange(y, () -> biomes.get(sampler, x, y, z, seed).get(original), original); + } + + @Override + public Collection getBiomes() { + return biomes + .getContents() + .stream() + .filter(Predicate.not(ReplaceableBiome::isSelf)) + .map(ReplaceableBiome::get) + .collect(Collectors.toSet()); + } +}