java - Bukkit - EventHandler 方法出错

标签 java bukkit eventhandler

出于某种原因,当我使用 @EventHandler 注释执行某些操作时,我收到了错误。我正在使用 Bukkit 1.7.9。这是我的代码的一部分:

@EventHandler
public void onSignChange(SignChangeEvent event, CommandSender sender, Command cmd, String commandLabel){
    Player player = event.getPlayer();
    if(player.hasPermission("CustomJoinSigns.Create")) {
        if(event.getLine(0).equalsIgnoreCase("Minigame")) {
            player.sendMessage(ChatColor.BLUE + "Please type in the minigame name:");
            player.sendMessage(ChatColor.GOLD + "1)" + ChatColor.RED + "Do " + ChatColor.YELLOW + "/cjs setminigame [Minigame]");
            player.sendMessage(ChatColor.GOLD + "2)" + ChatColor.RED + "Do " + ChatColor.YELLOW + "/cjs cancel");
            if(commandLabel.equalsIgnoreCase("cjs setminigame" + minvar));
            player.sendMessage("Test Successful");
        }
    }
}

这是我的错误日志:

ERROR CustomJoinSigns v1 attempted to register an invalid EventHandler method signature 
"public void me.pvpcraftnetwork.customjoinsigns.Main.onSignChange(org.bukkit.event.block.SignChangeEvent,org.bukkit.command.CommandSender,org.bukkit.command.Command,java.lang.String)"
in class me.pvpcraftnetwork.customjoinsigns.Main

对我做错了什么有什么建议吗?

最佳答案

您的 Listener 方法中只能有一个参数。它应该看起来像这样:

@EventHandler
public void onSignChange(SignChangeEvent event){
  Player player = event.getPlayer();
  if(player.hasPermission("CustomJoinSigns.Create")) {
    if(event.getLine(0).equalsIgnoreCase("Minigame")) {
        player.sendMessage(ChatColor.BLUE + "Please type in the minigame name:");
        player.sendMessage(ChatColor.GOLD + "1)" + ChatColor.RED + "Do " + ChatColor.YELLOW + "/cjs setminigame [Minigame]");
        player.sendMessage(ChatColor.GOLD + "2)" + ChatColor.RED + "Do " + ChatColor.YELLOW + "/cjs cancel");
        if(commandLabel.equalsIgnoreCase("cjs setminigame" + minvar));
        player.sendMessage("Test Successful");
    }
  }
}

参数CommandSender sender、Command cmd、String commandLabel 用于命令中...所以也许您认为注册事件就像监听玩家何时运行命令?

同样,所有 @EventHandler 方法只能有一个参数,即您正在监听的事件。因此,如果您正在监听 PlayerJoinEvent,您将使用:

@EventHandler
public void playerJoin(PlayerJoinEvent event){
  //code here
}

关于java - Bukkit - EventHandler 方法出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24665018/

相关文章:

java - 从字符串中删除美元和逗号

Java Jackson 两次写入对象

java - IllegalArgumentException:在scheduleSyncDelayedTask方法中插件不能为null

javascript - 无法从事件处理程序访问 js 对象方法

java - Java中两个线程之间的时间延迟

java - Bukkit PlayerInteractEvent 被注册了两次

java - 来自 Bukkit 插件的 TCP 连接

c++ - 我可以在 C++/UWP 中使 EventHandlers 成为非静态成员函数吗?

java - Axon - 事件处理程序拦截器配置

java - 从缓存中获取的 Set 中的线程安全性