gpt4 book ai didi

java - Bukkit 事件多次触发

转载 作者:行者123 更新时间:2023-12-02 09:49:02 30 4
gpt4 key购买 nike

我有这个可能有错误的代码片段:

@EventHandler
public void onPlayerInteract(PlayerInteractEvent e) {
if (e.getAction() == Action.RIGHT_CLICK_AIR && e.getItem().getType() == Material.NAME_TAG && e.getHand() == EquipmentSlot.HAND) {
e.getPlayer().sendMessage("right click?");
}
}

每次我右键单击带有姓名标签的空气时,都会出现“右键单击?”每次火灾时消息都会发送给玩家 5 次。

删除e.getHand() == EquipmentSlot.HAND仍然重复5次(最初是因为this讨论/1.9双持而添加的)。我还提到了this ,但这并没有什么区别。

为什么在发生 1 个事件时会重复多次而不是 1 次?

我的整个代码是here 。我正在测试的服务器是 1.12.2 Spigot。

编辑:Pastebin 的代码是 Java 项目中使用的唯一类。

最佳答案

onPlayerInteract 只要检测到事件就会调用,而不是在第一次检测到事件时调用。

我通过右键单击“正常”时间(约 500 毫秒)发现了这一点,打印了 5 次。

然后我一直按住右键约 1000 毫秒,然后看到它再次打印了 5 次,但还是打印了两次。它似乎立即打印出 5,然后又打印出另一个 5。

对于我的最后一个测试,我决定右键单击尽可能短的时间,果然,只完成了 1 次打印(我之前没有意识到,由于聊天框很小,所以打印了更多次)尺寸)。

我认为通过仅使用小代码打印事件,这仍然可以正常工作:

@EventHandler(priority=EventPriority.HIGH)
public void onPlayerInteract(PlayerInteractEvent e)
{
e.getPlayer().sendMessage(e.getAction().toString());
}

没有发生类似的情况,相反,所有内容都被打印一次,除非空手右键单击一个 block 。 Here's该视频描述了我使用上述代码的含义(视频中每隔一段时间,聊天就会被清除)。使用上面相同的主体,但使用 eventRightClick(PlayerInteractEvent e) 可以实现相同的效果。

此外,视频中未显示,当按住左键单击并将鼠标移动到多个 block 上时,eventRightClick 将触发多次。右键单击相同,但成对进行(全部都是徒手完成的)。

编辑

空手瞄准一个方 block 时按住右键将继续成对开火,无论鼠标是否瞄准多个方 block 。请参阅here 。请注意,eventRightClick 执行以下操作:

@EventHandler(priority=EventPriority.HIGH)
public void eventRightClick(PlayerInteractEvent e)
{
e.getPlayer().sendMessage(
e.getAction().toString() + " " + e.getEventName());
}

关于java - Bukkit 事件多次触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56453462/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com