Fix decorations

This commit is contained in:
Daniel Mills 2020-09-13 07:03:42 -04:00
parent 42907b5a5d
commit d317ac5236
2 changed files with 23 additions and 41 deletions

View File

@ -119,6 +119,7 @@ public abstract class TopographicTerrainProvider extends ParallelTerrainProvider
throw new RuntimeException("Invalid OnGenerate call: x:" + x + " z:" + z);
}
RNG crand = getMasterRandom().nextParallelRNG(rx).nextParallelRNG(rz);
BlockData block;
int fluidHeight = getDimension().getFluidHeight();
double ox = getModifiedX(rx, rz);
@ -149,7 +150,7 @@ public abstract class TopographicTerrainProvider extends ParallelTerrainProvider
int lastCavernHeight = -1;
boolean biomeAssigned = false;
int max = Math.max(height, fluidHeight);
int biomeMax = Math.min(max + 16, 255);
int biomeMax = Math.min(max + 32, 255);
// From Height to Bedrock
for(int k = max; k >= 0; k--)
@ -198,7 +199,7 @@ public abstract class TopographicTerrainProvider extends ParallelTerrainProvider
}
// Set Biome
if(!biomeAssigned && biomeMap != null)
if(!biomeAssigned && biomeMap != null && k < max)
{
biomeAssigned = true;
@ -206,10 +207,9 @@ public abstract class TopographicTerrainProvider extends ParallelTerrainProvider
{
sliver.set(k, biome.getGroundBiome(getMasterRandom(), rz, k, rx));
for(int kv = max; kv < biomeMax; kv++)
for(int kv = max; kv <= biomeMax; kv++)
{
Biome skyBiome = biome.getSkyBiome(getMasterRandom(), rz, kv, rx);
sliver.set(kv, skyBiome);
sliver.set(kv, biome.getSkyBiome(getMasterRandom(), rz, kv, rx));
}
}
@ -261,7 +261,7 @@ public abstract class TopographicTerrainProvider extends ParallelTerrainProvider
// Decorate underwater surface
if(!cavernSurface && (k == height && B.isSolid(block.getMaterial()) && k < fluidHeight))
{
decorateUnderwater(biome, sliver, wx, k, wz, rx, rz, block);
decorateUnderwater(crand, biome, sliver, wx, k, wz, rx, rz, block);
}
// Decorate Cavern surfaces, but not the true surface
@ -272,7 +272,7 @@ public abstract class TopographicTerrainProvider extends ParallelTerrainProvider
carveBiome = biome.getRealCarvingBiome(getData());
}
decorateLand(carveBiome, sliver, wx, k, wz, rx, rz, block);
decorateLand(crand, carveBiome, sliver, wx, k, wz, rx, rz, block);
}
}
@ -320,7 +320,7 @@ public abstract class TopographicTerrainProvider extends ParallelTerrainProvider
if(blockc != null && !sliver.isSolid(i.getFloor() + 1))
{
decorateCave(caveBiome, sliver, wx, i.getFloor(), wz, rx, rz, blockc);
decorateCave(crand, caveBiome, sliver, wx, i.getFloor(), wz, rx, rz, blockc);
}
}
}
@ -330,7 +330,7 @@ public abstract class TopographicTerrainProvider extends ParallelTerrainProvider
// Decorate True Surface
if(block.getMaterial().isSolid())
{
decorateLand(biome, sliver, wx, Math.max(height, fluidHeight), wz, rx, rz, block);
decorateLand(crand, biome, sliver, wx, Math.max(height, fluidHeight), wz, rx, rz, block);
}
}
@ -345,7 +345,7 @@ public abstract class TopographicTerrainProvider extends ParallelTerrainProvider
}
}
private void decorateLand(IrisBiome biome, AtomicSliver sliver, double wx, int k, double wz, int rx, int rz, BlockData block)
private void decorateLand(RNG rng, IrisBiome biome, AtomicSliver sliver, double wx, int k, double wz, int rx, int rz, BlockData block)
{
if(!getDimension().isDecorate())
{
@ -361,7 +361,7 @@ public abstract class TopographicTerrainProvider extends ParallelTerrainProvider
continue;
}
BlockData d = i.getBlockData(biome, getMasterRandom().nextParallelRNG((int) (38888 + biome.getRarity() + biome.getName().length() + j++)), rx, rz);
BlockData d = i.getBlockData(biome, rng.nextParallelRNG((int) (38888 + biome.getRarity() + biome.getName().length() + j++)), rx, rz);
if(d != null)
{
@ -398,7 +398,7 @@ public abstract class TopographicTerrainProvider extends ParallelTerrainProvider
else
{
int stack = i.getHeight(getMasterRandom().nextParallelRNG((int) (39456 + (10000 * i.getChance()) + i.getStackMax() + i.getStackMin() + i.getZoom())), rx, rz);
int stack = i.getHeight(rng.nextParallelRNG((int) (39456 + (10000 * i.getChance()) + i.getStackMax() + i.getStackMin() + i.getZoom())), rx, rz);
if(stack == 1)
{
@ -419,7 +419,7 @@ public abstract class TopographicTerrainProvider extends ParallelTerrainProvider
}
}
private void decorateCave(IrisBiome biome, AtomicSliver sliver, double wx, int k, double wz, int rx, int rz, BlockData block)
private void decorateCave(RNG rng, IrisBiome biome, AtomicSliver sliver, double wx, int k, double wz, int rx, int rz, BlockData block)
{
if(!getDimension().isDecorate())
{
@ -430,7 +430,7 @@ public abstract class TopographicTerrainProvider extends ParallelTerrainProvider
for(IrisBiomeDecorator i : biome.getDecorators())
{
BlockData d = i.getBlockData(biome, getMasterRandom().nextParallelRNG(2333877 + biome.getRarity() + biome.getName().length() + +j++), rx, rz);
BlockData d = i.getBlockData(biome, rng.nextParallelRNG(2333877 + biome.getRarity() + biome.getName().length() + +j++), rx, rz);
if(d != null)
{
@ -459,7 +459,7 @@ public abstract class TopographicTerrainProvider extends ParallelTerrainProvider
else
{
int stack = i.getHeight(getMasterRandom().nextParallelRNG((int) (39456 + (1000 * i.getChance()) + i.getZoom() * 10)), rx, rz);
int stack = i.getHeight(rng.nextParallelRNG((int) (39456 + (1000 * i.getChance()) + i.getZoom() * 10)), rx, rz);
if(stack == 1)
{
@ -485,7 +485,7 @@ public abstract class TopographicTerrainProvider extends ParallelTerrainProvider
}
}
private void decorateUnderwater(IrisBiome biome, AtomicSliver sliver, double wx, int y, double wz, int rx, int rz, BlockData block)
private void decorateUnderwater(RNG random, IrisBiome biome, AtomicSliver sliver, double wx, int y, double wz, int rx, int rz, BlockData block)
{
if(!getDimension().isDecorate())
{
@ -505,7 +505,7 @@ public abstract class TopographicTerrainProvider extends ParallelTerrainProvider
if(d != null)
{
int stack = i.getHeight(getMasterRandom().nextParallelRNG((int) (239456 + i.getStackMax() + i.getStackMin() + i.getVerticalZoom() + i.getZoom() + i.getBlockData().size() + j)), rx, rz);
int stack = i.getHeight(random.nextParallelRNG((int) (239456 + i.getStackMax() + i.getStackMin() + i.getVerticalZoom() + i.getZoom() + i.getBlockData().size() + j)), rx, rz);
if(stack == 1)
{

View File

@ -72,39 +72,21 @@ public class CNG
public static CNG signature(RNG rng, NoiseType t)
{
// @NoArgsConstructor
return new CNG(rng.nextParallelRNG(17), t, 1D, 1)
.fractureWith(
new CNG(rng.nextParallelRNG(18), 1, 1).scale(0.9)
.fractureWith(new CNG(rng.nextParallelRNG(20), 1, 1).scale(0.21)
.fractureWith(new CNG(rng.nextParallelRNG(20), 1, 1).scale(0.9), 620), 145),
44)
.bake();
return new CNG(rng.nextParallelRNG(17), t, 1D, 1).fractureWith(new CNG(rng.nextParallelRNG(18), 1, 1).scale(0.9).fractureWith(new CNG(rng.nextParallelRNG(20), 1, 1).scale(0.21).fractureWith(new CNG(rng.nextParallelRNG(20), 1, 1).scale(0.9), 620), 145), 44).bake();
// @done
}
public static CNG signatureThick(RNG rng, NoiseType t)
{
// @NoArgsConstructor
return new CNG(rng.nextParallelRNG(133), t, 1D, 1)
.fractureWith(
new CNG(rng.nextParallelRNG(18), 1, 1).scale(0.5)
.fractureWith(new CNG(rng.nextParallelRNG(20), 1, 1).scale(0.11)
.fractureWith(new CNG(rng.nextParallelRNG(20), 1, 1).scale(0.4), 620), 145),
44)
.bake();
return new CNG(rng.nextParallelRNG(133), t, 1D, 1).fractureWith(new CNG(rng.nextParallelRNG(18), 1, 1).scale(0.5).fractureWith(new CNG(rng.nextParallelRNG(20), 1, 1).scale(0.11).fractureWith(new CNG(rng.nextParallelRNG(20), 1, 1).scale(0.4), 620), 145), 44).bake();
// @done
}
public static CNG signatureHalf(RNG rng, NoiseType t)
{
// @NoArgsConstructor
return new CNG(rng.nextParallelRNG(127), t, 1D, 1)
.fractureWith(
new CNG(rng.nextParallelRNG(18), 1, 1).scale(0.9)
.fractureWith(new CNG(rng.nextParallelRNG(20), 1, 1).scale(0.21)
.fractureWith(new CNG(rng.nextParallelRNG(20), 1, 1).scale(0.9), 420), 99),
22)
.bake();
return new CNG(rng.nextParallelRNG(127), t, 1D, 1).fractureWith(new CNG(rng.nextParallelRNG(18), 1, 1).scale(0.9).fractureWith(new CNG(rng.nextParallelRNG(20), 1, 1).scale(0.21).fractureWith(new CNG(rng.nextParallelRNG(20), 1, 1).scale(0.9), 420), 99), 22).bake();
// @done
}
@ -349,8 +331,8 @@ public class CNG
double scale = noscale ? 1 : this.bakedScale * this.scale;
double f = noscale ? 0 : (fracture != null ? (fracture.noise(dim) - 0.5) * fscale : 0D);
double x = dim.length > 0 ? dim[0] + f : 0D;
double y = dim.length > 1 ? dim[1] - f : 0D;
double z = dim.length > 2 ? dim[2] - f : 0D;
double y = dim.length > 1 ? dim[1] + f : 0D;
double z = dim.length > 2 ? dim[2] + f : 0D;
double n = generator.noise(x * scale, y * scale, z * scale) * opacity;
n = power != 1D ? (n < 0 ? -Math.pow(Math.abs(n), power) : Math.pow(n, power)) : n;
double m = 1;