From bcd3648f2de8577dea9cf0a352b516682313bfc2 Mon Sep 17 00:00:00 2001 From: XiaoMoMi <972454774@qq.com> Date: Fri, 10 Oct 2025 19:43:47 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=94=98=E8=94=97=E4=BA=A4?= =?UTF-8?q?=E4=BA=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../item/listener/ItemEventListener.java | 2 +- .../bukkit/util/InteractUtils.java | 19 ++++++++++++------- .../craftengine/core/item/ItemKeys.java | 2 +- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/listener/ItemEventListener.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/listener/ItemEventListener.java index 26786efaa..9a6525d4c 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/listener/ItemEventListener.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/listener/ItemEventListener.java @@ -165,7 +165,7 @@ public class ItemEventListener implements Listener { // fix client side issues if (action.isRightClick() && hitResult != null && - InteractUtils.willConsume(player, BlockStateUtils.fromBlockData(immutableBlockState.vanillaBlockState().literalObject()), hitResult, itemInHand)) { + InteractUtils.canPlace(player, BlockStateUtils.fromBlockData(immutableBlockState.vanillaBlockState().literalObject()), hitResult, itemInHand)) { player.updateInventory(); //PlayerUtils.resendItemInHand(player); } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/InteractUtils.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/InteractUtils.java index a2344602f..b553c1bb4 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/InteractUtils.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/InteractUtils.java @@ -45,7 +45,7 @@ import java.util.Optional; public final class InteractUtils { private static final Map, BlockData, BlockHitResult, Boolean>> INTERACTIONS = new HashMap<>(); - private static final Map, BlockData, BlockHitResult, Boolean>> WILL_CONSUME = new HashMap<>(); + private static final Map, BlockData, BlockHitResult, Boolean>> CAN_PLACE = new HashMap<>(); private static final Map, Boolean>> ENTITY_INTERACTIONS = new HashMap<>(); private static final Key NOTE_BLOCK_TOP_INSTRUMENTS = Key.of("minecraft:noteblock_top_instruments"); @@ -714,10 +714,14 @@ public final class InteractUtils { // 消耗 static { - registerWillConsume(BlockKeys.CACTUS, (player, item, blockState, result) -> { + registerCanPlace(BlockKeys.CACTUS, (player, item, blockState, result) -> { Key id = item.vanillaId(); return result.getDirection() == Direction.UP && ItemKeys.CACTUS.equals(id); }); + registerCanPlace(BlockKeys.SUGAR_CANE, (player, item, blockState, result) -> { + Key id = item.vanillaId(); + return result.getDirection() == Direction.UP && ItemKeys.SUGAR_CANE.equals(id); + }); } // 实体 @@ -929,8 +933,8 @@ public final class InteractUtils { } } - private static void registerWillConsume(Key key, QuadFunction, BlockData, BlockHitResult, Boolean> function) { - var previous = WILL_CONSUME.put(key, function); + private static void registerCanPlace(Key key, QuadFunction, BlockData, BlockHitResult, Boolean> function) { + var previous = CAN_PLACE.put(key, function); if (previous != null) { CraftEngine.instance().logger().warn("Duplicated interaction check: " + key); } @@ -951,11 +955,12 @@ public final class InteractUtils { return false; } - public static boolean willConsume(Player player, BlockData state, BlockHitResult hit, @Nullable Item item) { + // 这个方法用于解决玩家使用仙人掌放在基于仙人掌的方块上,物品暂时消失的类似问题 + public static boolean canPlace(Player player, BlockData state, BlockHitResult hit, @Nullable Item item) { if (item == null) return false; Key blockType = BlockStateUtils.getBlockOwnerIdFromData(state); - if (WILL_CONSUME.containsKey(blockType)) { - return WILL_CONSUME.get(blockType).apply(player, item, state, hit); + if (CAN_PLACE.containsKey(blockType)) { + return CAN_PLACE.get(blockType).apply(player, item, state, hit); } return false; } diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/ItemKeys.java b/core/src/main/java/net/momirealms/craftengine/core/item/ItemKeys.java index 2e1c33f3b..ba2854aa9 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/ItemKeys.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/ItemKeys.java @@ -48,7 +48,7 @@ public final class ItemKeys { public static final Key END_CRYSTAL = Key.of("minecraft:end_crystal"); public static final Key COD = Key.of("minecraft:cod"); public static final Key SALMON = Key.of("minecraft:salmon"); - + public static final Key SUGAR_CANE = Key.of("minecraft:sugar_cane"); public static final Key WHITE_DYE = Key.of("minecraft:white_dye"); public static final Key LIGHT_GRAY_DYE = Key.of("minecraft:light_gray_dye"); public static final Key GRAY_DYE = Key.of("minecraft:gray_dye");