optimize biome pipeline cache for 3 dimensions

This commit is contained in:
dfsek
2022-06-10 15:23:06 -07:00
parent 8f5d2c80f4
commit 33a39cb237
7 changed files with 105 additions and 4 deletions

View File

@@ -17,6 +17,9 @@ public interface Column<T> {
int getMaxY();
int getX();
int getZ();
T get(int y);
default void forEach(Consumer<T> consumer) {

View File

@@ -32,6 +32,16 @@ class BiomeColumn implements Column<Biome> {
return max;
}
@Override
public int getX() {
return x;
}
@Override
public int getZ() {
return z;
}
@Override
public Biome get(int y) {
return biomeProvider.getBiome(x, y, z, seed);

View File

@@ -21,7 +21,6 @@ public class CachingBiomeProvider implements BiomeProvider, Handle {
private final int minY;
private final int maxY;
private final Map<Long, Biome[]> cache = new HashMap<>();
private final Map<Long, Column<Biome>> columns = new HashMap<>();
protected CachingBiomeProvider(BiomeProvider delegate, int minY, int maxY) {
this.delegate = delegate;
@@ -47,7 +46,7 @@ public class CachingBiomeProvider implements BiomeProvider, Handle {
@Override
public Column<Biome> getColumn(int x, int z, WorldProperties properties) {
return columns.computeIfAbsent(MathUtil.squash(x, z), k -> BiomeProvider.super.getColumn(x, z, properties));
return delegate.getColumn(x, z, properties);
}
@Override

View File

@@ -87,7 +87,17 @@ public class ColumnTest {
public int getMaxY() {
return max;
}
@Override
public int getX() {
return 0;
}
@Override
public int getZ() {
return 0;
}
@Override
public T get(int y) {
return p.apply(y);