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

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

Discussion in 'Руководства, инструкции, утилиты' started by danbka333, Apr 7, 2014.

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

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

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

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

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

    Code:
    <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. Инцилизируем библиотеку в нашем плагине.

    Добавляем

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

    Code:
    @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 с таким содержанием

    Code:
    @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
    И в этот классе добавляем следующее.

    Code:
    @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!");
    }
    Каждая команда будет начинаться с
    Code:
    @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"

    Выглядеть будет примерно так.
    Code:
    @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). Пример использования:
    Code:
    @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


    Права.

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

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

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

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

    Trophy Points:
    103
    Резерв
     
  4. KoBoT

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

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

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

    Trophy Points:
    103

Share This Page