Correctly use getNearestSurfaceTerrainBlock in SurfaceSpline and SchemGen (#1616)

Fixes #1609
This commit is contained in:
Jordan 2022-02-17 19:34:07 +01:00 committed by GitHub
parent 3f28a5759d
commit f7a0c14a1b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 6 deletions

View File

@ -72,8 +72,8 @@ public class SurfaceSpline implements Brush {
final int tipx = MathMan.roundInt(tipv.getX());
final int tipz = (int) tipv.getZ();
int tipy = MathMan.roundInt(tipv.getY());
tipy = editSession.getNearestSurfaceTerrainBlock(tipx, tipz, tipy, minY, maxY);
if (tipy == -1) {
tipy = editSession.getNearestSurfaceTerrainBlock(tipx, tipz, tipy, minY, maxY, Integer.MIN_VALUE, Integer.MAX_VALUE);
if (tipy == Integer.MIN_VALUE || tipy == Integer.MAX_VALUE) {
continue;
}
if (radius == 0) {
@ -93,8 +93,16 @@ public class SurfaceSpline implements Brush {
for (int loopx = tipx - ceilrad; loopx <= tipx + ceilrad; loopx++) {
for (int loopz = tipz - ceilrad; loopz <= tipz + ceilrad; loopz++) {
if (MathMan.hypot2(loopx - tipx, 0, loopz - tipz) <= radius2) {
int y = editSession.getNearestSurfaceTerrainBlock(loopx, loopz, v.getBlockY(), 0, maxY);
if (y == -1) {
int y = editSession.getNearestSurfaceTerrainBlock(
loopx,
loopz,
v.getBlockY(),
minY,
maxY,
Integer.MIN_VALUE,
Integer.MAX_VALUE
);
if (y == Integer.MIN_VALUE || y == Integer.MAX_VALUE) {
continue;
}
newSet.add(loopx, y, loopz);

View File

@ -33,8 +33,16 @@ public class SchemGen implements Resource {
public boolean spawn(Random random, int x, int z) throws WorldEditException {
mutable.mutX(x);
mutable.mutZ(z);
int y = extent.getNearestSurfaceTerrainBlock(x, z, mutable.getBlockY(), this.extent.getMinY(), this.extent.getMaxY());
if (y == -1) {
int y = extent.getNearestSurfaceTerrainBlock(
x,
z,
mutable.getBlockY(),
this.extent.getMinY(),
this.extent.getMaxY(),
Integer.MIN_VALUE,
Integer.MAX_VALUE
);
if (y == Integer.MIN_VALUE || y == Integer.MAX_VALUE) {
return false;
}
mutable.mutY(y);