Luohuayu / CatServer

高性能和高兼容性的1.12.2/1.16.5/1.18.2版本Forge+Bukkit+Spigot服务端 (A high performance and high compatibility 1.12.2/1.16.5/1.18.2 version Forge+Bukkit+Spigot server)
https://catmc.org
GNU Lesser General Public License v3.0
1.94k stars 204 forks source link

[1.18.2] PlayerInteractEvent 双重触发问题 #843

Open i493052739 opened 6 months ago

i493052739 commented 6 months ago

运行环境

Minecraft版本(1.12.2/1.16.5/1.18.2): 1.18.2 构建版本(从/version指令获取): bc64e1f 相关模组/插件: 如下案例

    @EventHandler
    public void onInteract(PlayerInteractEvent e) {
        String u = UUID.randomUUID().toString();
        Player p = e.getPlayer();
        ItemStack i = e.getItem();
        EquipmentSlot h = e.getHand();
        Block cb = e.getClickedBlock();
        p.sendMessage(u + " hash: " + e.hashCode());
        p.sendMessage(u + " material: " + e.getMaterial().name());
        p.sendMessage(u + " hasBlock: " + e.hasBlock());
        p.sendMessage(u + " hasItem: " + e.hasItem());
        p.sendMessage(u + " itemType: " + (i == null ? null : i.getType().name()));
        p.sendMessage(u + " action: " + e.getAction().name());
        p.sendMessage(u + " blockFace: " + e.getBlockFace().name());
        p.sendMessage(u + " hand: "+ (h == null ? null : h.name()));
        p.sendMessage(u + " clickedBlock: "+ (cb == null ? null : cb.getType().name() + " " + cb.getX() + " " + cb.getY() + " " + cb.getZ()));
    }

描述这个BUG

互动空气时,PlayerInteractEvent 正常触发一次

0ad4c5ab47bb5721d7edfb3f3c5190e

互动方块时,PlayerInteractEvent 异常触发两次

e6f9b2669e05c98a4ed647a3f7d9406

导致的问题

PlayerInteractEvent 相关的 handlers 及逻辑被二次触发

Luohuayu commented 6 months ago

正常逻辑

Kotori0629 commented 2 months ago

这个再观察一下吧 我印象里这个逻辑是没问题的