2022-07-04 07:42:58 +02:00
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
2024-01-18 15:56:25 +01:00
index e64435c1dfbaf182d2292a1123701033f817ec38..47647d3db7ce36226a817df640a0b25574fb9b02 100644
2022-07-04 07:42:58 +02:00
--- a/src/main/java/net/minecraft/world/level/gameevent/DynamicGameEventListener.java
+++ b/src/main/java/net/minecraft/world/level/gameevent/DynamicGameEventListener.java
2023-06-08 10:47:19 +02:00
@@ -48,7 +48,7 @@ public class DynamicGameEventListener<T extends GameEventListener> {
2022-07-04 07:42:58 +02:00
2022-12-07 22:57:15 +01:00
private static void ifChunkExists(LevelReader world, @Nullable SectionPos sectionPos, Consumer<GameEventListenerRegistry> dispatcherConsumer) {
2022-07-04 07:42:58 +02:00
if (sectionPos != null) {
- ChunkAccess chunkAccess = world.getChunk(sectionPos.x(), sectionPos.z(), ChunkStatus.FULL, false);
2024-01-18 15:56:25 +01:00
+ ChunkAccess chunkAccess = world.getChunkIfLoadedImmediately(sectionPos.getX(), sectionPos.getZ()); // Paper - Perf: can cause sync loads while completing a chunk, resulting in deadlock
2022-07-04 07:42:58 +02:00
if (chunkAccess != null) {
2022-12-07 22:57:15 +01:00
dispatcherConsumer.accept(chunkAccess.getListenerRegistry(sectionPos.y()));
2022-07-04 07:42:58 +02:00
}