From 364f6ee78f8614ebe1614e0cc116fbf69ca9c247 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Mon, 28 Apr 2025 14:54:02 +0800 Subject: [PATCH] =?UTF-8?q?fix(bukkit):=20=E4=BF=AE=E5=A4=8D=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E7=9A=84=E6=96=B9=E5=9D=97=E5=AE=9E=E4=BD=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bukkit/block/BukkitBlockManager.java | 14 ++++++++++++-- .../craftengine/bukkit/util/Reflections.java | 12 ++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitBlockManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitBlockManager.java index 4660f3744..1e3059c9f 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitBlockManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitBlockManager.java @@ -849,9 +849,19 @@ public class BukkitBlockManager extends AbstractBlockManager { return states.get(0); } + @SuppressWarnings("unchecked") private void deceiveBukkit(Object newBlock, Key replacedBlock, boolean isNoteBlock) throws IllegalAccessException { - @SuppressWarnings("unchecked") Map magicMap = (Map) Reflections.field$CraftMagicNumbers$BLOCK_MATERIAL.get(null); - magicMap.put(newBlock, isNoteBlock ? Material.STONE : org.bukkit.Registry.MATERIAL.get(new NamespacedKey(replacedBlock.namespace(), replacedBlock.value()))); + Map factories = (Map) Reflections.field$CraftBlockStates$FACTORIES.get(null); + if (isNoteBlock) { + magicMap.put(newBlock, Material.STONE); + } else { + Material material = org.bukkit.Registry.MATERIAL.get(new NamespacedKey(replacedBlock.namespace(), replacedBlock.value())); + if (Reflections.clazz$CraftBlockStates$BlockEntityStateFactory.isInstance(factories.get(material))) { + magicMap.put(newBlock, Material.STONE); + } else { + magicMap.put(newBlock, material); + } + } } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java index 7ab1bed6b..87cc8d579 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java @@ -6591,4 +6591,16 @@ public class Reflections { clazz$ServerboundResourcePackPacket, clazz$ServerboundResourcePackPacket$Action, 0 ) ); + + public static final Field field$CraftBlockStates$FACTORIES = requireNonNull( + ReflectionUtils.getDeclaredField( + clazz$CraftBlockStates, "FACTORIES" + ) + ); + + public static final Class clazz$CraftBlockStates$BlockEntityStateFactory = requireNonNull( + ReflectionUtils.getClazz( + BukkitReflectionUtils.assembleCBClass("block.CraftBlockStates$BlockEntityStateFactory") + ) + ); }