geforkt von Mirrors/Paper
28 Zeilen
1.5 KiB
Diff
28 Zeilen
1.5 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Spottedleaf <Spottedleaf@users.noreply.github.com>
|
|
Date: Tue, 8 Aug 2023 17:29:33 -0700
|
|
Subject: [PATCH] Fix race condition on UpgradeData.BlockFixers class init
|
|
|
|
The CHUNKY_FIXERS field is modified during the constructors
|
|
of the BlockFixers, but the code that uses CHUNKY_FIXERS does
|
|
not properly ensure that BlockFixers has been initialised before
|
|
using it, leading to a possible race condition where instances of
|
|
BlockFixers are accessed before they have initialised correctly.
|
|
|
|
We can force the class to initialise fully before accessing the
|
|
field by calling any method on the class, and for convenience
|
|
we use values().
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/level/chunk/UpgradeData.java b/src/main/java/net/minecraft/world/level/chunk/UpgradeData.java
|
|
index 25c1abaeb916781f810d580a4d388d4d3adad75a..932c9ba8d9ef82746cac0c40292a8e41ffb4ea33 100644
|
|
--- a/src/main/java/net/minecraft/world/level/chunk/UpgradeData.java
|
|
+++ b/src/main/java/net/minecraft/world/level/chunk/UpgradeData.java
|
|
@@ -140,6 +140,7 @@ public class UpgradeData {
|
|
Fluid fluid = tick.type() == Fluids.EMPTY ? level.getFluidState(tick.pos()).getType() : tick.type();
|
|
level.scheduleTick(tick.pos(), fluid, tick.delay(), tick.priority());
|
|
});
|
|
+ UpgradeData.BlockFixers.values(); // Paper - force the class init so that we don't access CHUNKY_FIXERS before all BlockFixers are initialised
|
|
CHUNKY_FIXERS.forEach(logic -> logic.processChunk(level));
|
|
}
|
|
|