2016-10-20 50 views
0

我想爲插件的bug編寫插件(ChestShop)。 當玩家右鍵點擊標誌(標誌的第2行是「B免費」或「免費」,第3行是「Iron_Ingot」)時,取消事件併發送消息。玩家簽名交互

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接口偵聽器。您還必須使用EventHandler註釋並在您的插件中註冊該事件。

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) { 
     // ... 
    } 

} 

在主類的onEnable(延伸JavaPlugin):

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

不要擔心,我知道如何使用任何事件(EventHandler枚舉或主要的Java類實現...),但我沒有找到這 – drhopeness

+0

@drhopeness如果它仍然無法正常工作,處理事件,你的Main類,plugin.yml和任何錯誤。 – Priv

+0

謝謝,我修正了錯誤。 – drhopeness