当前位置: 代码迷 >> java >> 错误getPlayer(args [0]);
  详细解决方案

错误getPlayer(args [0]);

热度:87   发布时间:2023-07-17 20:49:12.0

我编写了这段代码,如果您输入:MC中的/ gmspec我应该将您的游戏模式设置为观众模式。 但是它唯一说的是:“尝试执行此命令时发生内部错误。”。 在控制台中它说:arrayindexoutofboundsException:0 ...请帮助,我不知道是什么问题...

    if (commandLabel.equalsIgnoreCase("gmspec")) {


        Player p = (Player) sender;
        Player target = Bukkit.getServer().getPlayer(args[0]);


        if (args.length == 0) {
            p.setGameMode(GameMode.SPECTATOR);
            p.sendMessage(ChatColor.GREEN + "Your own gamemode has been changed!");
            return true;
        }

        if (target == null) {
            p.sendMessage(ChatColor.RED + "The player " + target.getName() + " is not online!");
            return true;

        }
        target.setGameMode(GameMode.SPECTATOR);
        target.sendMessage(ChatColor.GREEN + "Your gamemode is set to Spectator mode. You are not a banaan that just tries every command without any permission...");

        if (sender.hasPermission("gamemode.spectator")) {

            p.sendMessage(ChatColor.RED + "You banaan. Y u still try? U no permission has u dumb shit");
        }
        if (sender instanceof ConsoleCommandSender) {


        }


    }
    return true;
}

您的问题是,尝试获取参数要检查其长度。 在尝试获取参数之前,必须确保有一个或多个参数,否则将获得

另外,您将需要在将命令发送方强制转换为Player之前检查该命令发送方是否为实际Player 如果不执行此操作,则只能从Player上运行任何命令。

为了解决这个问题,你可以取代每p.sendMessage()sender.sendMessage()并且只投senderPlayer如果sender instanceof Player

因此,您的代码可能看起来像这样

if(commandLabel.equalsIgnoreCase("gmspec")){
    if(args.length == 0 && sender instanceof Player){//check if the sender is a Player
        Player p = (Player) sender; 

        p.setGameMode(GameMode.SPECTATOR);
        p.sendMessage(ChatColor.GREEN + "Your own gamemode has been changed!");

        return true;
    }
    else{
        Player target = Bukkit.getServer().getPlayer(args[0]);

        //the rest of the code
    }
}
  相关解决方案