From d71b1ca9843f8e7471739236334182e586a132a4 Mon Sep 17 00:00:00 2001 From: dfsek Date: Fri, 10 Jun 2022 18:18:31 -0700 Subject: [PATCH] implement ExtrusionColumn --- .../extrusion/BiomeExtrusionProvider.java | 11 +++ .../biome/extrusion/ExtrusionColumn.java | 74 +++++++++++++++++++ 2 files changed, 85 insertions(+) create mode 100644 common/addons/biome-provider-extrusion/src/main/java/com/dfsek/terra/addons/biome/extrusion/ExtrusionColumn.java diff --git a/common/addons/biome-provider-extrusion/src/main/java/com/dfsek/terra/addons/biome/extrusion/BiomeExtrusionProvider.java b/common/addons/biome-provider-extrusion/src/main/java/com/dfsek/terra/addons/biome/extrusion/BiomeExtrusionProvider.java index 4c5e0d241..93eef30dc 100644 --- a/common/addons/biome-provider-extrusion/src/main/java/com/dfsek/terra/addons/biome/extrusion/BiomeExtrusionProvider.java +++ b/common/addons/biome-provider-extrusion/src/main/java/com/dfsek/terra/addons/biome/extrusion/BiomeExtrusionProvider.java @@ -1,8 +1,10 @@ package com.dfsek.terra.addons.biome.extrusion; import com.dfsek.terra.addons.biome.extrusion.api.Extrusion; +import com.dfsek.terra.api.util.Column; import com.dfsek.terra.api.world.biome.Biome; import com.dfsek.terra.api.world.biome.generation.BiomeProvider; +import com.dfsek.terra.api.world.info.WorldProperties; import java.util.List; import java.util.Set; @@ -37,4 +39,13 @@ public class BiomeExtrusionProvider implements BiomeProvider { public Iterable getBiomes() { return biomes; } + + public int getResolution() { + return resolution; + } + + @Override + public Column getColumn(int x, int z, WorldProperties properties) { + return new ExtrusionColumn(properties, this, x, z); + } } diff --git a/common/addons/biome-provider-extrusion/src/main/java/com/dfsek/terra/addons/biome/extrusion/ExtrusionColumn.java b/common/addons/biome-provider-extrusion/src/main/java/com/dfsek/terra/addons/biome/extrusion/ExtrusionColumn.java new file mode 100644 index 000000000..09031083d --- /dev/null +++ b/common/addons/biome-provider-extrusion/src/main/java/com/dfsek/terra/addons/biome/extrusion/ExtrusionColumn.java @@ -0,0 +1,74 @@ +package com.dfsek.terra.addons.biome.extrusion; + +import com.dfsek.terra.api.util.Column; +import com.dfsek.terra.api.util.function.IntIntObjConsumer; +import com.dfsek.terra.api.world.biome.Biome; +import com.dfsek.terra.api.world.info.WorldProperties; + + +public class ExtrusionColumn implements Column { + private final int min; + private final int max; + private final BiomeExtrusionProvider provider; + private final int x, z; + private final long seed; + + public ExtrusionColumn(WorldProperties worldProperties, BiomeExtrusionProvider provider, int x, int z) { + this.min = worldProperties.getMinHeight(); + this.max = worldProperties.getMaxHeight(); + this.provider = provider; + this.x = x; + this.z = z; + this.seed = worldProperties.getSeed(); + } + + @Override + public int getMinY() { + return min; + } + + @Override + public int getMaxY() { + return max; + } + + @Override + public int getX() { + return x; + } + + @Override + public int getZ() { + return z; + } + + @Override + public Biome get(int y) { + return provider.getBiome(x, y, z, seed); + } + + @Override + public void forRanges(IntIntObjConsumer consumer) { + int min = getMinY(); + + int y = min; + + Biome runningObj = get(y); + + int runningMin = min; + + int max = getMaxY() - 1; + + while(y < max) { + y += provider.getResolution(); + Biome current = get(y); + + if(!current.equals(runningObj)) { + consumer.accept(runningMin, y, runningObj); + runningMin = y; + runningObj = current; + } + } + consumer.accept(runningMin, ++y, runningObj); + } +}