13
0
geforkt von Mirrors/Paper

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.
Dieser Commit ist enthalten in:
Aikar 2020-05-23 18:38:29 -04:00
Ursprung 238ab72fce
Commit 18bd266258
2 geänderte Dateien mit 13 neuen und 1 gelöschten Zeilen

Datei anzeigen

@ -4182,6 +4182,18 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
+ if (immediate != null) {
+ return CompletableFuture.completedFuture(immediate.getBukkitChunk());
+ }
+ } else {
+ CompletableFuture<Chunk> future = new CompletableFuture<Chunk>();
+ 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) -> {

Datei anzeigen

@ -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) {