Fixed wrong geyser positioning and caves
This commit is contained in:
parent
23b4382231
commit
cdfb3db515
3 changed files with 211 additions and 195 deletions
|
@ -48,7 +48,22 @@ public class GeyserFeature extends DefaultFeature {
|
||||||
public boolean generate(StructureWorldAccess world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, DefaultFeatureConfig config) {
|
public boolean generate(StructureWorldAccess world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, DefaultFeatureConfig config) {
|
||||||
pos = getPosOnSurfaceWG(world, pos);
|
pos = getPosOnSurfaceWG(world, pos);
|
||||||
|
|
||||||
if (pos.getY() > 57) {
|
if (pos.getY() < 10) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Mutable bpos = new Mutable().set(pos);
|
||||||
|
bpos.setY(bpos.getY() - 1);
|
||||||
|
BlockState state = world.getBlockState(bpos);
|
||||||
|
while (state.isIn(EndTags.GEN_TERRAIN) || !state.getFluidState().isEmpty() && bpos.getY() > 5) {
|
||||||
|
bpos.setY(bpos.getY() - 1);
|
||||||
|
state = world.getBlockState(bpos);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pos.getY() - bpos.getY() < 25) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
int halfHeight = MHelper.randRange(10, 20, random);
|
int halfHeight = MHelper.randRange(10, 20, random);
|
||||||
float radius1 = halfHeight * 0.5F;
|
float radius1 = halfHeight * 0.5F;
|
||||||
float radius2 = halfHeight * 0.1F + 0.5F;
|
float radius2 = halfHeight * 0.1F + 0.5F;
|
||||||
|
@ -156,7 +171,7 @@ public class GeyserFeature extends DefaultFeature {
|
||||||
float distRaw = MHelper.length(mut.getX() - pos.getX(), mut.getZ() - pos.getZ());
|
float distRaw = MHelper.length(mut.getX() - pos.getX(), mut.getZ() - pos.getZ());
|
||||||
int dist = MHelper.floor(6 - distRaw) + random.nextInt(2);
|
int dist = MHelper.floor(6 - distRaw) + random.nextInt(2);
|
||||||
if (dist >= 0) {
|
if (dist >= 0) {
|
||||||
BlockState state = world.getBlockState(mut);
|
state = world.getBlockState(mut);
|
||||||
while (!state.getFluidState().isEmpty() || state.getMaterial().equals(Material.UNDERWATER_PLANT)) {
|
while (!state.getFluidState().isEmpty() || state.getMaterial().equals(Material.UNDERWATER_PLANT)) {
|
||||||
mut.setY(mut.getY() - 1);
|
mut.setY(mut.getY() - 1);
|
||||||
state = world.getBlockState(mut);
|
state = world.getBlockState(mut);
|
||||||
|
@ -191,7 +206,7 @@ public class GeyserFeature extends DefaultFeature {
|
||||||
float distRaw = MHelper.length(mut.getX() - pos.getX(), mut.getZ() - pos.getZ());
|
float distRaw = MHelper.length(mut.getX() - pos.getX(), mut.getZ() - pos.getZ());
|
||||||
int dist = MHelper.floor(6 - distRaw) + random.nextInt(2);
|
int dist = MHelper.floor(6 - distRaw) + random.nextInt(2);
|
||||||
if (dist >= 0) {
|
if (dist >= 0) {
|
||||||
BlockState state = world.getBlockState(mut);
|
state = world.getBlockState(mut);
|
||||||
while (state.isOf(Blocks.WATER)) {
|
while (state.isOf(Blocks.WATER)) {
|
||||||
mut.setY(mut.getY() - 1);
|
mut.setY(mut.getY() - 1);
|
||||||
state = world.getBlockState(mut);
|
state = world.getBlockState(mut);
|
||||||
|
@ -224,9 +239,6 @@ public class GeyserFeature extends DefaultFeature {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
static {
|
static {
|
||||||
REPLACE1 = (state) -> {
|
REPLACE1 = (state) -> {
|
||||||
return state.isAir() || (state.isIn(EndTags.GEN_TERRAIN));
|
return state.isAir() || (state.isIn(EndTags.GEN_TERRAIN));
|
||||||
|
|
|
@ -41,27 +41,12 @@ public class RoundCaveFeature extends DefaultFeature {
|
||||||
}
|
}
|
||||||
|
|
||||||
int radius = MHelper.randRange(10, 30, random);
|
int radius = MHelper.randRange(10, 30, random);
|
||||||
/*int bottom = BlocksHelper.upRay(world, new BlockPos(pos.getX(), 0, pos.getZ()), 32) + radius + 5;
|
|
||||||
int top = world.getTopY(Heightmap.Type.WORLD_SURFACE, pos.getX(), pos.getZ());
|
|
||||||
|
|
||||||
Mutable bpos = new Mutable();
|
|
||||||
bpos.setX(pos.getX());
|
|
||||||
bpos.setZ(pos.getZ());
|
|
||||||
bpos.setY(top);
|
|
||||||
while (top > bottom && !world.getBlockState(bpos).isIn(EndTags.GEN_TERRAIN)) {
|
|
||||||
bpos.setY(--top);
|
|
||||||
}
|
|
||||||
top -= radius * 1.3F + 5;
|
|
||||||
|
|
||||||
if (top <= bottom) {
|
|
||||||
return false;
|
|
||||||
}*/
|
|
||||||
|
|
||||||
int top = world.getTopY(Heightmap.Type.WORLD_SURFACE_WG, pos.getX(), pos.getZ());
|
int top = world.getTopY(Heightmap.Type.WORLD_SURFACE_WG, pos.getX(), pos.getZ());
|
||||||
Mutable bpos = new Mutable();
|
Mutable bpos = new Mutable();
|
||||||
bpos.setX(pos.getX());
|
bpos.setX(pos.getX());
|
||||||
bpos.setZ(pos.getZ());
|
bpos.setZ(pos.getZ());
|
||||||
bpos.setY(top);
|
bpos.setY(top - 1);
|
||||||
|
|
||||||
BlockState state = world.getBlockState(bpos);
|
BlockState state = world.getBlockState(bpos);
|
||||||
while (!state.isIn(EndTags.GEN_TERRAIN) && bpos.getY() > 5) {
|
while (!state.isIn(EndTags.GEN_TERRAIN) && bpos.getY() > 5) {
|
||||||
|
@ -73,7 +58,7 @@ public class RoundCaveFeature extends DefaultFeature {
|
||||||
}
|
}
|
||||||
top = (int) (bpos.getY() - (radius * 1.3F + 5));
|
top = (int) (bpos.getY() - (radius * 1.3F + 5));
|
||||||
|
|
||||||
while (state.isIn(EndTags.GEN_TERRAIN) || state.isOf(Blocks.WATER) && bpos.getY() > 5) {
|
while (state.isIn(EndTags.GEN_TERRAIN) || !state.getFluidState().isEmpty() && bpos.getY() > 5) {
|
||||||
bpos.setY(bpos.getY() - 1);
|
bpos.setY(bpos.getY() - 1);
|
||||||
state = world.getBlockState(bpos);
|
state = world.getBlockState(bpos);
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,8 +33,28 @@ public class SulphuricCaveFeature extends DefaultFeature {
|
||||||
@Override
|
@Override
|
||||||
public boolean generate(StructureWorldAccess world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, DefaultFeatureConfig config) {
|
public boolean generate(StructureWorldAccess world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, DefaultFeatureConfig config) {
|
||||||
int radius = MHelper.randRange(10, 30, random);
|
int radius = MHelper.randRange(10, 30, random);
|
||||||
int bottom = BlocksHelper.upRay(world, new BlockPos(pos.getX(), 0, pos.getZ()), 32) + radius + 5;
|
|
||||||
int top = world.getTopY(Heightmap.Type.WORLD_SURFACE_WG, pos.getX(), pos.getZ()) - radius - 5;
|
int top = world.getTopY(Heightmap.Type.WORLD_SURFACE_WG, pos.getX(), pos.getZ());
|
||||||
|
Mutable bpos = new Mutable();
|
||||||
|
bpos.setX(pos.getX());
|
||||||
|
bpos.setZ(pos.getZ());
|
||||||
|
bpos.setY(top - 1);
|
||||||
|
|
||||||
|
BlockState state = world.getBlockState(bpos);
|
||||||
|
while (!state.isIn(EndTags.GEN_TERRAIN) && bpos.getY() > 5) {
|
||||||
|
bpos.setY(bpos.getY() - 1);
|
||||||
|
state = world.getBlockState(bpos);
|
||||||
|
}
|
||||||
|
if (bpos.getY() < 10) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
top = (int) (bpos.getY() - (radius * 1.3F + 5));
|
||||||
|
|
||||||
|
while (state.isIn(EndTags.GEN_TERRAIN) || !state.getFluidState().isEmpty() && bpos.getY() > 5) {
|
||||||
|
bpos.setY(bpos.getY() - 1);
|
||||||
|
state = world.getBlockState(bpos);
|
||||||
|
}
|
||||||
|
int bottom = (int) (bpos.getY() + radius * 1.3F + 5);
|
||||||
|
|
||||||
if (top <= bottom) {
|
if (top <= bottom) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -55,7 +75,6 @@ public class SulphuricCaveFeature extends DefaultFeature {
|
||||||
double hr = radius * 0.75;
|
double hr = radius * 0.75;
|
||||||
double nr = radius * 0.25;
|
double nr = radius * 0.25;
|
||||||
|
|
||||||
BlockState state;
|
|
||||||
Set<BlockPos> brimstone = Sets.newHashSet();
|
Set<BlockPos> brimstone = Sets.newHashSet();
|
||||||
BlockState rock = EndBlocks.SULPHURIC_ROCK.stone.getDefaultState();
|
BlockState rock = EndBlocks.SULPHURIC_ROCK.stone.getDefaultState();
|
||||||
int waterLevel = pos.getY() + MHelper.randRange(MHelper.floor(radius * 0.8), radius, random);
|
int waterLevel = pos.getY() + MHelper.randRange(MHelper.floor(radius * 0.8), radius, random);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue