mirror of
https://github.com/PaperMC/Paper.git
synced 2024-09-27 14:12:45 +02:00
30 lines
1.8 KiB
Diff
30 lines
1.8 KiB
Diff
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||
|
From: Spottedleaf <Spottedleaf@users.noreply.github.com>
|
||
|
Date: Sun, 3 Jul 2022 22:31:37 -0700
|
||
|
Subject: [PATCH] Do not sync load chunk for dynamic game event listener
|
||
|
registration
|
||
|
|
||
|
These can be called while an entity is being added to the world,
|
||
|
and if the entity is being added from a chunk load context the
|
||
|
sync load will block indefinitely (because the chunk load context
|
||
|
is for completing the chunk to FULL).
|
||
|
|
||
|
This does raise questions about the current system for these
|
||
|
dynamic registrations, as it looks like there is _zero_ logic
|
||
|
to account for the case where the chunk is _not_ currently loaded
|
||
|
and then later loaded.
|
||
|
|
||
|
diff --git a/src/main/java/net/minecraft/world/level/gameevent/DynamicGameEventListener.java b/src/main/java/net/minecraft/world/level/gameevent/DynamicGameEventListener.java
|
||
|
index 39f79c6d95e0f14d55783375df9ecf053e8d19de..610bfcceec51fcd1d82040f0dbfc03be20b8dce7 100644
|
||
|
--- a/src/main/java/net/minecraft/world/level/gameevent/DynamicGameEventListener.java
|
||
|
+++ b/src/main/java/net/minecraft/world/level/gameevent/DynamicGameEventListener.java
|
||
|
@@ -66,7 +66,7 @@ public class DynamicGameEventListener<T extends GameEventListener> {
|
||
|
|
||
|
private static void ifChunkExists(LevelReader world, @Nullable SectionPos sectionPos, Consumer<GameEventDispatcher> dispatcherConsumer) {
|
||
|
if (sectionPos != null) {
|
||
|
- ChunkAccess chunkAccess = world.getChunk(sectionPos.x(), sectionPos.z(), ChunkStatus.FULL, false);
|
||
|
+ ChunkAccess chunkAccess = world.getChunkIfLoadedImmediately(sectionPos.getX(), sectionPos.getZ()); // Paper - can cause sync loads while completing a chunk, resulting in deadlock
|
||
|
if (chunkAccess != null) {
|
||
|
dispatcherConsumer.accept(chunkAccess.getEventDispatcher(sectionPos.y()));
|
||
|
}
|