From 18bd26625882bb7b138936e2ec849f8a035622c6 Mon Sep 17 00:00:00 2001 From: Aikar Date: Sat, 23 May 2020 18:38:29 -0400 Subject: [PATCH] Fix plugins calling getChunkAtAsync asynchronously While this method has async in it's name, it's not actually meant to be called asynchronously.... It just means IT will load the chunk asynchronously without blocking main. So fix this so that if a plugin calls it async, it forces the request back to main thread. --- .../Asynchronous-chunk-IO-and-loading.patch | 12 ++++++++++++ ...nt-Chunk-Priority-Urgency-System-for-Chunks.patch | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/Spigot-Server-Patches/Asynchronous-chunk-IO-and-loading.patch b/Spigot-Server-Patches/Asynchronous-chunk-IO-and-loading.patch index 3e019445a..5890301d6 100644 --- a/Spigot-Server-Patches/Asynchronous-chunk-IO-and-loading.patch +++ b/Spigot-Server-Patches/Asynchronous-chunk-IO-and-loading.patch @@ -4182,6 +4182,18 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + if (immediate != null) { + return CompletableFuture.completedFuture(immediate.getBukkitChunk()); + } ++ } else { ++ CompletableFuture future = new CompletableFuture(); ++ world.getMinecraftServer().execute(() -> { ++ getChunkAtAsync(x, z, gen, urgent).whenComplete((chunk, err) -> { ++ if (err != null) { ++ future.completeExceptionally(err); ++ } else { ++ future.complete(chunk); ++ } ++ }); ++ }); ++ return future; + } + + return this.world.getChunkProvider().getChunkAtAsynchronously(x, z, gen, urgent).thenComposeAsync((either) -> { diff --git a/Spigot-Server-Patches/Implement-Chunk-Priority-Urgency-System-for-Chunks.patch b/Spigot-Server-Patches/Implement-Chunk-Priority-Urgency-System-for-Chunks.patch index a0ae6b33a..b55c07d2f 100644 --- a/Spigot-Server-Patches/Implement-Chunk-Priority-Urgency-System-for-Chunks.patch +++ b/Spigot-Server-Patches/Implement-Chunk-Priority-Urgency-System-for-Chunks.patch @@ -823,7 +823,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java @@ -0,0 +0,0 @@ public class CraftWorld implements World { - } + return future; } + if (!urgent) {