Moved chunk creation out of chunk loaders

This commit is contained in:
jglrxavpok 2020-06-30 18:12:09 +02:00
parent 1ddef81372
commit ef8c275c4d
3 changed files with 10 additions and 5 deletions

View File

@ -3,6 +3,6 @@ package net.minestom.server.instance;
import java.util.function.Consumer;
public interface IChunkLoader {
void loadOrCreateChunk(Instance instance, int chunkX, int chunkZ, Consumer<Chunk> callback);
boolean loadChunk(Instance instance, int chunkX, int chunkZ, Consumer<Chunk> callback);
void saveChunk(Chunk chunk, Runnable callback);
}

View File

@ -391,11 +391,16 @@ public class InstanceContainer extends Instance {
@Override
protected void retrieveChunk(int chunkX, int chunkZ, Consumer<Chunk> callback) {
chunkLoader.loadOrCreateChunk(this, chunkX, chunkZ, chunk -> {
boolean loaded = chunkLoader.loadChunk(this, chunkX, chunkZ, chunk -> {
cacheChunk(chunk);
if (callback != null)
callback.accept(chunk);
});
if(!loaded) {
// Not found, create a new chunk
createChunk(chunkX, chunkZ, callback);
}
}
@Override

View File

@ -39,15 +39,15 @@ public class MinestomBasicChunkLoader implements IChunkLoader {
}
@Override
public void loadOrCreateChunk(Instance instance, int chunkX, int chunkZ, Consumer<Chunk> callback) {
public boolean loadChunk(Instance instance, int chunkX, int chunkZ, Consumer<Chunk> callback) {
byte[] bytes = storageFolder == null ? null : storageFolder.get(getChunkKey(chunkX, chunkZ));
if (bytes == null) {
// Not found, create a new chunk
instance.createChunk(chunkX, chunkZ, callback);
return false;
} else {
// Found, load from result bytes
ChunkReader.readChunk(bytes, instance, chunkX, chunkZ, callback);
return true;
}
}