diff --git a/Spigot-API-Patches/0125-Add-async-chunk-load-API.patch b/Spigot-API-Patches/0125-Add-async-chunk-load-API.patch new file mode 100644 index 000000000..0ce23ae27 --- /dev/null +++ b/Spigot-API-Patches/0125-Add-async-chunk-load-API.patch @@ -0,0 +1,92 @@ +From 50fe6b99320148740160eec04f499d03b57987dc 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 550c26be..121033e9 100644 +--- a/src/main/java/org/bukkit/World.java ++++ b/src/main/java/org/bukkit/World.java +@@ -137,6 +137,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.18.0 + diff --git a/Spigot-Server-Patches/0302-Add-async-chunk-load-API.patch b/Spigot-Server-Patches/0302-Add-async-chunk-load-API.patch new file mode 100644 index 000000000..41e161210 --- /dev/null +++ b/Spigot-Server-Patches/0302-Add-async-chunk-load-API.patch @@ -0,0 +1,41 @@ +From 589d50e9902c7adfcd9837768bbcddbfdd809ebd Mon Sep 17 00:00:00 2001 +From: Aikar +Date: Sat, 21 Jul 2018 16:55:04 -0400 +Subject: [PATCH] Add async chunk load API + + +diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +index 0f4a894eb..995e02f1d 100644 +--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java ++++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +@@ -156,6 +156,27 @@ public class CraftWorld implements World { + } + } + ++ // Paper start - Async chunk load API ++ public void getChunkAtAsync(final int x, final int z, final ChunkLoadCallback callback) { ++ final ChunkProviderServer cps = this.world.getChunkProviderServer(); ++ callback.onLoad(cps.getChunkAt(x, z).bukkitChunk); // TODO: Add back async variant ++ /*cps.getChunkAt(x, z, new Runnable() { ++ @Override ++ public void run() { ++ callback.onLoad(cps.getChunkAt(x, z).bukkitChunk); ++ } ++ });*/ ++ } ++ ++ public void getChunkAtAsync(Block block, ChunkLoadCallback callback) { ++ getChunkAtAsync(block.getX() >> 4, block.getZ() >> 4, callback); ++ } ++ ++ public void getChunkAtAsync(Location location, ChunkLoadCallback callback) { ++ getChunkAtAsync(location.getBlockX() >> 4, location.getBlockZ() >> 4, callback); ++ } ++ // Paper end ++ + public Chunk getChunkAt(int x, int z) { + return this.world.getChunkProviderServer().getChunkAt(x, z).bukkitChunk; + } +-- +2.18.0 +