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

Туториал Библиотека комманд от sk89q

Тема в разделе "Руководства, инструкции, утилиты", создана пользователем danbka333, 7 апр 2014.

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

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

    Баллы:
    103
    В этом туториале я расскажу как использовать библиотеку от sk89q.

    1. Устанавливаем библиотеку

    1 вариант. Подключаем WorldEdit к проекту.
    2 вариант. Скачиваем https://github.com/OvercastNetwork/sk89q-command-framework и распаковываем оттуда папку bukkit, bungee, core в корень плагина.
    3 вариант. Для этого понадобится maven.

    Код:
    <repository>
    <id>repo.oc.tc</id>
        <url>http://repo.oc.tc/content/repositories/releases/</url>
    </repository>
    
    <dependency>
        <groupId>com.sk89q</groupId>
        <artifactId>command-framework-core</artifactId>
        <version>0.5-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>com.sk89q</groupId>
        <artifactId>command-framework-bungee</artifactId>
        <version>0.5-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>com.sk89q</groupId>
        <artifactId>command-framework-bukkit</artifactId>
        <version>0.5-SNAPSHOT</version>
    </dependency>
    

    2. Инцилизируем библиотеку в нашем плагине.

    Добавляем

    Код:
    private CommandsManager<CommandSender> commands;
    Затем в методе onEnable()

    Код:
    @Override
        public void onEnable() {
    
    this.commands = new CommandsManager<CommandSender>() {
                @Override
                public boolean hasPermission(CommandSender sender, String perm) {
                    return sender instanceof ConsoleCommandSender || sender.hasPermission(perm);
                }
            };
            CommandsManagerRegistration cmdRegister = new CommandsManagerRegistration(this, this.commands);
    
            cmdRegister.register(YourCommand.class);
    }
    
    Создаём метод onCommand с таким содержанием

    Код:
    @Override
        public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
            try {
                this.commands.execute(cmd.getName(), args, sender, sender);
            } catch (CommandPermissionsException e) {
                sender.sendMessage(ChatColor.RED + "You don't have permission.");
            } catch (MissingNestedCommandException e) {
                sender.sendMessage(ChatColor.RED + e.getUsage());
            } catch (CommandUsageException e) {
                sender.sendMessage(ChatColor.RED + e.getMessage());
                sender.sendMessage(ChatColor.RED + e.getUsage());
            } catch (WrappedCommandException e) {
                if (e.getCause() instanceof NumberFormatException) {
                    sender.sendMessage(ChatColor.RED + "Number expected, string received instead.");
                } else {
                    sender.sendMessage(ChatColor.RED + "An error has occurred. See console.");
                    e.printStackTrace();
                }
            } catch (CommandException e) {
                sender.sendMessage(ChatColor.RED + e.getMessage());
            }
            return true;
        }
    3. Создание команды

    Создаём новый класс. К примеру YourCommand.class
    И в этот классе добавляем следующее.

    Код:
    @Command(aliases = { "rubukkit" }, desc = "Say hello", usage = "[player] - The player to say hello to", min = 1, max = 1)
    public static void hello(final CommandContext args, CommandSender sender) throws CommandException {
    
        Player target = Bukkit.getPlayer(args.getString(0));
    
        if (target == null) throw new CommandException("Player " + args.getString(0) + " not found!");
    
        target.sendMessage("Hello RuBukkit!");
    }
    Каждая команда будет начинаться с
    Код:
    @Command(aliases = { "rubukkit" }, desc = "Say hello", usage = "[player] - The player to say hello to", min = 1, max = 1)
    Разберём:
    aliases = { "rubukkit" } - название команды. Пример: aliases = { "rubukkit", "rb" }
    desc = "Say hello" - описание команды которые мы будем видеть в /help.
    usage = "[player] - The player to say hello to" - подсказка к использованию команды.
    min = 1 - минимальное кол-во аргументов.
    max = 1 - максимальное кол-во аргументов.

    4. Дополнительно

    Аргументы.
    Получения текста (String) args.getString(index)
    Получение числа (Integer) args.getInt(index)
    Получение текста после index args.getJoinedStrings(index) Пример: Игрок ввёл команду /rubukkit Henry33russian Я люблю кушать блинчики, то args.getJoinedStrings(1) выдаст нам Я люблю куша...

    Флаги.
    @Command имеет ещё 1 опцию. flags = "abc"

    Выглядеть будет примерно так.
    Код:
    @Command(aliases = { "rubukkit" }, desc = "Say hello", usage = "[player] - The player to say hello to", min = 1, max = 1, flags = "abc")
    Теперь разберём как работать с флагами. У опции args есть функции getFlag(Char) и hasFlag(Char). Пример использования:
    Код:
    @Command(aliases = { "rubukkit" }, desc = "Say hello", usage = "[player] - The player to say hello to", min = 1, max = 1, flags = "a")
    public static void hello(final CommandContext args, CommandSender sender) throws CommandException {
    
        Player target = Bukkit.getPlayer(args.getString(0));
    
        if (target == null) throw new CommandException("Player " + args.getString(0) + " not found!");
    
        if(args.hasFlag('a'))
        {
             target.sendMessage("Hello RuBukkit! With A flag.");
        }
        else
        {
            target.sendMessage("Hello RuBukkit!");
        }
    }
    Если игрок введёт /rubukkit -a Henry33russian, то ему выведет текст - "Hello RuBukkit! With A flag.", а если без, то - "Hello RuBukkit!".

    Теперь немного расширим знания о флагах.

    Если вам нужно вместе с флагом получить число, то для вас есть функция args.getFlagInteger('a', 1) или args.getFlagDouble('b', 1). Пример: /rubukkit -a 3 -b 12.95


    Права.

    Теперь не нужен код вроде:

    Код:
    if (!Util.hasPermission(sender, "rubukkit.tutorial.hello"))
            {
                sender.sendMessage(Util.formatMessage(getConfig().getString("messages.noPermission")));
                return true;
            }
    
    просто добавь:
    Код:
    @CommandPermissions({"rubukkit.tutorial.hello"})

    Спасибо за уделённое внимание.
     
    twixi007, kirr9999 и KoBoT нравится это.
  2. Хостинг MineCraft
    <
  3. Автор темы
    danbka333

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

    Баллы:
    103
    Резерв
     
  4. KoBoT

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

    Баллы:
    173
    Не читал,но видно,что старался!:)
    Красивое оформление и приятно на глаз смотриться,да и информация полезная!)
    ЛОЙС заслужен:D
     
  5. Автор темы
    danbka333

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

    Баллы:
    103

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