Bukkit плагин причина удара только с использованием первого слова - PullRequest
0 голосов
/ 05 декабря 2018

Итак, я делаю команду kick / ban для моего сервера, и формат называется / kick name.У меня все работает, но reason может быть только 1 словом, и все, что исключает его, например, /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;

}

(Кроме того, если вы не указали причину, это приводит к внутренней ошибке в чате и возникновению исключения в консоли)

1 Ответ

0 голосов
/ 05 декабря 2018

Ваш код делает это благодаря тому, как он был запрограммирован.

Если мы посмотрим на строку, которая принимает аргумент:

playerToKick.kickPlayer(ChatColor.RED + "Kicked by Administrator " + player.getName() + "\nReason: " + args[1]);

Мы можем видеть, что вытолько с использованием args[1].Если мы увидим сообщение в виде массива, проблема будет понятна:

В позиции 0 (помните, массивы начинаются с 0): BattleDash

1: hello

2:world

Когда вы берете только 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
...