2016-10-20 49 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