Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Bukkit插件只使用第一个单词_Java_Minecraft_Bukkit - Fatal编程技术网

Java Bukkit插件只使用第一个单词

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/ban命令,格式是/kick name reason。 我让它全部工作,但原因只能是一个单词,任何超过它的词都可以排除它,例如,
/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原因:“+”未指定”);}```