Как именно добавить в команду необязательные аргументы? - PullRequest
1 голос
/ 11 июля 2020

Я пытаюсь дать возможность добавить необязательный аргумент к некоторым из моих команд, это только один в примере:

public class CommandHug implements CommandExecutor {

    String MessageHugPrefix;
    String MessageHugEmote;
    String MessageNoPermission;
    
    public CommandHug() {
        this.MessageHugPrefix = ChatColor.translateAlternateColorCodes('&', Core.getPlugin().getConfig().getString("Messages.HugPrefix"));
        this.MessageHugEmote = ChatColor.translateAlternateColorCodes('&', Core.getPlugin().getConfig().getString("Messages.HugEmote"));
        this.MessageNoPermission = ChatColor.translateAlternateColorCodes('&', Core.getPlugin().getConfig().getString("Messages.NoPermission"));
    } 
    
    
    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        if (cmd.getName().equalsIgnoreCase("hug")) {
            if (!sender.hasPermission("netsync.fun")) {
                sender.sendMessage(String.valueOf(this.MessageNoPermission));   
            } else
            for (Player players : Bukkit.getOnlinePlayers()) {
                if (args.length == 0) {
                    players.sendMessage(String.valueOf(this.MessageHugPrefix) + ChatColor.DARK_PURPLE + ((Player)sender).getName() + " hugged you!");
                    players.sendTitle(String.valueOf(this.MessageHugEmote), ChatColor.DARK_PURPLE + ((Player)sender).getName() + " hugged you!", 7, 50, 7);
                } else {
                    players.sendMessage(String.valueOf(this.MessageHugPrefix) + ChatColor.DARK_PURPLE + args[1] + " hugged you!");
                    players.sendTitle(String.valueOf(this.MessageHugEmote), ChatColor.DARK_PURPLE + args[1] + " hugged you!", 7, 50, 7);
                }
                    
            }
        }
    return true;
    }
}

Это команда с именем / hug, которая помещает сообщение в чат говоря, что отправитель обнял их, или отправитель может поставить имя пользователя другого игрока / случайный аргумент после команды обнять всех. Единственное, когда я пытаюсь запустить команду / hug на тестовом сервере, она буквально ничего не делает, никаких ошибок в консоли, никаких сообщений в чате, никаких сообщений / заголовков, отправленных игрокам; ничего. Строки уже определены в файле конфигурации, и они работают правильно. Есть идеи, что пошло не так?

1 Ответ

2 голосов
/ 11 июля 2020

На самом деле это относительно просто. Начните с установки значения по умолчанию для любой переменной, которой могло бы быть это необязательное значение. Затем добавьте условный оператор, согласно которому, если длина аргумента больше 0, измените это значение по умолчанию. В приведенном вами примере это будет сделано следующим образом:

    @Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
    if (cmd.getName().equalsIgnoreCase("hug")) {
        if (!sender.hasPermission("netsync.fun")) {
            sender.sendMessage(String.valueOf(this.MessageNoPermission));   
        } else
        for (Player players : Bukkit.getOnlinePlayers()) {
            // this is the default value
            Player target = (Player) sender;
            // if the argument length is greater the 0, set the value of "target" to args[1]
            if (args.length > 0) {
                Player target = Bukkit.getPlayerExact(args[1]);
                // its a good idea to make sure that the player exists by running a null check
                if (player == null) {
                    players.sendMessage("Player not found!");

                }
            }
            players.sendMessage(String.valueOf(this.MessageHugPrefix) + ChatColor.DARK_PURPLE + player.getName() + " hugged you!");
            players.sendTitle(String.valueOf(this.MessageHugEmote), ChatColor.DARK_PURPLE + player.getName() + " hugged you!", 7, 50, 7);
            }
                
        }
    }
return true;
}
...