2017-11-22 2 views
1

그래서 Bukkit에 EventHandlers를 구축했는데 이제 막 달라 붙었습니다. 아마 정말 바보 같은 실수 야. 그래서 용서해 줘.Bukkit PlayerInteractEvent가 두 번 등록됩니다.

내가 원하는 것은 다음과 같습니다. 블록을 마우스 오른쪽 버튼으로 클릭하면 매초마다 test 채팅에 들어갑니다. 그러나 실제로는 매초마다 두 번씩 실행합니다. 전체 코드를 디버깅하고 있지만 제대로 작동하지 않습니다. 제 생각에는 두 번 등록하는 것입니다.

홈페이지() 클래스 :

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이 두 번 호출되는 이유는 OFF_HAND에 한 번, HAND에 한 번입니다. 따라서이 이벤트를 한 번만 처리하려면 원하는 손을 정확히 확인해야합니다.

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

감사합니다. 그것이 작동하게 만들었습니다. – Scriptblade