From 511e6eb2710f64676c6fd88a19c52df4f7fa0839 Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Thu, 20 Mar 2025 17:14:15 +0800 Subject: [PATCH] fix we -a param --- .../bukkit/block/BukkitBlockManager.java | 8 ++++++-- .../craftengine/bukkit/block/WorldEditHook.java | 17 +++++++++++++++-- 2 files changed, 21 insertions(+), 4 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 2775d43b7..d4e32a855 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 @@ -165,8 +165,12 @@ public class BukkitBlockManager extends AbstractBlockManager { } public void initWorldEditHook() { - for (Key newBlockId : this.blockRegisterOrder) { - WorldEditHook.register(newBlockId); + try { + for (Key newBlockId : this.blockRegisterOrder) { + WorldEditHook.register(newBlockId); + } + } catch (Exception e) { + this.plugin.logger().warn("Failed to initialize world edit hook", e); } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/WorldEditHook.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/WorldEditHook.java index 5110083dd..f4992949e 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/WorldEditHook.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/WorldEditHook.java @@ -1,11 +1,24 @@ package net.momirealms.craftengine.bukkit.block; +import com.sk89q.worldedit.bukkit.BukkitBlockRegistry; +import com.sk89q.worldedit.util.concurrency.LazyReference; import com.sk89q.worldedit.world.block.BlockType; import net.momirealms.craftengine.core.util.Key; +import net.momirealms.craftengine.core.util.ReflectionUtils; +import org.bukkit.Material; + +import java.lang.reflect.Field; public class WorldEditHook { + private static final Field field$BlockType$blockMaterial; - public static void register(Key id) { - BlockType.REGISTRY.register(id.toString(), new BlockType(id.toString(), blockState -> blockState)); + static { + field$BlockType$blockMaterial = ReflectionUtils.getDeclaredField(BlockType.class, "blockMaterial"); + } + + public static void register(Key id) throws ReflectiveOperationException { + BlockType blockType = new BlockType(id.toString(), blockState -> blockState); + field$BlockType$blockMaterial.set(blockType, LazyReference.from(() -> new BukkitBlockRegistry.BukkitBlockMaterial(null, Material.STONE))); + BlockType.REGISTRY.register(id.toString(), blockType); } }