From e3747d3cfd4d293041574abf507593a88e4dcb7f Mon Sep 17 00:00:00 2001 From: Daniel Mills Date: Sat, 25 Jul 2020 14:02:58 -0400 Subject: [PATCH] Fix Beaches --- .../iris/generator/TerrainChunkGenerator.java | 42 ++++++++++++++++++- .../iris/object/IrisDepositGenerator.java | 1 - 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/src/main/java/ninja/bytecode/iris/generator/TerrainChunkGenerator.java b/src/main/java/ninja/bytecode/iris/generator/TerrainChunkGenerator.java index 453f2425b..1265d1263 100644 --- a/src/main/java/ninja/bytecode/iris/generator/TerrainChunkGenerator.java +++ b/src/main/java/ninja/bytecode/iris/generator/TerrainChunkGenerator.java @@ -9,6 +9,7 @@ import org.bukkit.block.data.BlockData; import lombok.Data; import lombok.EqualsAndHashCode; import ninja.bytecode.iris.layer.GenLayerCave; +import ninja.bytecode.iris.object.DecorationPart; import ninja.bytecode.iris.object.IrisBiome; import ninja.bytecode.iris.object.IrisBiomeDecorator; import ninja.bytecode.iris.object.IrisRegion; @@ -131,6 +132,11 @@ public abstract class TerrainChunkGenerator extends ParallelChunkGenerator for(IrisBiomeDecorator i : biome.getDecorators()) { + if(i.getPartOf().equals(DecorationPart.SHORE_LINE) && !touchesSea(rx, rz)) + { + continue; + } + BlockData d = i.getBlockData(getMasterRandom().nextParallelRNG(biome.hashCode() + j++), wx, wz); if(d != null) @@ -206,7 +212,7 @@ public abstract class TerrainChunkGenerator extends ParallelChunkGenerator return getBiomeHeight(wx, wz); } - public BiomeResult sampleTrueBiome(int x, int z) + public BiomeResult sampleTrueBiomeBase(int x, int z) { if(!getDimension().getFocus().equals("")) { @@ -253,6 +259,30 @@ public abstract class TerrainChunkGenerator extends ParallelChunkGenerator return glBiome.generateRegionData(wx, wz, x, z, region); } + public BiomeResult sampleTrueBiome(int x, int z) + { + if(!getDimension().getFocus().equals("")) + { + return focus(); + } + + double wx = getModifiedX(x, z); + double wz = getModifiedZ(x, z); + IrisRegion region = sampleRegion(x, z); + int height = sampleHeight(x, z); + double sh = region.getShoreHeight(wx, wz); + BiomeResult res = sampleTrueBiomeBase(x, z); + IrisBiome current = res.getBiome(); + + // Stop oceans from spawning on the first level of beach + if(current.isSea() && height > getDimension().getFluidHeight() - sh) + { + return glBiome.generateShoreData(wx, wz, x, z, region); + } + + return res; + } + @Override protected int onSampleColumnHeight(int cx, int cz, int rx, int rz, int x, int z) { @@ -262,6 +292,16 @@ public abstract class TerrainChunkGenerator extends ParallelChunkGenerator return (int) Math.round(noise) + fluidHeight; } + private boolean touchesSea(int rx, int rz) + { + return isFluidAtHeight(rx + 1, rz) || isFluidAtHeight(rx - 1, rz) || isFluidAtHeight(rx, rz - 1) || isFluidAtHeight(rx, rz + 1); + } + + public boolean isFluidAtHeight(int x, int z) + { + return Math.round(getTerrainHeight(x, z)) < getFluidHeight(); + } + public int getFluidHeight() { return getDimension().getFluidHeight(); diff --git a/src/main/java/ninja/bytecode/iris/object/IrisDepositGenerator.java b/src/main/java/ninja/bytecode/iris/object/IrisDepositGenerator.java index 8c036bdb5..928fdfde5 100644 --- a/src/main/java/ninja/bytecode/iris/object/IrisDepositGenerator.java +++ b/src/main/java/ninja/bytecode/iris/object/IrisDepositGenerator.java @@ -6,7 +6,6 @@ import org.bukkit.block.data.BlockData; import org.bukkit.util.BlockVector; import lombok.Data; -import ninja.bytecode.iris.Iris; import ninja.bytecode.iris.generator.ParallaxChunkGenerator; import ninja.bytecode.iris.util.BlockDataTools; import ninja.bytecode.iris.util.Desc;