gpt4 book ai didi

java - 错误 getPlayer(args[0]);

转载 作者:行者123 更新时间:2023-12-01 11:16:47 25 4
gpt4 key购买 nike

我编写了这段代码,如果您在 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;
}

最佳答案

您的问题是您在尝试获取参数之后检查它们的长度。在尝试获取参数之前,您必须确保存在一个或多个参数,否则您将得到 ArrayIndexOutOfBoundsException

此外,在将命令发送者转换为 Player 之前,您需要检查命令发送者是否确实是 Player。如果您不这样做,您将无法从播放器之外的任何地方运行该命令。

要解决此问题,您可以将每个 p.sendMessage() 替换为 sender.sendMessage(),并且仅将 sender 转换为播放器 if 发送者实例播放器

所以,你的代码可能看起来像这样

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
}
}

关于java - 错误 getPlayer(args[0]);,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31725295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com