From 8707e3ae8555862ee88d25e9fc066c243ddfe919 Mon Sep 17 00:00:00 2001 From: Aikar Date: Mon, 29 Feb 2016 17:43:33 -0600 Subject: [PATCH] Add async chunk load API diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java index 9b6eb48f..561ef0e1 100644 --- a/src/main/java/org/bukkit/World.java +++ b/src/main/java/org/bukkit/World.java @@ -136,6 +136,78 @@ public interface World extends PluginMessageRecipient, Metadatable { */ public Chunk getChunkAt(Block block); + /** + * Used by {@link World#getChunkAtAsync(Location,ChunkLoadCallback)} methods + * to request a {@link Chunk} to be loaded, with this callback receiving + * the chunk when it is finished. + * + * This callback will be executed on synchronously on the main thread. + * + * Timing and order this callback is fired is intentionally not defined and + * and subject to change. + */ + public static interface ChunkLoadCallback { + public void onLoad(Chunk chunk); + } + + /** + * Requests a {@link Chunk} to be loaded at the given coordinates + * + * This method makes no guarantee on how fast the chunk will load, + * and will return the chunk to the callback at a later time. + * + * You should use this method if you need a chunk but do not need it + * immediately, and you wish to let the server control the speed + * of chunk loads, keeping performance in mind. + * + * The {@link ChunkLoadCallback} will always be executed synchronously + * on the main Server Thread. + * + * @param x Chunk X-coordinate of the chunk - (world coordinate / 16) + * @param z Chunk Z-coordinate of the chunk - (world coordinate / 16) + * @param cb Callback to receive the chunk when it is loaded. + * will be executed synchronously + */ + public void getChunkAtAsync(int x, int z, ChunkLoadCallback cb); + + /** + * Requests a {@link Chunk} to be loaded at the given {@link Location} + * + * This method makes no guarantee on how fast the chunk will load, + * and will return the chunk to the callback at a later time. + * + * You should use this method if you need a chunk but do not need it + * immediately, and you wish to let the server control the speed + * of chunk loads, keeping performance in mind. + * + * The {@link ChunkLoadCallback} will always be executed synchronously + * on the main Server Thread. + * + * @param location Location of the chunk + * @param cb Callback to receive the chunk when it is loaded. + * will be executed synchronously + */ + public void getChunkAtAsync(Location location, ChunkLoadCallback cb); + + /** + * Requests {@link Chunk} to be loaded that contains the given {@link Block} + * + * This method makes no guarantee on how fast the chunk will load, + * and will return the chunk to the callback at a later time. + * + * You should use this method if you need a chunk but do not need it + * immediately, and you wish to let the server control the speed + * of chunk loads, keeping performance in mind. + * + * The {@link ChunkLoadCallback} will always be executed synchronously + * on the main Server Thread. + * + * @param block Block to get the containing chunk from + * @param cb Callback to receive the chunk when it is loaded. + * will be executed synchronously + */ + public void getChunkAtAsync(Block block, ChunkLoadCallback cb); + /** * Checks if the specified {@link Chunk} is loaded * -- 2.16.2