Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

Dexel

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

Рекомендуется, да и считается более организованным создавать новый класс для каждой команды. Вам нужно реализовать интерфейс CommandExecutor. Файл класса будет выглядеть примерно так:
Java:
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, иногда может быть использован без предварительного "кастинга" к игроку. Если вам нужно всего лишь отправить сообщение, проверять, игрок это или нет, просто бессмысленная нагрузка на вам код, которая делает вашу команду немного менее удобной для использования.

Java:
    @Override

    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        if (sender instanceof Player) {
            Player player = (Player) sender;
            // Здесь нам надо выдать предметы игроку
        }

        // Если игрок (или консоль) правильно использует нашу команду, мы можем возвращать истину
        return true;
    }
Далее, мы выдаём предметы нашему игроку. Здесь мы используем алмаз и двадцать кирпичей. Предмет представляется через ItemStack. Итак, давайте создадим новый ItemStack и установим его количество. В конце мы выдадим его нашему игроку.

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

Java:
    @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. Эта опция легче и короче для использования.
Java:
ItemStack bricks = new ItemStack(Material.BRICK, 20);

Регистрируем Команду
Затем нам надо зарегистрировать нашу команду. Чтобы сделать это, перейдите в ваш метод onEnable() в главном классе. Нам всего лишь надо добавить одну строку.
Java:
    @Override

    public void onEnable() {
        // Регистрируем нашу команду "kit" (установите экземпляр класса вашей команды в качестве исполнителя)
        this.getCommand("kit").setExecutor(new CommandKit());
    }

Добавляем в plugin.yml
Последний шаг - добавить нашу команду в plugin.yml. Откройте его и добавьте строки, похожие на те, что ниже, и протестируйте ваш плагин.
YAML:
# Замените "kit" на название вашей команды
commands:
  kit:
    description: Ваше описание
    usage: /kit
Посмотреть подробный туториал по оформлению команд в plugin.yml можно здесь - прим. пер.

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

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

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

Назад
Верх