mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-06-18 14:50:56 +00:00
bound check SurfaceLocator
This commit is contained in:
+6
-3
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user