2016-10-20 3 views
0

플러그인의 버그 용 플러그인을 코딩하고 싶습니다. (ChestShop). 플레이어가 마우스 오른쪽 버튼을 클릭하면 (기호 2 행이 "B Free"또는 "Free"이고 3 행이 "Iron_Ingot"인 경우) 이벤트를 취소하고 메시지를 보냅니다.Player sign interact

public void onPlayerInteract(PlayerInteractEvent e){ 
    Player player = e.getPlayer(); 
    if(e.getAction().equals(Action.RIGHT_CLICK_BLOCK) || e.getAction().equals(Action.LEFT_CLICK_BLOCK)){ 
     if(e.getClickedBlock().getState() instanceof Sign){ 
      Sign sign = (Sign) e.getClickedBlock().getState(); 
      if(sign.getLine(2).equals("B Free") || sign.getLine(2).equals("Free")){ 
       if(sign.getLine(3).equals("Iron_Ingot")) 
       e.setCancelled(true); 
       e.getPlayer().sendMessage("You can not click this sign"); 

      } 
     } 
    } 
} 

나는 이것을 시도했지만 작동하지 않았다. 어떤 코드 부분이 잘못 되었습니까? 어떤 방법을 사용할 수 있습니까?

+0

은 Block.getState 무엇입니까()? – TsundereBug

+0

블록을 사용하여 서명을 지정하십시오. – drhopeness

+0

'@ EventHandler'를 잊어 버리셨습니까? 또한 이벤트가 등록되어 있는지 확인하십시오. –

답변

1

onPlayerInteract 메서드가있는 클래스는 te 인터페이스 Listener를 구현해야합니다. EventHandler 어노테이션을 사용하고 플러그인에서 이벤트를 등록해야합니다. (JavaPlugin를 확장) 메인 클래스에 onEnable에서

public class PlayerInteract implements Listener { 

    // priority is when the listener is called. 
    // LOWEST is called first, then LOW, NORMAL, HIGH, HIGHEST, MONITOR. 
    @EventHandler(priority = EventPriority.NORMAL) 
    public void onPlayerInteract(PlayerInteractEvent event) { 
     // ... 
    } 

} 

:

getServer().getPluginManager().registerEvents(new PlayerInteract(),this); 
+0

걱정하지 마세요, 어떤 이벤트 (EventHandler enum 또는 Main java 클래스 구현 ...)를 사용하는 방법을 알고 있지만이 것을 찾지 못했습니다. – drhopeness

+0

@drhopeness 여전히 작동하지 않으면 전체 클래스를 게시하십시오. 이벤트, Main 클래스, plugin.yml 및 오류를 처리하십시오. – Priv

+0

고마워, 나는 버그를 고쳤다. – drhopeness