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; import java.util.function.Consumer;
public interface IChunkLoader { 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); void saveChunk(Chunk chunk, Runnable callback);
} }

View File

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

View File

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