From 152e7edae8ba0f8fd2cfacfbb28d1908455eb031 Mon Sep 17 00:00:00 2001 From: Zapolyarny Date: Sun, 19 Jul 2026 01:08:28 +0300 Subject: [PATCH] Fix BlockData merge for cached states --- .../craftbukkit/block/data/CraftBlockData.java | 1 + .../src/test/java/org/bukkit/BlockDataTest.java | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java index f4e3f9b27ede..770653e31a55 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java @@ -456,6 +456,7 @@ public static void reloadCache() { ENCODER_CACHE.clear(); Block.BLOCK_STATE_REGISTRY.forEach(state -> { CraftBlockData data = state.asBlockData(); + data.parsedStates = state.getValues().toList(); ENCODER_CACHE.put(data.getAsString(), data); }); } diff --git a/paper-server/src/test/java/org/bukkit/BlockDataTest.java b/paper-server/src/test/java/org/bukkit/BlockDataTest.java index cd910ad0a4f0..9417e34194cd 100644 --- a/paper-server/src/test/java/org/bukkit/BlockDataTest.java +++ b/paper-server/src/test/java/org/bukkit/BlockDataTest.java @@ -99,6 +99,22 @@ public void testMerge() { assertNotEquals(falseTarget, candidate, "Target and candidate are still not equal"); } + @Test + public void testMergeFullySpecifiedBannerData() { + BlockData banner = CraftBlockData.fromString(null, "minecraft:light_gray_banner"); + BlockData rotation = CraftBlockData.fromString(null, "minecraft:light_gray_banner[rotation=1]"); + + assertEquals(rotation, banner.merge(rotation)); + } + + @Test + public void testMergeFullySpecifiedLogData() { + BlockData log = CraftBlockData.fromString(BlockType.OAK_LOG, null); + BlockData axis = CraftBlockData.fromString(BlockType.OAK_LOG, "[axis=y]"); + + assertEquals(axis, log.merge(axis)); + } + @Test public void testMergeAny() { Chest trueTarget = (Chest) CraftBlockData.fromString(null, "minecraft:chest[facing=east,waterlogged=true]");