Skip to content

Commit f492467

Browse files
committed
Ensure chunk loaded when executing getChunkAtAsync callback
1 parent 0a2dc0a commit f492467

2 files changed

Lines changed: 8 additions & 5 deletions

File tree

patches/server/0010-Add-task-scheduling-API.patch

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -993,7 +993,7 @@ index 01472ee224ac91ec4fbffdf82a0d92e0d1ab69c1..0e0a098f543e19a41b4bae73156ece97
993993
private final io.papermc.paper.threadedregions.scheduler.FoliaGlobalRegionScheduler globalRegionScheduler = new io.papermc.paper.threadedregions.scheduler.FoliaGlobalRegionScheduler();
994994

995995
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
996-
index 523a6afd7f1dcb0b4ddf5ede0415487c104296bc..38fd594b8184e4b2f11812f80e77a6d1d8df65ad 100644
996+
index 523a6afd7f1dcb0b4ddf5ede0415487c104296bc..04525318d338f0b552c35301770c586b2964769e 100644
997997
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
998998
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
999999
@@ -5,6 +5,9 @@ import com.google.common.base.Predicates;
@@ -1030,12 +1030,15 @@ index 523a6afd7f1dcb0b4ddf5ede0415487c104296bc..38fd594b8184e4b2f11812f80e77a6d1
10301030
}
10311031
ChunkAccess chunk = world.getChunkSource().getChunkAtImmediately(x, z);
10321032
if (chunk == null) {
1033-
@@ -2579,7 +2585,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
1033+
@@ -2579,9 +2585,9 @@ public class CraftWorld extends CraftRegionAccessor implements World {
10341034
java.util.concurrent.CompletableFuture<Chunk> ret = new java.util.concurrent.CompletableFuture<>();
10351035

10361036
io.papermc.paper.chunk.system.ChunkSystem.scheduleChunkLoad(this.getHandle(), x, z, gen, ChunkStatus.FULL, true, priority, (c) -> {
10371037
- net.minecraft.server.MinecraftServer.getServer().scheduleOnMain(() -> {
1038+
+ if (c != null) this.addTicket(x, z); // Paper // ShreddedPaper - add the ticket before scheduling on correct thread
10381039
+ ShreddedPaper.ensureSync(this.getHandle(), c.getPos(), () -> { // ShreddedPaper - ensure on correct thread
10391040
net.minecraft.world.level.chunk.LevelChunk chunk = (net.minecraft.world.level.chunk.LevelChunk)c;
1040-
if (chunk != null) this.addTicket(x, z); // Paper
1041+
- if (chunk != null) this.addTicket(x, z); // Paper
10411042
ret.complete(chunk == null ? null : new CraftChunk(chunk));
1043+
});
1044+
});

patches/server/0026-Run-unsupported-plugins-in-sync.patch

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,7 @@ index 2c82a48867ab347f21822576baa0368273242f82..143638f994a842472e827cb9b4efc160
349349
Plugin plugin = registration.getPlugin();
350350

351351
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
352-
index dc3c49ea458d334560dd3f99b66eaf969c888353..16bb57ab327230429fd3cbd822e7fcc28b329fbe 100644
352+
index 91a7816968b3eb7ec2bc471a328d4b75eec09770..0ab40a285b72ab548a575edc3855422805e3b994 100644
353353
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
354354
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
355355
@@ -7,6 +7,7 @@ import com.google.common.collect.ImmutableMap;
@@ -367,9 +367,9 @@ index dc3c49ea458d334560dd3f99b66eaf969c888353..16bb57ab327230429fd3cbd822e7fcc2
367367
+ Plugin plugin = SynchronousPluginExecution.getCurrentPlugin(); // ShreddedPaper - synchronous plugin execution
368368

369369
io.papermc.paper.chunk.system.ChunkSystem.scheduleChunkLoad(this.getHandle(), x, z, gen, ChunkStatus.FULL, true, priority, (c) -> {
370+
if (c != null) this.addTicket(x, z); // Paper // ShreddedPaper - add the ticket before scheduling on correct thread
370371
ShreddedPaper.ensureSync(this.getHandle(), c.getPos(), () -> { // ShreddedPaper - ensure on correct thread
371372
net.minecraft.world.level.chunk.LevelChunk chunk = (net.minecraft.world.level.chunk.LevelChunk)c;
372-
if (chunk != null) this.addTicket(x, z); // Paper
373373
- ret.complete(chunk == null ? null : new CraftChunk(chunk));
374374
+ SynchronousPluginExecution.executeNoException(plugin, () -> ret.complete(chunk == null ? null : new CraftChunk(chunk))); // ShreddedPaper - synchronous plugin execution
375375
});

0 commit comments

Comments
 (0)