Bukkit PlayerInteractEvent 注册两次

nat*_*man 2 java events bukkit

所以我一直在 Bukkit 中构建一些 EventHandlers,现在我坚持这个。这可能是一个非常愚蠢的错误,所以请原谅我。

我想要的是以下内容:当我右键单击一个块时,它应该每秒:test在聊天中。但它实际上每秒放置两次。我一直在调试几乎整个代码,但我没有让它工作。在我看来,它是注册两次。

Main() 类:

public class Main extends JavaPlugin {

   @Override
   public void onEnable() {
      getServer().getPluginManager().registerEvents(new Events(), this);
   }

   @Override
   public void onDisable() {
   }
}
Run Code Online (Sandbox Code Playgroud)

事件()类:

public class Events implements Listener {
   public Plugin plugin = Main.getPlugin(Main.class);

   @EventHandler
   public void onInteract(PlayerInteractEvent e) {
      Player player = e.getPlayer();
      Action action = e.getAction();

      if(action.equals(Action.RIGHT_CLICK_BLOCK)) {
         new BukkitRunnable() {

            @Override
            public void run() {
                   player.sendMessage("Test");
                }

         }.runTaskTimer(plugin, 1, 20);
      }

   }

}
Run Code Online (Sandbox Code Playgroud)

提前致谢!

i0x*_*HeX 5

PlayerInteractEvent调用两次的原因是它需要两只手——一次为OFF_HAND,一次为HAND。因此,要仅处理此事件 1 次,您必须准确检查您想要的手:

if (e.getHand() == EquipmentSlot.HAND) {
    // ... Your code with test
}
Run Code Online (Sandbox Code Playgroud)