0

@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

关于我做错了什么有什么建议吗?

4

1 回答 1

3

你的方法中只能有一个参数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
}
于 2014-07-10T17:09:54.880 回答