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 93eef30dc..124bec7c3 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 @@ -7,6 +7,7 @@ import com.dfsek.terra.api.world.biome.generation.BiomeProvider; import com.dfsek.terra.api.world.info.WorldProperties; import java.util.List; +import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; @@ -35,6 +36,11 @@ public class BiomeExtrusionProvider implements BiomeProvider { return delegated; } + @Override + public Optional getBaseBiome(int x, int z, long seed) { + return delegate.getBaseBiome(x, z, seed); + } + @Override public Iterable getBiomes() { return biomes; diff --git a/common/addons/biome-provider-image/src/main/java/com/dfsek/terra/addons/biome/image/ImageBiomeProvider.java b/common/addons/biome-provider-image/src/main/java/com/dfsek/terra/addons/biome/image/ImageBiomeProvider.java index 3c3fa90f5..aa2f647bb 100644 --- a/common/addons/biome-provider-image/src/main/java/com/dfsek/terra/addons/biome/image/ImageBiomeProvider.java +++ b/common/addons/biome-provider-image/src/main/java/com/dfsek/terra/addons/biome/image/ImageBiomeProvider.java @@ -13,6 +13,7 @@ import java.awt.Color; import java.awt.image.BufferedImage; import java.util.HashMap; import java.util.Map; +import java.util.Optional; import java.util.Set; import com.dfsek.terra.api.world.biome.Biome; @@ -38,6 +39,10 @@ public class ImageBiomeProvider implements BiomeProvider { @Override public Biome getBiome(int x, int y, int z, long seed) { + return getBiome(x, z); + } + + public Biome getBiome(int x, int z) { x /= resolution; z /= resolution; Color color = align.getColor(image, x, z); @@ -51,6 +56,11 @@ public class ImageBiomeProvider implements BiomeProvider { })); } + @Override + public Optional getBaseBiome(int x, int z, long seed) { + return Optional.of(getBiome(x, z)); + } + @Override public Iterable getBiomes() { return colorBiomeMap.values(); 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 0fece9698..4a351a8e4 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 @@ -16,6 +16,7 @@ import net.jafama.FastMath; import java.util.Comparator; import java.util.HashSet; +import java.util.Optional; import java.util.Set; import java.util.stream.StreamSupport; @@ -76,18 +77,27 @@ public class BiomePipelineProvider implements BiomeProvider { @Override public Biome getBiome(int x, int y, int z, long seed) { + return getBiome(x, z, seed); + } + + public Biome getBiome(int x, int z, long seed) { x += mutator.noise(seed + 1, x, z) * noiseAmp; z += mutator.noise(seed + 2, x, z) * noiseAmp; - - + + x = FastMath.floorToInt(FastMath.floorDiv(x, resolution)); - + z = FastMath.floorToInt(FastMath.floorDiv(z, resolution)); - + int fdX = FastMath.floorDiv(x, pipeline.getSize()); int fdZ = FastMath.floorDiv(z, pipeline.getSize()); return holderCache.get(new SeededVector(fdX, fdZ, seed)).getBiome(x - fdX * pipeline.getSize(), - z - fdZ * pipeline.getSize()).getBiome(); + z - fdZ * pipeline.getSize()).getBiome(); + } + + @Override + public Optional getBaseBiome(int x, int z, long seed) { + return Optional.of(getBiome(x, z, seed)); } @Override diff --git a/common/addons/biome-provider-single/src/main/java/com/dfsek/terra/addons/biome/single/SingleBiomeProvider.java b/common/addons/biome-provider-single/src/main/java/com/dfsek/terra/addons/biome/single/SingleBiomeProvider.java index 0ca97bfbc..11524b9de 100644 --- a/common/addons/biome-provider-single/src/main/java/com/dfsek/terra/addons/biome/single/SingleBiomeProvider.java +++ b/common/addons/biome-provider-single/src/main/java/com/dfsek/terra/addons/biome/single/SingleBiomeProvider.java @@ -8,6 +8,7 @@ package com.dfsek.terra.addons.biome.single; import java.util.Collections; +import java.util.Optional; import com.dfsek.terra.api.world.biome.Biome; import com.dfsek.terra.api.world.biome.generation.BiomeProvider; @@ -25,6 +26,11 @@ public class SingleBiomeProvider implements BiomeProvider { return biome; } + @Override + public Optional getBaseBiome(int x, int z, long seed) { + return Optional.of(biome); + } + @Override public Iterable getBiomes() { return Collections.singleton(biome); diff --git a/common/api/src/main/java/com/dfsek/terra/api/world/biome/generation/CachingBiomeProvider.java b/common/api/src/main/java/com/dfsek/terra/api/world/biome/generation/CachingBiomeProvider.java index 7e29a180c..7eb59fe31 100644 --- a/common/api/src/main/java/com/dfsek/terra/api/world/biome/generation/CachingBiomeProvider.java +++ b/common/api/src/main/java/com/dfsek/terra/api/world/biome/generation/CachingBiomeProvider.java @@ -9,6 +9,7 @@ import com.dfsek.terra.api.world.info.WorldProperties; import java.util.HashMap; import java.util.Map; +import java.util.Optional; /** @@ -44,6 +45,11 @@ public class CachingBiomeProvider implements BiomeProvider, Handle { return biomes[yi]; } + @Override + public Optional getBaseBiome(int x, int z, long seed) { + return delegate.getBaseBiome(x, z, seed); + } + @Override public Column getColumn(int x, int z, WorldProperties properties) { return delegate.getColumn(x, z, properties);