bound check SurfaceLocator

This commit is contained in:
dfsek
2022-06-09 16:09:54 -07:00
parent dc80fc1ffb
commit 158adb55af
@@ -13,6 +13,8 @@ import com.dfsek.terra.api.util.Range;
import com.dfsek.terra.api.world.chunk.generation.util.Column; import com.dfsek.terra.api.world.chunk.generation.util.Column;
import com.dfsek.terra.api.world.chunk.generation.util.Column.BinaryColumnBuilder; import com.dfsek.terra.api.world.chunk.generation.util.Column.BinaryColumnBuilder;
import net.jafama.FastMath;
public class SurfaceLocator implements Locator { public class SurfaceLocator implements Locator {
private final Range search; private final Range search;
@@ -24,9 +26,10 @@ public class SurfaceLocator implements Locator {
@Override @Override
public BinaryColumn getSuitableCoordinates(Column<?> column) { public BinaryColumn getSuitableCoordinates(Column<?> column) {
BinaryColumnBuilder builder = column.newBinaryColumn(); BinaryColumnBuilder builder = column.newBinaryColumn();
for(int y : search) { int max = FastMath.min(search.getMax(), column.getMaxY());
if(y < column.getMinY()) continue; int min = FastMath.max(search.getMin(), column.getMinY());
if(y >= column.getMaxY()) break; if(min >= max) return builder.build();
for(int y = min; y < max; y++) {
if(column.getBlock(y).isAir() && !column.getBlock(y - 1).isAir()) { if(column.getBlock(y).isAir() && !column.getBlock(y - 1).isAir()) {
builder.set(y); builder.set(y);
} }