Java Bukkit插件只使用第一个单词
因此,我正在为我的服务器发出kick/ban命令,格式是/kick name reason。 我让它全部工作,但原因只能是一个单词,任何超过它的词都可以排除它,例如,Java Bukkit插件只使用第一个单词,java,minecraft,bukkit,Java,Minecraft,Bukkit,因此,我正在为我的服务器发出kick/ban命令,格式是/kick name reason。 我让它全部工作,但原因只能是一个单词,任何超过它的词都可以排除它,例如,/kick BattleDash hello world会说BattleDash因为hello而被踢 这是我的密码: if (cmd.getName().equalsIgnoreCase("kick") && sender instanceof Player) { Player player
/kick BattleDash hello world
会说BattleDash因为hello
而被踢
这是我的密码:
if (cmd.getName().equalsIgnoreCase("kick") && sender instanceof Player) {
Player player = (Player) sender;
int length = args.length;
if (length >= 2) {
boolean playerFound = false;
for (Player playerToKick : Bukkit.getServer().getOnlinePlayers()) {
if(playerToKick.getName().equalsIgnoreCase(args[0])) {
playerToKick.kickPlayer(ChatColor.RED + "Kicked by Administrator " + player.getName() + "\nReason: " + args[1]);
player.sendMessage(ChatColor.RED + "[BATTLEDASHLOGS]: Kicked player " + playerToKick.getName() + "succesfully!");
break;
}
}
if (playerFound == false) {
player.sendMessage(ChatColor.RED + "[BATTLEDASHLOGS]: " + args[0] + " was not found!");
}
} else player.sendMessage(ChatColor.RED + "[BATTLEDASHLOGS]: Incorrect arguments!" + ChatColor.RED + " /kick <PlayerName> <reason>");
return true;
}
if(cmd.getName().equalsIgnoreCase(“kick”)&播放器的发送方实例){
玩家=(玩家)发送者;
int length=args.length;
如果(长度>=2){
布尔playerFound=false;
对于(Player playerToKick:Bukkit.getServer().getOnlinePlayers()){
if(playerToKick.getName().equalsIgnoreCase(args[0])){
playerToKick.kickPlayer(ChatColor.RED+“被管理员踢”+player.getName()+“\n原因:“+args[1]);
player.sendMessage(ChatColor.RED+“[BATTLEDASHLOGS]:Kicked player“+playerToKick.getName()+“successfully!”);
打破
}
}
如果(playerFound==false){
发送消息(ChatColor.RED+“[BATTLEDASHLOGS]:”+args[0]+“未找到!”);
}
}else player.sendMessage(ChatColor.RED+“[BATTLEDASHLOGS]:参数不正确!”+ChatColor.RED+“/kick”);
返回true;
}
(另外,如果您没有说明在聊天中出现内部错误的原因,并且在控制台中出现异常)由于编程方式的原因,您的代码正在执行此操作 如果我们看一看接受参数的行:
playerToKick.kickPlayer(ChatColor.RED + "Kicked by Administrator " + player.getName() + "\nReason: " + args[1]);
我们可以看到您只使用了args[1]
。如果我们将消息视为数组,那么问题就很清楚了:
在位置0(记住阵型从0开始):战斗冲刺
1:你好
2:世界
当您只将args[1]
带到邮件中时,只会使用hello
!我们需要做的是使用所有的参数。一种方法是:
// First, transform your array into a list, so it's easier to understand
List<String> arguments = new ArrayList<>(args);
String playerName = arguments.get(0); // Get the player name
arguments.remove(0); // Remove the player name from our arguments list, we don't want it in the message
String message = String.join(" ", arguments); // Combine all the other arguments into a message
//首先,将数组转换为列表,这样更容易理解
列表参数=新的ArrayList(args);
String playerName=arguments.get(0);//获取玩家名称
参数。删除(0);//从参数列表中删除播放器名称,我们不希望它出现在消息中
String message=String.join(“,参数);//将所有其他参数合并到一条消息中
您的代码之所以这样做,是因为它的编程方式
如果我们看一看接受参数的行:
playerToKick.kickPlayer(ChatColor.RED + "Kicked by Administrator " + player.getName() + "\nReason: " + args[1]);
我们可以看到您只使用了args[1]
。如果我们将消息视为数组,那么问题就很清楚了:
在位置0(记住阵型从0开始):战斗冲刺
1:你好
2:世界
当您只将args[1]
带到邮件中时,只会使用hello
!我们需要做的是使用所有的参数。一种方法是:
// First, transform your array into a list, so it's easier to understand
List<String> arguments = new ArrayList<>(args);
String playerName = arguments.get(0); // Get the player name
arguments.remove(0); // Remove the player name from our arguments list, we don't want it in the message
String message = String.join(" ", arguments); // Combine all the other arguments into a message
//首先,将数组转换为列表,这样更容易理解
列表参数=新的ArrayList(args);
String playerName=arguments.get(0);//获取玩家名称
参数。删除(0);//从参数列表中删除播放器名称,我们不希望它出现在消息中
String message=String.join(“,参数);//将所有其他参数合并到一条消息中
Update:我被踢了,但没有任何原因,但原因仍然只显示第一个单词'if(长度>=2){playerToKick.kickPlayer(ChatColor.RED+“被管理员踢”+player.getName()+“\n原因:“+args[1].toString();}else if(长度>=1){playerToKick.kickPlayer(ChatColor.RED+“被管理员踢”+player.getName()+“\n原因:“+”未指定”);}``更新:我没有理由踢,但原因仍然只显示第一个单词`if(length>=2){playerTokickPlayer(ChatColor.RED+“被管理员踢”+player.getName()+“\n原因:“+args[1].toString());}如果(长度>=1){playerToKick.kickPlayer(ChatColor.RED+“被管理员踢”+player.getName()+“\n原因:“+”未指定”);}```