Skip to content

Commit 19bc612

Browse files
Make BlockData creation thread safe again (#6876)
1 parent d3f3429 commit 19bc612

File tree

2 files changed

+6
-14
lines changed

2 files changed

+6
-14
lines changed

patches/server/0502-Cache-block-data-strings.patch

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,23 +17,15 @@ index 95842327aa08d4717f86e9dcc0519ab24c41ca14..135b3e44fb6054d360327a0ce46decc4
1717

1818
if (this.isSameThread()) {
1919
diff --git a/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java b/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java
20-
index 3594f432a25b580173e8577bf324be954f5eddd1..6dc8f9f269db6971b8b46819e017357899ccd118 100644
20+
index 3594f432a25b580173e8577bf324be954f5eddd1..d62ba8d02228b2a00202190ff16a0efc342c7b83 100644
2121
--- a/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java
2222
+++ b/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java
23-
@@ -13,6 +13,7 @@ import net.minecraft.commands.arguments.blocks.BlockStateParser;
24-
import net.minecraft.core.Direction;
25-
import net.minecraft.core.Registry;
26-
import net.minecraft.nbt.CompoundTag;
27-
+import net.minecraft.resources.ResourceLocation;
28-
import net.minecraft.util.StringRepresentable;
29-
import net.minecraft.world.level.block.Block;
30-
import net.minecraft.world.level.block.state.BlockState;
31-
@@ -494,9 +495,39 @@ public class CraftBlockData implements BlockData {
23+
@@ -494,9 +494,39 @@ public class CraftBlockData implements BlockData {
3224
Preconditions.checkState(CraftBlockData.MAP.put(nms, bukkit) == null, "Duplicate mapping %s->%s", nms, bukkit);
3325
}
3426

3527
+ // Paper start - cache block data strings
36-
+ private static Map<String, CraftBlockData> stringDataCache = new HashMap<>();
28+
+ private static Map<String, CraftBlockData> stringDataCache = new java.util.concurrent.ConcurrentHashMap<>();
3729
+
3830
+ static {
3931
+ // cache all of the default states at startup, will not cache ones with the custom states inside of the
@@ -54,7 +46,7 @@ index 3594f432a25b580173e8577bf324be954f5eddd1..6dc8f9f269db6971b8b46819e0173578
5446
+ if (material != null) {
5547
+ Block block = CraftMagicNumbers.getBlock(material);
5648
+ if (block != null) {
57-
+ ResourceLocation key = Registry.BLOCK.getKey(block);
49+
+ net.minecraft.resources.ResourceLocation key = Registry.BLOCK.getKey(block);
5850
+ data = data == null ? key.toString() : key + data;
5951
+ }
6052
+ }

patches/server/0515-Optimise-getType-calls.patch

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,10 @@ index 0a755f38fae9dc84440f43113920c5b4c6d8218b..7b9e943b391c061782fccd2b8d705cee
6767

6868
public void setFlag(int flag) {
6969
diff --git a/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java b/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java
70-
index 6dc8f9f269db6971b8b46819e017357899ccd118..7f49c7c7048b5778f20ddce1d844d4b389e6597f 100644
70+
index 0949ce5ea6aa8e28494e4435e3a7f3ee07052d34..4e06795e3a74c2c3467376bd6c95aecdef125ea4 100644
7171
--- a/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java
7272
+++ b/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java
73-
@@ -45,7 +45,7 @@ public class CraftBlockData implements BlockData {
73+
@@ -44,7 +44,7 @@ public class CraftBlockData implements BlockData {
7474

7575
@Override
7676
public Material getMaterial() {

0 commit comments

Comments
 (0)