1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Стартап [ПЕРЕВОД] Создаём Простую Команду

Тема в разделе "Разработка плагинов для новичков", создана пользователем Dexel, 6 ноя 2017.

  1. Автор темы
    Dexel

    Dexel Активный участник Пользователь

    Баллы:
    76
    Создаём Простую Команду
    Создаём простую команду, которая выдаёт игрокам вещи
    ------------------------------------------------------------------------------------------------------------------------------------------------------------
    Разрабатываем команду
    Для начала, вам надо уже понимать, какую команду вы хотите сделать. Здесь мы в качестве примера создадим команду "/kit". Тем не менее, она может быть заменена любой командой, что вы выбрали для использования в своём собственном плагине.

    Рекомендуется, да и считается более организованным создавать новый класс для каждой команды. Вам нужно реализовать интерфейс CommandExecutor. Файл класса будет выглядеть примерно так:
    Код:
    public class CommandKit implements CommandExecutor {
    
    
        // Этот метод вызывается, когда кто-то использует нашу команду
        @Override
        public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
            return false;
        }
    }

    Переименуйте параметры и заполните тело метода с каким-то кодом. Вот обозначения каждого параметра:
    • CommandSender обозначает того, кто отправляет команду. Может быть Player, ConsoleCommandSender или BlockCommandSender (командный блок)
    • Command обозначает вызванную команду. Она будет почти всегда известна заранее.
    • Label обозначает именно первое слово в команде (исключая аргументы), которое было введено отправителем
    • Args - это остальная часть команды (т.е., исключая labell), разделённая пробелами и помещённая в массив.

    Для того, чтобы выдать нашу(-и) вещь(-и) игроку через нашу команду-пример, нам нужен объект игрока. Если отправитель команды является игроков, мы можем "кастнуть" его. В нашем случае, "кастинг" даст нам доступ к объекту игрока.
    Обратите внимание: Объект CommandSender, что передаётся нам в методе onCommand, иногда может быть использован без предварительного "кастинга" к игроку. Если вам нужно всего лишь отправить сообщение, проверять, игрок это или нет, просто бессмысленная нагрузка на вам код, которая делает вашу команду немного менее удобной для использования.

    Код:
        @Override
    
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
            if (sender instanceof Player) {
                Player player = (Player) sender;
                // Здесь нам надо выдать предметы игроку
            }
    
            // Если игрок (или консоль) правильно использует нашу команду, мы можем возвращать истину
            return true;
        }
    Далее, мы выдаём предметы нашему игроку. Здесь мы используем алмаз и двадцать кирпичей. Предмет представляется через ItemStack. Итак, давайте создадим новый ItemStack и установим его количество. В конце мы выдадим его нашему игроку.

    Код для нашей команды-примера будет выглядеть примерно так:

    Код:
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
            if (sender instanceof Player) {
                Player player = (Player) sender;
    
                // Создаём новый ItemStack (тип: алмаз)
                ItemStack diamond = new ItemStack(Material.DIAMOND);
    
                // Создаём новый ItemStack (тип: кирпич)
                ItemStack bricks = new ItemStack(Material.BRICK);
    
                // Устанавливаем количество ItemStack
                bricks.setAmount(20);
    
                // Выдаём игроку наши предметы (разделённый через запятые список всех ItemStack)
                player.getInventory().addItem(bricks, diamond);
            }
    
            // Если игрок (или консоль) правильно использует нашу команду, мы можем возвращать истину
            return true;
        }
    Обратите внимание: Можно также устанавливать количество напрямую во время создания нового ItemStack. Эта опция легче и короче для использования.
    Код:
    ItemStack bricks = new ItemStack(Material.BRICK, 20);
    Регистрируем Команду
    Затем нам надо зарегистрировать нашу команду. Чтобы сделать это, перейдите в ваш метод onEnable() в главном классе. Нам всего лишь надо добавить одну строку.
    Код:
        @Override
    
        public void onEnable() {
            // Регистрируем нашу команду "kit" (установите экземпляр класса вашей команды в качестве исполнителя)
            this.getCommand("kit").setExecutor(new CommandKit());
        }
    Добавляем в plugin.yml
    Последний шаг - добавить нашу команду в plugin.yml. Откройте его и добавьте строки, похожие на те, что ниже, и протестируйте ваш плагин.
    Код:
    # Замените "kit" на название вашей команды
    commands:
      kit:
        description: Ваше описание
        usage: /kit
    Посмотреть подробный туториал по оформлению команд в plugin.yml можно здесь - прим. пер.

    Обратите внимание на следующие вещи:
    • Строка, которую вы используете при регистрации команды должна быть такой же, что используется в вашем plugin.yml
    • Вы можете инициализировать ваш экземпляр CommandExecutor с аргументами конструктора, например, главным классом плагина (пример главного класса, пример CommandExecutor'а - прим. пер.), если необходимо.
    • В вашем методе onCommand вы можете возвращать false, если хотите отправить CommandSender'у сообщение, показывающее ему правильное использование вашей команды (как указано в plugin.yml). Возвращайте true, чтобы бесшумно остановить выполнение.
    • Считается хорошей практикой отправлять сообщение об ошибке, когда неверный CommandSender пытается использовать команду (например, когда консоль хочет использовать команду /kit).
    На этом всё! Надеемся, вы познали основы создания команд.

    Если вы хотите создать команду, не регистрируя её в plugin.yml, посмотрите эту тему. Если она кажется вам слишком сложной, изучите PlayerCommandPreprocessEvent - прим. перев.
     
  2. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Не надоело копипастить темы сто летней давности?
     

Поделиться этой страницей