diff --git a/common/src/main/java/com/dfsek/terra/biome/pipeline/mutator/BorderMutator.java b/common/src/main/java/com/dfsek/terra/biome/pipeline/mutator/BorderMutator.java index 46f829bca..39d825c7c 100644 --- a/common/src/main/java/com/dfsek/terra/biome/pipeline/mutator/BorderMutator.java +++ b/common/src/main/java/com/dfsek/terra/biome/pipeline/mutator/BorderMutator.java @@ -4,32 +4,29 @@ import com.dfsek.terra.api.math.ProbabilityCollection; import com.dfsek.terra.api.math.noise.samplers.NoiseSampler; import com.dfsek.terra.api.world.biome.TerraBiome; -import java.util.Set; - public class BorderMutator implements BiomeMutator { - private final Set borders; + private final String border; private final NoiseSampler noiseSampler; private final ProbabilityCollection replace; - private final String tag; + private final String replaceTag; - public BorderMutator(Set borders, String tag, NoiseSampler noiseSampler, ProbabilityCollection replace) { - this.borders = borders; + public BorderMutator(String border, String replaceTag, NoiseSampler noiseSampler, ProbabilityCollection replace) { + this.border = border; this.noiseSampler = noiseSampler; this.replace = replace; - this.tag = tag; + this.replaceTag = replaceTag; } @Override public TerraBiome mutate(ViewPoint viewPoint, double x, double z) { TerraBiome origin = viewPoint.getBiome(0, 0); - if(origin.getTags().contains(tag)) { + 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; TerraBiome current = viewPoint.getBiome(xi, zi); if(current == null) continue; - if(borders.stream().anyMatch(current.getTags()::contains)) - return replace.get(noiseSampler, x, z); + if(current.getTags().contains(border)) return replace.get(noiseSampler, x, z); } } } diff --git a/common/src/main/java/com/dfsek/terra/config/loaders/config/biome/BiomeProviderBuilderLoader.java b/common/src/main/java/com/dfsek/terra/config/loaders/config/biome/BiomeProviderBuilderLoader.java index 55afacc27..ac8a3fd44 100644 --- a/common/src/main/java/com/dfsek/terra/config/loaders/config/biome/BiomeProviderBuilderLoader.java +++ b/common/src/main/java/com/dfsek/terra/config/loaders/config/biome/BiomeProviderBuilderLoader.java @@ -11,6 +11,7 @@ import com.dfsek.terra.biome.BiomeProvider; import com.dfsek.terra.biome.StandardBiomeProvider; import com.dfsek.terra.biome.pipeline.BiomePipeline; import com.dfsek.terra.biome.pipeline.expand.FractalExpander; +import com.dfsek.terra.biome.pipeline.mutator.BorderMutator; import com.dfsek.terra.biome.pipeline.mutator.ReplaceMutator; import com.dfsek.terra.biome.pipeline.mutator.SmoothMutator; import com.dfsek.terra.biome.pipeline.source.RandomSource; @@ -67,6 +68,11 @@ public class BiomeProviderBuilderLoader implements TypeLoader replaceBiomes = (ProbabilityCollection) loader.loadType(Types.TERRA_BIOME_PROBABILITY_COLLECTION_TYPE, mutator.get("to")); pipelineBuilder.addStage(new MutatorStage(new ReplaceMutator(fromTag, replaceBiomes, mutatorNoise))); + } else if(mutator.get("type").equals("BORDER")) { + String fromTag = mutator.get("from").toString(); + String replaceTag = mutator.get("replace").toString(); + ProbabilityCollection replaceBiomes = (ProbabilityCollection) loader.loadType(Types.TERRA_BIOME_PROBABILITY_COLLECTION_TYPE, mutator.get("to")); + pipelineBuilder.addStage(new MutatorStage(new BorderMutator(fromTag, replaceTag, mutatorNoise, replaceBiomes))); } else throw new LoadException("No such mutator type \"" + mutator.get("type")); } else throw new LoadException("No such mutator \"" + entry.getKey() + "\""); } diff --git a/common/src/test/java/biome/BiomeTest.java b/common/src/test/java/biome/BiomeTest.java index 19306a93e..e83b4a4f7 100644 --- a/common/src/test/java/biome/BiomeTest.java +++ b/common/src/test/java/biome/BiomeTest.java @@ -17,7 +17,6 @@ import com.dfsek.terra.biome.pipeline.source.BiomeSource; import com.dfsek.terra.biome.pipeline.source.RandomSource; import com.dfsek.terra.biome.pipeline.stages.ExpanderStage; import com.dfsek.terra.biome.pipeline.stages.MutatorStage; -import com.google.common.collect.Sets; import org.junit.jupiter.api.Test; import javax.swing.*; @@ -70,7 +69,7 @@ public class BiomeTest { .addStage(new ExpanderStage(new FractalExpander(whiteNoise(2)))) .addStage(new MutatorStage(new SmoothMutator(whiteNoise(3)))) .addStage(new ExpanderStage(new FractalExpander(whiteNoise(4)))) - .addStage(new MutatorStage(new BorderMutator(Sets.newHashSet("OCEAN"), "LAND", whiteNoise(1234), beachBiomes))) + .addStage(new MutatorStage(new BorderMutator("OCEAN", "LAND", whiteNoise(1234), beachBiomes))) .addStage(new ExpanderStage(new FractalExpander(whiteNoise(5)))) .addStage(new ExpanderStage(new FractalExpander(whiteNoise(5)))) .addStage(new MutatorStage(new SmoothMutator(whiteNoise(6))))