Поиск…


Синтаксис

  • @Override public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)

Обработка команды

Для обработки команды вы должны иметь класс, реализующий интерфейс CommandExecutor. Класс JavaPlugin (основной класс вашего плагина) уже реализует это.

При реализации интерфейса CommandExecutor должен быть реализован следующий метод:

public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
//Handle your command in here
return true;      ///Should return false if you want to show the usage

}

Отправитель отправляет команду. Это может быть игрок или консоль.

CMD - это команда, которую вы слушаете, как указано в plugin.yml. Не путать с меткой.

label - это псевдоним, используемый для выполнения этой команды, это то, что отправитель создает после косой черты.

и, наконец, args - это аргументы, которые отправитель мог использовать для отправки вашей команды.

Возможная команда может

/ tell Kerooker Привет, Керукер!

Tell будет вашим лейблом, а также может быть определена как ваша команда, если вы сказали это в файле plugin.yml;

«Керукер», «Привет», «Керукер!» ваши аргументы 0, 1 и 2 соответственно

Как возвращение, вы, вероятно, всегда захотите вернуть истину, когда вы ожидали, что все случится именно так. Вы должны вернуть false, если вы хотите показать отправителю использование команды, определенную в вашем файле plugin.yml

Простая команда GameMode (/ gm )

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

В этом примере мы пытаемся установить игровой режим игрока.

Первое, что нам нужно сделать, это убедиться, что отправитель не является ConsoleCommandSender, потому что мы не можем установить игровой режим консоли. Это делается с (отправителем экземпляра игрока).

Затем мы хотим, чтобы игрок набирал / gm CREATIVE (или какой-либо другой игровой режим), поэтому нам нужно проверить 2 вещи:

  1. убедитесь, что они передают 1 аргумент (CREATIVE)
  2. убедитесь, что их команда была "gm"

Мы выполнили эти проверки с помощью: args.length == 1 && label.equalsIgnoreCase ("gm")

Теперь мы точно знаем, что игрок набрал «/ gm x».

Следующее, что нам нужно сделать, это превратить args [0] в объект GameMode, чтобы мы могли применить его к игроку. Это можно сделать с помощью GameMode.valueOf (String). Однако, согласно документации перечисления Java, если строка передана в valueOf (), которая не соответствует перечислению, она выкинет исключение IllegalArgumentException, поэтому мы должны убедиться, что поймаем это.

Как только у нас будет игровой режим, мы можем пойти вперед и просто использовать p.setGameMode (gm), и игровой режим игрока изменится. В случае, когда мы поймали исключение, мы просто распечатываем заявление и возвращаем false.

@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
    if (sender instanceof Player) { 
        final Player p = (Player) sender;

        if (args.length == 1 && label.equalsIgnoreCase("gm")) {
            try {
                GameMode gm = GameMode.valueOf(args[0]);
                p.setGameMode(gm);
                p.sendMessage(ChatColor.GREEN + "Your gamemode has been set to: " + gm.toString());
                return true;
            } catch (IllegalArgumentException e) {
                p.sendMessage(ChatColor.RED + "Invalid gamemode option!");
                return false;
            }

        }
    }
    return false;
}

Команда не в основном классе

Если у вас много команд, вы не должны ставить их в основной класс.

  1. Создайте новый класс и попросите его выполнить CommandExecutor

  2. Добавьте в класс следующее:

     @Override 
     public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
    
     }
    
  3. В свой основной класс добавьте onEnable (замените commandName именем команды и CommandExecutor с именем класса):

     getCommand("commandName").setExecutor(new CommandExecutor());
    


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow