Fix Beaches

This commit is contained in:
Daniel Mills 2020-07-25 14:02:58 -04:00
parent ebe96c0dad
commit e3747d3cfd
2 changed files with 41 additions and 2 deletions

View File

@ -9,6 +9,7 @@ import org.bukkit.block.data.BlockData;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import ninja.bytecode.iris.layer.GenLayerCave; import ninja.bytecode.iris.layer.GenLayerCave;
import ninja.bytecode.iris.object.DecorationPart;
import ninja.bytecode.iris.object.IrisBiome; import ninja.bytecode.iris.object.IrisBiome;
import ninja.bytecode.iris.object.IrisBiomeDecorator; import ninja.bytecode.iris.object.IrisBiomeDecorator;
import ninja.bytecode.iris.object.IrisRegion; import ninja.bytecode.iris.object.IrisRegion;
@ -131,6 +132,11 @@ public abstract class TerrainChunkGenerator extends ParallelChunkGenerator
for(IrisBiomeDecorator i : biome.getDecorators()) 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); BlockData d = i.getBlockData(getMasterRandom().nextParallelRNG(biome.hashCode() + j++), wx, wz);
if(d != null) if(d != null)
@ -206,7 +212,7 @@ public abstract class TerrainChunkGenerator extends ParallelChunkGenerator
return getBiomeHeight(wx, wz); return getBiomeHeight(wx, wz);
} }
public BiomeResult sampleTrueBiome(int x, int z) public BiomeResult sampleTrueBiomeBase(int x, int z)
{ {
if(!getDimension().getFocus().equals("")) if(!getDimension().getFocus().equals(""))
{ {
@ -253,6 +259,30 @@ public abstract class TerrainChunkGenerator extends ParallelChunkGenerator
return glBiome.generateRegionData(wx, wz, x, z, region); 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 @Override
protected int onSampleColumnHeight(int cx, int cz, int rx, int rz, int x, int z) 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; 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() public int getFluidHeight()
{ {
return getDimension().getFluidHeight(); return getDimension().getFluidHeight();

View File

@ -6,7 +6,6 @@ import org.bukkit.block.data.BlockData;
import org.bukkit.util.BlockVector; import org.bukkit.util.BlockVector;
import lombok.Data; import lombok.Data;
import ninja.bytecode.iris.Iris;
import ninja.bytecode.iris.generator.ParallaxChunkGenerator; import ninja.bytecode.iris.generator.ParallaxChunkGenerator;
import ninja.bytecode.iris.util.BlockDataTools; import ninja.bytecode.iris.util.BlockDataTools;
import ninja.bytecode.iris.util.Desc; import ninja.bytecode.iris.util.Desc;