Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Dismiss Notice

Туториал [урок] обработка команд

Discussion in 'Руководства, инструкции, утилиты' started by DmitriyMX, Dec 16, 2011.

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

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

    Trophy Points:
    153
    Skype:
    dmn550
    Наш плагин чата уже многое умеет. Сейчас в нем не хватает одной важной детали: перезагрузка конфигурации. Проще говоря, если мы добавим в файл настроек какого-нибудь пользователи или изменим формат уже существующего, то в игре ничего не обновится, если не сделать рестарт сервера. Исправим это с помощью команды, набранной оператором в чате.

    Да, в этом уроке мы научимся тому, чем напичканы 99% плагинов: реагирование на команды.

    На самом деле это очень просто. Для этого служит метод onCommand(), объявленный в главном классе плагина(в нашем случае, в DMXChat).

    Code:
    public boolean onCommand(CommandSender sender, Command cmd, String cmdLabel, String[] args)
    sender – это ссылка на отправителя комманды. Здесь может быть как ссылка на игрока (объект Player), так и ссылка на консоль Bukkit’а
    cmd - здесь кроется название команды, которая набрана
    args – массив аргументов
    cmdLabel – …честно говоря не помню для чего служит, но и без нее можно жить
    возвращаемые данные – логический тип, т.е. выполнилась команда или нет.

    Для наглядности, пусть по команде /chat -reload наш плагин перечитывает список избранных. Данная команда состоит из двух частей: “chat”, который является самой командой и “-reload” являющийся аргументом команды.

    Итак, от теории к делу. В классе DMXChat добавим метот onComand():
    Code:
    public boolean onCommand(CommandSender sender, Command cmd, String cmdLabel, String[] args){
        if(cmd.getName().equalsIgnoreCase(“chat”)){
            if(args[0].equalsIgnoreCase(“-reload”)){
                chatListener.userList = config.getKeys(false);
                return true;
            }
        }
        return false;
    }
    Здесь всё довольно просто: в первых двух условиях проверяется соответствие команды и аргумента. Можно было бы залепить в одно условие, но я оставил так для наглядности. Такие проверки нужны, если ваш плагин “обслуживает” не одну команду и не один аргумент. После всех проверок, список избранных заново загружается в память. Ах да, чуть не забыл. Нужно сделать одну маленькую паправку в DMXChatListener:

    Code:
    public Set<String> userList;
    Иначе доступа к этой переменной(свойству?) мы не получим из вне класса.

    На этом можно было бы закончить, но не тут то было. Если сейчас скомпилировать плагин и залить его на сервер, то команда наша работать не будет. Но почему?! Мы же всё правильно сделали! Да, правильно, но не до конца. Чтобы Bukkit смог передать управление нашему плагину на обработку команды /chat, нужно в файле plugin.yml(о нем в первом уроке говорилось) добавить следующий текст:

    Code:
    commands:
      chat:
        usage: /chat -reload
    В ветке commands перечисляются команды, на которые наш плагин реагирует. А в usage пишется вспомогательный текст. Он будет отображаться, если onCommand() вернет false.

    Теперь точно всё. В следующем уроке, расскажу как реализовать разделение прав доступа с использованием сторонего плагина Permissions.

    _____________________________​
     
    jkl1234, D_ART, z0z1ch and 1 other person like this.
  2. Хостинг MineCraft
    <
  3. helfi228

    helfi228 Активный участник

    Trophy Points:
    63
    Имя в Minecraft:
    helfi228
    слушай скажи как стать админом на своём серве я пытался писать в консоли op иник игорока не получилось и пытался так /op иник игрока тоже не получилось
     
  4. Merro

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

    Trophy Points:
    103
    ...
     

Share This Page