2017-11-22 11 views
1

私はBukkitでEventHandlerを構築していましたが、今はこだわっています。それはおそらく本当にばかな間違いなので、私のためにそれを許してください。Bukkit PlayerInteractEventが2回登録されました

私が欲しいのは次のとおりです:ブロックを右クリックすると、1秒ごとにチャットが行われます:testしかし、それは実際に毎秒2回それを置く。私はコード全体をデバッグしてきましたが、うまく動作しません。私の考えでは2回登録しています。

メイン()クラス:

public class Main extends JavaPlugin { 

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

    @Override 
    public void onDisable() { 
    } 
} 

イベント()クラス:

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); 
     } 

    } 

} 

事前に感謝します!

答えて

2

PlayerInteractEventが2回呼び出される理由は、OFF_HANDの場合は1回、HANDの場合は1回です。したがって、このイベントを1回だけ処理するには、必要な手を正確に確認する必要があります。

if (e.getHand() == EquipmentSlot.HAND) { 
    // ... Your code with test 
} 
+0

ありがとうございました!それが働いた。 – Scriptblade

関連する問題