
ChunkManager optimize chunks handling in small and big worlds Small worlds gets benefits with using int-object map instead long-object (in area -32768...32767 by x and z) Large worlds gets benefits by using efficient map by Colt project, which a little (3-6%) slower in writing, but greatly faster (400-500% from Java's HashMap and 150-180% from Trove's maps) on reading.
38 lines
893 B
Java
38 lines
893 B
Java
package kcauldron.wrapper;
|
|
|
|
import kcauldron.ChunkManager;
|
|
import net.minecraft.util.LongHashMap;
|
|
import net.minecraft.world.chunk.Chunk;
|
|
|
|
public class VanillaChunkHashMap extends LongHashMap {
|
|
private ChunkManager manager;
|
|
|
|
public VanillaChunkHashMap(ChunkManager manager) {
|
|
this.manager = manager;
|
|
}
|
|
|
|
@Override
|
|
public void add(long key, Object value) {
|
|
manager.putChunk((Chunk) value);
|
|
}
|
|
|
|
@Override
|
|
public boolean containsItem(long key) {
|
|
return getValueByKey(key) != null;
|
|
}
|
|
|
|
@Override
|
|
public Object getValueByKey(long key) {
|
|
final int x = (int) (key >>> 32);
|
|
final int z = (int) (key);
|
|
return manager.getChunk(x, z);
|
|
}
|
|
|
|
@Override
|
|
public Object remove(long key) {
|
|
final int x = (int) (key >>> 32);
|
|
final int z = (int) (key);
|
|
return manager.remove(x, z);
|
|
}
|
|
}
|