package net.minestom.server.instance; import net.minestom.server.MinecraftServer; import net.minestom.server.utils.async.AsyncUtils; import net.minestom.server.utils.thread.MinestomThread; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Collection; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutorService; import java.util.concurrent.atomic.AtomicInteger; /** * Interface implemented to change the way chunks are loaded/saved. *
* See {@link AnvilLoader} for the default implementation used in {@link InstanceContainer}.
*/
public interface IChunkLoader {
/**
* Loads a {@link Chunk}, all blocks should be set since the {@link ChunkGenerator} is not applied.
*
* @param instance the {@link Instance} where the {@link Chunk} belong
* @param chunkX the chunk X
* @param chunkZ the chunk Z
* @return a {@link CompletableFuture} containing the chunk, or null if not present
*/
@NotNull CompletableFuture<@Nullable Chunk> loadChunk(@NotNull Instance instance, int chunkX, int chunkZ);
/**
* Saves a {@link Chunk} with an optional callback for when it is done.
*
* @param chunk the {@link Chunk} to save
* @return a {@link CompletableFuture} executed when the {@link Chunk} is done saving,
* should be called even if the saving failed (you can throw an exception).
*/
@NotNull CompletableFuture
* Implementations need to check {@link #supportsParallelSaving()} to support the feature if possible.
*
* @param chunks the chunks to save
* @return a {@link CompletableFuture} executed when the {@link Chunk} is done saving,
* should be called even if the saving failed (you can throw an exception).
*/
default @NotNull CompletableFuture