球员标志互动

Player sign interact

我想为插件的错误编写一个插件。(ChestShop)。 当玩家右击标志时(标志的第 2 行是 "B Free" 或 "Free",第 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");

            }
        }
    }
}

我试过了,还是不行,请问是哪部分代码错了? 我可以使用哪些方法?

您的方法 onPlayerInteract 所在的 class 必须实现接口 Listener。您还必须使用 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) {
        // ...
    }

}

在 Main 中的 onEnable class(扩展了 JavaPlugin):

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