이 코드를 만들었고 MC에서 / gmspec을 입력하면 게임 모드를 Spectator 모드로 설정해야합니다. 그러나 그것이 말하는 유일한 것은 '이 명령을 수행하는 동안 내부 오류가 발생했습니다.'입니다. 콘솔에서 그것은 말한다 : arrayindexoutofboundsException : 0 ... Pls help, i do n't know what the problem ...
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
. 이렇게하지 않으면 Player
.
이 문제를 해결하려면 every를 p.sendMessage()
로 바꾸고 if sender.sendMessage()
에만 캐스트 sender
할 Player
수 있습니다.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
}
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다