From e60a8a109b11567bfd55c209fb84cab68ea7b48c Mon Sep 17 00:00:00 2001 From: dfsek Date: Sun, 5 Dec 2021 17:26:32 -0700 Subject: [PATCH] implement biome delegates in pipeline --- .../biome/pipeline/BiomeHolderImpl.java | 15 +++--- .../biome/pipeline/BiomePipelineProvider.java | 46 +++++++++++-------- .../biome/pipeline/api/BiomeDelegate.java | 25 ++++++++++ .../biome/pipeline/api/BiomeExpander.java | 2 +- .../biome/pipeline/api/BiomeHolder.java | 4 +- .../biome/pipeline/api/BiomeMutator.java | 6 +-- .../addons/biome/pipeline/api/Stage.java | 2 +- .../mutator/BorderListMutatorTemplate.java | 5 +- .../stage/mutator/BorderMutatorTemplate.java | 3 +- .../mutator/ReplaceListMutatorTemplate.java | 5 +- .../stage/mutator/ReplaceMutatorTemplate.java | 3 +- .../pipeline/expand/FractalExpander.java | 3 +- .../pipeline/mutator/BorderListMutator.java | 23 +++++----- .../biome/pipeline/mutator/BorderMutator.java | 17 +++---- .../pipeline/mutator/ReplaceListMutator.java | 34 +++++++------- .../pipeline/mutator/ReplaceMutator.java | 15 +++--- .../biome/pipeline/mutator/SmoothMutator.java | 11 +++-- .../biome/pipeline/stages/ExpanderStage.java | 3 +- .../biome/pipeline/stages/MutatorStage.java | 3 +- 19 files changed, 135 insertions(+), 90 deletions(-) diff --git a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomeHolderImpl.java b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomeHolderImpl.java index 8b4f50015..eb309599e 100644 --- a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomeHolderImpl.java +++ b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomeHolderImpl.java @@ -7,6 +7,7 @@ package com.dfsek.terra.addons.biome.pipeline; +import com.dfsek.terra.addons.biome.pipeline.api.BiomeDelegate; import com.dfsek.terra.addons.biome.pipeline.api.BiomeExpander; import com.dfsek.terra.addons.biome.pipeline.api.BiomeHolder; import com.dfsek.terra.addons.biome.pipeline.api.BiomeMutator; @@ -19,17 +20,17 @@ public class BiomeHolderImpl implements BiomeHolder { private final Vector2 origin; private final int width; private final int offset; - private Biome[][] biomes; + private BiomeDelegate[][] biomes; public BiomeHolderImpl(int width, Vector2 origin) { width += 4; this.width = width; - biomes = new Biome[width][width]; + biomes = new BiomeDelegate[width][width]; this.origin = origin; this.offset = 2; } - private BiomeHolderImpl(Biome[][] biomes, Vector2 origin, int width, int offset) { + private BiomeHolderImpl(BiomeDelegate[][] biomes, Vector2 origin, int width, int offset) { this.biomes = biomes; this.origin = origin; this.width = width; @@ -38,10 +39,10 @@ public class BiomeHolderImpl implements BiomeHolder { @Override public BiomeHolder expand(BiomeExpander expander, long seed) { - Biome[][] old = biomes; + BiomeDelegate[][] old = biomes; int newWidth = width * 2 - 1; - biomes = new Biome[newWidth][newWidth]; + biomes = new BiomeDelegate[newWidth][newWidth]; for(int x = 0; x < width; x++) { for(int z = 0; z < width; z++) { @@ -80,14 +81,14 @@ public class BiomeHolderImpl implements BiomeHolder { } @Override - public Biome getBiome(int x, int z) { + public BiomeDelegate getBiome(int x, int z) { x += offset; z += offset; return getBiomeRaw(x, z); } @Override - public Biome getBiomeRaw(int x, int z) { + public BiomeDelegate getBiomeRaw(int x, int z) { if(x >= width || z >= width || x < 0 || z < 0) return null; return biomes[x][z]; } diff --git a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomePipelineProvider.java b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomePipelineProvider.java index 93f2112d4..da60ff03b 100644 --- a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomePipelineProvider.java +++ b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomePipelineProvider.java @@ -7,24 +7,23 @@ package com.dfsek.terra.addons.biome.pipeline; -import com.dfsek.terra.addons.biome.pipeline.api.Stage; - -import com.dfsek.terra.api.world.biome.Biome; - import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; import net.jafama.FastMath; import org.jetbrains.annotations.NotNull; -import com.dfsek.terra.addons.biome.pipeline.api.BiomeHolder; -import com.dfsek.terra.api.Platform; -import com.dfsek.terra.api.noise.NoiseSampler; -import com.dfsek.terra.api.world.biome.generation.BiomeProvider; - import java.util.HashSet; import java.util.Set; +import com.dfsek.terra.addons.biome.pipeline.api.BiomeDelegate; +import com.dfsek.terra.addons.biome.pipeline.api.BiomeHolder; +import com.dfsek.terra.addons.biome.pipeline.api.Stage; +import com.dfsek.terra.api.Platform; +import com.dfsek.terra.api.noise.NoiseSampler; +import com.dfsek.terra.api.world.biome.Biome; +import com.dfsek.terra.api.world.biome.generation.BiomeProvider; + public class BiomePipelineProvider implements BiomeProvider { private final LoadingCache holderCache; @@ -33,6 +32,8 @@ public class BiomePipelineProvider implements BiomeProvider { private final NoiseSampler mutator; private final double noiseAmp; + private final Set biomes; + public BiomePipelineProvider(BiomePipeline pipeline, Platform platform, int resolution, NoiseSampler mutator, double noiseAmp) { this.resolution = resolution; this.mutator = mutator; @@ -48,6 +49,21 @@ public class BiomePipelineProvider implements BiomeProvider { } ); this.pipeline = pipeline; + + Set biomeSet = new HashSet<>(); + pipeline.getSource().getBiomes().forEach(biomeSet::add); + Iterable result = biomeSet; + for(Stage stage : pipeline.getStages()) { + result = stage.getBiomes(result); // pass through all stages + } + this.biomes = new HashSet<>(); + result.forEach(biomeDelegate -> { + if(biomeDelegate.isEphemeral()) { + throw new IllegalArgumentException("Biome Pipeline leaks ephemeral biome \"" + biomeDelegate.getID() + + "\". Ensure there is a stage to guarantee replacement of the ephemeral biome."); + } + this.biomes.add(biomeDelegate.getBiome()); + }); } @Override @@ -63,18 +79,12 @@ public class BiomePipelineProvider implements BiomeProvider { int fdX = FastMath.floorDiv(x, pipeline.getSize()); int fdZ = FastMath.floorDiv(z, pipeline.getSize()); return holderCache.getUnchecked(new SeededVector(fdX, fdZ, seed)).getBiome(x - fdX * pipeline.getSize(), - z - fdZ * pipeline.getSize()); + z - fdZ * pipeline.getSize()).getBiome(); } @Override public Iterable getBiomes() { - Set biomeSet = new HashSet<>(); - pipeline.getSource().getBiomes().forEach(biomeSet::add); - Iterable result = biomeSet; - for(Stage stage : pipeline.getStages()) { - result = stage.getBiomes(result); // pass through all stages - } - return result; + return biomes; } private static final class SeededVector { @@ -100,7 +110,7 @@ public class BiomePipelineProvider implements BiomeProvider { @Override public boolean equals(Object obj) { if(!(obj instanceof SeededVector that)) return false; - + return this.seed == that.seed && this.x == that.x && this.z == that.z; } } diff --git a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/api/BiomeDelegate.java b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/api/BiomeDelegate.java index 1bbbff6b3..ae3bb7bbd 100644 --- a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/api/BiomeDelegate.java +++ b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/api/BiomeDelegate.java @@ -3,21 +3,41 @@ package com.dfsek.terra.addons.biome.pipeline.api; import com.dfsek.terra.api.util.StringIdentifiable; import com.dfsek.terra.api.world.biome.Biome; +import java.util.Collections; +import java.util.Set; + public interface BiomeDelegate extends StringIdentifiable { Biome getBiome(); + Set getTags(); + + default boolean isEphemeral() { + return false; + } + static BiomeDelegate ephemeral(String id) { return new BiomeDelegate() { + private final Set tags = Collections.singleton(id); @Override public Biome getBiome() { throw new UnsupportedOperationException("Cannot get biome from ephemeral delegate"); } + @Override + public Set getTags() { + return tags; + } + @Override public String getID() { return id; } + + @Override + public boolean isEphemeral() { + return true; + } }; } @@ -28,6 +48,11 @@ public interface BiomeDelegate extends StringIdentifiable { return biome; } + @Override + public Set getTags() { + return biome.getTags(); + } + @Override public String getID() { return biome.getID(); diff --git a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/api/BiomeExpander.java b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/api/BiomeExpander.java index dbb784a3f..5a4d4d047 100644 --- a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/api/BiomeExpander.java +++ b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/api/BiomeExpander.java @@ -11,5 +11,5 @@ import com.dfsek.terra.api.world.biome.Biome; public interface BiomeExpander { - Biome getBetween(double x, double z, long seed, Biome... others); + BiomeDelegate getBetween(double x, double z, long seed, BiomeDelegate... others); } diff --git a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/api/BiomeHolder.java b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/api/BiomeHolder.java index a15224db1..ae469e7d0 100644 --- a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/api/BiomeHolder.java +++ b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/api/BiomeHolder.java @@ -18,7 +18,7 @@ public interface BiomeHolder { void fill(BiomeSource source, long seed); - Biome getBiome(int x, int z); + BiomeDelegate getBiome(int x, int z); - Biome getBiomeRaw(int x, int z); + BiomeDelegate getBiomeRaw(int x, int z); } diff --git a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/api/BiomeMutator.java b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/api/BiomeMutator.java index c9f6793f3..d256055ee 100644 --- a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/api/BiomeMutator.java +++ b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/api/BiomeMutator.java @@ -11,9 +11,9 @@ import com.dfsek.terra.api.world.biome.Biome; public interface BiomeMutator { - Biome mutate(ViewPoint viewPoint, double x, double z, long seed); + BiomeDelegate mutate(ViewPoint viewPoint, double x, double z, long seed); - default Iterable getBiomes(Iterable biomes) { + default Iterable getBiomes(Iterable biomes) { return biomes; } @@ -29,7 +29,7 @@ public interface BiomeMutator { } - public Biome getBiome(int x, int z) { + public BiomeDelegate getBiome(int x, int z) { return biomes.getBiomeRaw(x + offX, z + offZ); } } diff --git a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/api/Stage.java b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/api/Stage.java index 0bfc572df..7027bff65 100644 --- a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/api/Stage.java +++ b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/api/Stage.java @@ -15,5 +15,5 @@ public interface Stage { boolean isExpansion(); - Iterable getBiomes(Iterable biomes); + Iterable getBiomes(Iterable biomes); } diff --git a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/BorderListMutatorTemplate.java b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/BorderListMutatorTemplate.java index 2bd1ef5ec..5f8e6fccb 100644 --- a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/BorderListMutatorTemplate.java +++ b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/BorderListMutatorTemplate.java @@ -11,6 +11,7 @@ import com.dfsek.tectonic.annotations.Value; import java.util.Map; +import com.dfsek.terra.addons.biome.pipeline.api.BiomeDelegate; import com.dfsek.terra.addons.biome.pipeline.api.Stage; import com.dfsek.terra.addons.biome.pipeline.config.stage.StageTemplate; import com.dfsek.terra.addons.biome.pipeline.mutator.BorderListMutator; @@ -29,10 +30,10 @@ public class BorderListMutatorTemplate extends StageTemplate { private @Meta String defaultReplace; @Value("default-to") - private @Meta ProbabilityCollection<@Meta Biome> defaultTo; + private @Meta ProbabilityCollection<@Meta BiomeDelegate> defaultTo; @Value("replace") - private @Meta Map<@Meta Biome, @Meta ProbabilityCollection<@Meta Biome>> replace; + private @Meta Map<@Meta BiomeDelegate, @Meta ProbabilityCollection<@Meta BiomeDelegate>> replace; @Override diff --git a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/BorderMutatorTemplate.java b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/BorderMutatorTemplate.java index ff9ba33b2..f9ef814a3 100644 --- a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/BorderMutatorTemplate.java +++ b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/BorderMutatorTemplate.java @@ -9,6 +9,7 @@ package com.dfsek.terra.addons.biome.pipeline.config.stage.mutator; import com.dfsek.tectonic.annotations.Value; +import com.dfsek.terra.addons.biome.pipeline.api.BiomeDelegate; import com.dfsek.terra.addons.biome.pipeline.api.Stage; import com.dfsek.terra.addons.biome.pipeline.config.stage.StageTemplate; import com.dfsek.terra.addons.biome.pipeline.mutator.BorderMutator; @@ -27,7 +28,7 @@ public class BorderMutatorTemplate extends StageTemplate { private @Meta String replace; @Value("to") - private @Meta ProbabilityCollection<@Meta Biome> to; + private @Meta ProbabilityCollection<@Meta BiomeDelegate> to; @Override public Stage get() { diff --git a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/ReplaceListMutatorTemplate.java b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/ReplaceListMutatorTemplate.java index 23e0b1acd..35d0e80e0 100644 --- a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/ReplaceListMutatorTemplate.java +++ b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/ReplaceListMutatorTemplate.java @@ -11,6 +11,7 @@ import com.dfsek.tectonic.annotations.Value; import java.util.Map; +import com.dfsek.terra.addons.biome.pipeline.api.BiomeDelegate; import com.dfsek.terra.addons.biome.pipeline.api.Stage; import com.dfsek.terra.addons.biome.pipeline.config.stage.StageTemplate; import com.dfsek.terra.addons.biome.pipeline.mutator.ReplaceListMutator; @@ -26,10 +27,10 @@ public class ReplaceListMutatorTemplate extends StageTemplate { private @Meta String defaultFrom; @Value("default-to") - private @Meta ProbabilityCollection<@Meta Biome> defaultTo; + private @Meta ProbabilityCollection<@Meta BiomeDelegate> defaultTo; @Value("to") - private @Meta Map<@Meta Biome, @Meta ProbabilityCollection<@Meta Biome>> replace; + private @Meta Map<@Meta BiomeDelegate, @Meta ProbabilityCollection<@Meta BiomeDelegate>> replace; @Override public Stage get() { diff --git a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/ReplaceMutatorTemplate.java b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/ReplaceMutatorTemplate.java index e611eea64..03ffe7d2e 100644 --- a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/ReplaceMutatorTemplate.java +++ b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/ReplaceMutatorTemplate.java @@ -9,6 +9,7 @@ package com.dfsek.terra.addons.biome.pipeline.config.stage.mutator; import com.dfsek.tectonic.annotations.Value; +import com.dfsek.terra.addons.biome.pipeline.api.BiomeDelegate; import com.dfsek.terra.addons.biome.pipeline.api.Stage; import com.dfsek.terra.addons.biome.pipeline.config.stage.StageTemplate; import com.dfsek.terra.addons.biome.pipeline.mutator.ReplaceMutator; @@ -24,7 +25,7 @@ public class ReplaceMutatorTemplate extends StageTemplate { private @Meta String from; @Value("to") - private @Meta ProbabilityCollection<@Meta Biome> to; + private @Meta ProbabilityCollection<@Meta BiomeDelegate> to; @Override public Stage get() { diff --git a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/expand/FractalExpander.java b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/expand/FractalExpander.java index 8d0123239..35477ea37 100644 --- a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/expand/FractalExpander.java +++ b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/expand/FractalExpander.java @@ -7,6 +7,7 @@ package com.dfsek.terra.addons.biome.pipeline.expand; +import com.dfsek.terra.addons.biome.pipeline.api.BiomeDelegate; import com.dfsek.terra.addons.biome.pipeline.api.BiomeExpander; import com.dfsek.terra.api.noise.NoiseSampler; import com.dfsek.terra.api.util.MathUtil; @@ -21,7 +22,7 @@ public class FractalExpander implements BiomeExpander { } @Override - public Biome getBetween(double x, double z, long seed, Biome... others) { + public BiomeDelegate getBetween(double x, double z, long seed, BiomeDelegate... others) { return others[MathUtil.normalizeIndex(sampler.noise(seed, x, z), others.length)]; } } diff --git a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/mutator/BorderListMutator.java b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/mutator/BorderListMutator.java index 917484e59..dad4b2d3e 100644 --- a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/mutator/BorderListMutator.java +++ b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/mutator/BorderListMutator.java @@ -12,6 +12,7 @@ import java.util.Map; import java.util.Objects; import java.util.Set; +import com.dfsek.terra.addons.biome.pipeline.api.BiomeDelegate; import com.dfsek.terra.addons.biome.pipeline.api.BiomeMutator; import com.dfsek.terra.api.noise.NoiseSampler; import com.dfsek.terra.api.util.collection.ProbabilityCollection; @@ -21,12 +22,12 @@ import com.dfsek.terra.api.world.biome.Biome; public class BorderListMutator implements BiomeMutator { private final String border; private final NoiseSampler noiseSampler; - private final ProbabilityCollection replaceDefault; + private final ProbabilityCollection replaceDefault; private final String defaultReplace; - private final Map> replace; + private final Map> replace; - public BorderListMutator(Map> replace, String border, String defaultReplace, - NoiseSampler noiseSampler, ProbabilityCollection replaceDefault) { + public BorderListMutator(Map> replace, String border, String defaultReplace, + NoiseSampler noiseSampler, ProbabilityCollection replaceDefault) { this.border = border; this.noiseSampler = noiseSampler; this.replaceDefault = replaceDefault; @@ -35,20 +36,20 @@ public class BorderListMutator implements BiomeMutator { } @Override - public Biome mutate(ViewPoint viewPoint, double x, double z, long seed) { - Biome origin = viewPoint.getBiome(0, 0); + public BiomeDelegate mutate(ViewPoint viewPoint, double x, double z, long seed) { + BiomeDelegate origin = viewPoint.getBiome(0, 0); if(origin.getTags().contains(defaultReplace)) { for(int xi = -1; xi <= 1; xi++) { for(int zi = -1; zi <= 1; zi++) { if(xi == 0 && zi == 0) continue; - Biome current = viewPoint.getBiome(xi, zi); + BiomeDelegate current = viewPoint.getBiome(xi, zi); if(current == null) continue; if(current.getTags().contains(border)) { if(replace.containsKey(origin)) { - Biome biome = replace.get(origin).get(noiseSampler, x, z, seed); + BiomeDelegate biome = replace.get(origin).get(noiseSampler, x, z, seed); return biome == null ? origin : biome; } - Biome biome = replaceDefault.get(noiseSampler, x, z, seed); + BiomeDelegate biome = replaceDefault.get(noiseSampler, x, z, seed); return biome == null ? origin : biome; } } @@ -58,8 +59,8 @@ public class BorderListMutator implements BiomeMutator { } @Override - public Iterable getBiomes(Iterable biomes) { - Set biomeSet = new HashSet<>(); + public Iterable getBiomes(Iterable biomes) { + Set biomeSet = new HashSet<>(); biomes.forEach(biomeSet::add); biomeSet.addAll(replaceDefault.getContents().stream().filter(Objects::nonNull).toList()); replace.forEach((biome, collection) -> biomeSet.addAll(collection.getContents())); diff --git a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/mutator/BorderMutator.java b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/mutator/BorderMutator.java index d3c70c3b8..3ab4c4af6 100644 --- a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/mutator/BorderMutator.java +++ b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/mutator/BorderMutator.java @@ -7,6 +7,7 @@ package com.dfsek.terra.addons.biome.pipeline.mutator; +import com.dfsek.terra.addons.biome.pipeline.api.BiomeDelegate; import com.dfsek.terra.addons.biome.pipeline.api.BiomeMutator; import com.dfsek.terra.api.noise.NoiseSampler; import com.dfsek.terra.api.util.collection.ProbabilityCollection; @@ -20,10 +21,10 @@ import java.util.Set; public class BorderMutator implements BiomeMutator { private final String border; private final NoiseSampler noiseSampler; - private final ProbabilityCollection replace; + private final ProbabilityCollection replace; private final String replaceTag; - public BorderMutator(String border, String replaceTag, NoiseSampler noiseSampler, ProbabilityCollection replace) { + public BorderMutator(String border, String replaceTag, NoiseSampler noiseSampler, ProbabilityCollection replace) { this.border = border; this.noiseSampler = noiseSampler; this.replace = replace; @@ -31,16 +32,16 @@ public class BorderMutator implements BiomeMutator { } @Override - public Biome mutate(ViewPoint viewPoint, double x, double z, long seed) { - Biome origin = viewPoint.getBiome(0, 0); + public BiomeDelegate mutate(ViewPoint viewPoint, double x, double z, long seed) { + BiomeDelegate origin = viewPoint.getBiome(0, 0); if(origin.getTags().contains(replaceTag)) { for(int xi = -1; xi <= 1; xi++) { for(int zi = -1; zi <= 1; zi++) { if(xi == 0 && zi == 0) continue; - Biome current = viewPoint.getBiome(xi, zi); + BiomeDelegate current = viewPoint.getBiome(xi, zi); if(current == null) continue; if(current.getTags().contains(border)) { - Biome biome = replace.get(noiseSampler, x, z, seed); + BiomeDelegate biome = replace.get(noiseSampler, x, z, seed); return biome == null ? origin : biome; } } @@ -50,8 +51,8 @@ public class BorderMutator implements BiomeMutator { } @Override - public Iterable getBiomes(Iterable biomes) { - Set biomeSet = new HashSet<>(); + public Iterable getBiomes(Iterable biomes) { + Set biomeSet = new HashSet<>(); biomes.forEach(biomeSet::add); biomeSet.addAll(replace.getContents().stream().filter(Objects::nonNull).toList()); return biomeSet; diff --git a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/mutator/ReplaceListMutator.java b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/mutator/ReplaceListMutator.java index 076cf1b32..3ae34af2d 100644 --- a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/mutator/ReplaceListMutator.java +++ b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/mutator/ReplaceListMutator.java @@ -12,20 +12,20 @@ import java.util.Map; import java.util.Set; import java.util.stream.Stream; +import com.dfsek.terra.addons.biome.pipeline.api.BiomeDelegate; import com.dfsek.terra.addons.biome.pipeline.api.BiomeMutator; import com.dfsek.terra.api.noise.NoiseSampler; import com.dfsek.terra.api.util.collection.ProbabilityCollection; -import com.dfsek.terra.api.world.biome.Biome; public class ReplaceListMutator implements BiomeMutator { - private final Map> replace; + private final Map> replace; private final NoiseSampler sampler; - private final ProbabilityCollection replaceDefault; + private final ProbabilityCollection replaceDefault; private final String defaultTag; - public ReplaceListMutator(Map> replace, String defaultTag, - ProbabilityCollection replaceDefault, NoiseSampler sampler) { + public ReplaceListMutator(Map> replace, String defaultTag, + ProbabilityCollection replaceDefault, NoiseSampler sampler) { this.replace = replace; this.sampler = sampler; this.defaultTag = defaultTag; @@ -33,24 +33,24 @@ public class ReplaceListMutator implements BiomeMutator { } @Override - public Biome mutate(ViewPoint viewPoint, double x, double z, long seed) { - Biome center = viewPoint.getBiome(0, 0); + public BiomeDelegate mutate(ViewPoint viewPoint, double x, double z, long seed) { + BiomeDelegate center = viewPoint.getBiome(0, 0); if(replace.containsKey(center)) { - Biome biome = replace.get(center).get(sampler, x, z, seed); + BiomeDelegate biome = replace.get(center).get(sampler, x, z, seed); return biome == null ? viewPoint.getBiome(0, 0) : biome; } if(viewPoint.getBiome(0, 0).getTags().contains(defaultTag)) { - Biome biome = replaceDefault.get(sampler, x, z, seed); + BiomeDelegate biome = replaceDefault.get(sampler, x, z, seed); return biome == null ? viewPoint.getBiome(0, 0) : biome; } return center; } @Override - public Iterable getBiomes(Iterable biomes) { - Set biomeSet = new HashSet<>(); + public Iterable getBiomes(Iterable biomes) { + Set biomeSet = new HashSet<>(); - Set reject = new HashSet<>(); + Set reject = new HashSet<>(); biomes.forEach(biome -> { if(!biome.getTags().contains(defaultTag) && !replace.containsKey(biome)) { @@ -63,12 +63,10 @@ public class ReplaceListMutator implements BiomeMutator { if(terraBiome == null) return reject.stream(); return Stream.of(terraBiome); }).toList()); - replace.forEach((biome, collection) -> { - biomeSet.addAll(collection.getContents().stream().map(terraBiome -> { - if(terraBiome == null) return biome; - return terraBiome; - }).toList()); - }); + replace.forEach((biome, collection) -> biomeSet.addAll(collection.getContents().stream().map(terraBiome -> { + if(terraBiome == null) return biome; + return terraBiome; + }).toList())); return biomeSet; } } diff --git a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/mutator/ReplaceMutator.java b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/mutator/ReplaceMutator.java index 43ac8747e..30b079c69 100644 --- a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/mutator/ReplaceMutator.java +++ b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/mutator/ReplaceMutator.java @@ -7,6 +7,7 @@ package com.dfsek.terra.addons.biome.pipeline.mutator; +import com.dfsek.terra.addons.biome.pipeline.api.BiomeDelegate; import com.dfsek.terra.addons.biome.pipeline.api.BiomeMutator; import com.dfsek.terra.api.noise.NoiseSampler; import com.dfsek.terra.api.util.collection.ProbabilityCollection; @@ -19,28 +20,28 @@ import java.util.stream.Stream; public class ReplaceMutator implements BiomeMutator { private final String replaceableTag; - private final ProbabilityCollection replace; + private final ProbabilityCollection replace; private final NoiseSampler sampler; - public ReplaceMutator(String replaceable, ProbabilityCollection replace, NoiseSampler sampler) { + public ReplaceMutator(String replaceable, ProbabilityCollection replace, NoiseSampler sampler) { this.replaceableTag = replaceable; this.replace = replace; this.sampler = sampler; } @Override - public Biome mutate(ViewPoint viewPoint, double x, double z, long seed) { + public BiomeDelegate mutate(ViewPoint viewPoint, double x, double z, long seed) { if(viewPoint.getBiome(0, 0).getTags().contains(replaceableTag)) { - Biome biome = replace.get(sampler, x, z, seed); + BiomeDelegate biome = replace.get(sampler, x, z, seed); return biome == null ? viewPoint.getBiome(0, 0) : biome; } return viewPoint.getBiome(0, 0); } @Override - public Iterable getBiomes(Iterable biomes) { - Set biomeSet = new HashSet<>(); - Set reject = new HashSet<>(); + public Iterable getBiomes(Iterable biomes) { + Set biomeSet = new HashSet<>(); + Set reject = new HashSet<>(); biomes.forEach(biome -> { if(!biome.getTags().contains(replaceableTag)) { biomeSet.add(biome); diff --git a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/mutator/SmoothMutator.java b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/mutator/SmoothMutator.java index e843532bb..46a15b9ca 100644 --- a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/mutator/SmoothMutator.java +++ b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/mutator/SmoothMutator.java @@ -9,6 +9,7 @@ package com.dfsek.terra.addons.biome.pipeline.mutator; import java.util.Objects; +import com.dfsek.terra.addons.biome.pipeline.api.BiomeDelegate; import com.dfsek.terra.addons.biome.pipeline.api.BiomeMutator; import com.dfsek.terra.api.noise.NoiseSampler; import com.dfsek.terra.api.util.MathUtil; @@ -24,11 +25,11 @@ public class SmoothMutator implements BiomeMutator { } @Override - public Biome mutate(ViewPoint viewPoint, double x, double z, long seed) { - Biome top = viewPoint.getBiome(1, 0); - Biome bottom = viewPoint.getBiome(-1, 0); - Biome left = viewPoint.getBiome(0, 1); - Biome right = viewPoint.getBiome(0, -1); + public BiomeDelegate mutate(ViewPoint viewPoint, double x, double z, long seed) { + BiomeDelegate top = viewPoint.getBiome(1, 0); + BiomeDelegate bottom = viewPoint.getBiome(-1, 0); + BiomeDelegate left = viewPoint.getBiome(0, 1); + BiomeDelegate right = viewPoint.getBiome(0, -1); boolean vert = Objects.equals(top, bottom) && top != null; diff --git a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/stages/ExpanderStage.java b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/stages/ExpanderStage.java index cffa9b5d9..56da81b00 100644 --- a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/stages/ExpanderStage.java +++ b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/stages/ExpanderStage.java @@ -7,6 +7,7 @@ package com.dfsek.terra.addons.biome.pipeline.stages; +import com.dfsek.terra.addons.biome.pipeline.api.BiomeDelegate; import com.dfsek.terra.addons.biome.pipeline.api.BiomeExpander; import com.dfsek.terra.addons.biome.pipeline.api.BiomeHolder; import com.dfsek.terra.addons.biome.pipeline.api.Stage; @@ -31,7 +32,7 @@ public class ExpanderStage implements Stage { } @Override - public Iterable getBiomes(Iterable biomes) { + public Iterable getBiomes(Iterable biomes) { return biomes; } } diff --git a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/stages/MutatorStage.java b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/stages/MutatorStage.java index 2853695d9..89d2a748a 100644 --- a/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/stages/MutatorStage.java +++ b/common/addons/biome-provider-pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/stages/MutatorStage.java @@ -7,6 +7,7 @@ package com.dfsek.terra.addons.biome.pipeline.stages; +import com.dfsek.terra.addons.biome.pipeline.api.BiomeDelegate; import com.dfsek.terra.addons.biome.pipeline.api.BiomeHolder; import com.dfsek.terra.addons.biome.pipeline.api.BiomeMutator; import com.dfsek.terra.addons.biome.pipeline.api.Stage; @@ -32,7 +33,7 @@ public class MutatorStage implements Stage { } @Override - public Iterable getBiomes(Iterable biomes) { + public Iterable getBiomes(Iterable biomes) { return mutator.getBiomes(biomes); }