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

Стартап Библиотека для простого создания подкоманд xCommandLib

Продолжать разработку? Если считаете что это библиотека не нужна опишите почему

  • Да

    2 голосов 100,0%
  • Нет

    0 голосов 0,0%

0xLairon1

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
0xLairon1
Дай мне то что я хочу

Maven зависимость
Репозиторий
HTML:
<repository>
    <id>space-lairon-libs</id>
    <url>https://maven.pkg.jetbrains.space/0xlairon1/p/main/lairon-libs</url>
</repository>
Зависимость

HTML:
<dependency>
    <groupId>ru.lairon.libs</groupId>
    <artifactId>0xCommandLib</artifactId>
    <version>2.3</version>
    <scope>compile</scope>
</dependency>

Про библиотеку
XCommandLib — это простая библиотека, которая поможет вам быстро и легко создавать команды и подкоманды. Вы также можете настраивать свои подкоманды как вам угодно.

Использование
Как создать и зарегистрировать свою команду?
PHP:
    public void onEnable(){
        // Для начала создайте CommandRegistry,
        // он нужен для того чтобы хранить ваши подкоманды
        // и вы легко могли ими управлять.
        CommandRegistry commandRegistry = new CommandRegistry();

        // Создайте CommandExecutor,
        // он нужен, чтобы зарегистрировать его как команду Bukkit.
        // Он будет управлять всеми подкомандами для вас.
        CommandExecutor commandExecutor = new CommandExecutor(commandRegistry, Plugin);

        // Зарегистрируйте CommandExecutor как обычную команду для Bukkit.
 
        PluginCommand yourBukkitCommand = Bukkit.getPluginCommand("YourCommand");
        yourBukkitCommand.setExecutor(commandExecutor);
       // Вы также можете зарегистрировать CommandExecutor как TabCompleter.,
        // то моя библиотека сама будет сортировать, фильтровать и отображать таб комплиты которые вы ей отдадите
        yourBukkitCommand.setTabCompleter(commandExecutor);

        // Теперь вы можете добавлять свои подкоманды в CommandRegistry и использовать их в игре!
        // Использование в игре: /YourCommand <SubCommandID> <params>...
        commandRegistry.registerCommand(new YourSubCommand());
     
        // Вот как вы можете установить стандартный обработчик команд,
        // он будет вызываться, когда игрок не ввел ни одной подкоманды.
        // Вы можете использовать его как команду для отображения справки помощи игроку.
        // Просто зарегистрируйте HelpCommand как обычную подкоманду help и как команду по умолчанию.
        commandExecutor.setDefaultCommand(new HelpCommand());
        }

Как я могу создать свою собственную подкоманду?

PHP:
// Во-первых, наследуйте класс SubCommand и реализуйте его
// Метод onCommand и конструктор класса
public class YourSubCommand extends SubCommand {

    // В конструкторе суперкласса передайте SubCommandSettings.
    // Вы можете использовать builder, чтобы легко настроить свою подкоманду.
    // Если вам нужно указать только идентификатор, вы можете использовать new SubCommandSettings(ID);
    public YourSubCommand() {
        super(SubCommandSettings
                // ID вашей подкоманды,
                // он нужен чтобы библиотека понимала
                // какую подкоманду нужно использовать.
                .builder("YourSubCommand") // (ОБЕЗАТЕЛЬНО)
                // Если вы хотите, чтобы только игроки использовали
                // вашу подкоманда, установите для нее значение true
                .onlyPlayer(true) // (НЕ ОБЕЗАТЕЛЬНО)
                // Вы можете установить разрешения, которые
                // потребуются для выполнения под команды
                .permission("some.permission") // (НЕ ОБЕЗАТЕЛЬНО)
                // Вы можете установить псевдонимы для вашей подкоманды
                .aliases(List.of("alias1", "alias2")) // (НЕОБЕЗАТЕЛЬНО)
                // Или добавляйте псевдонимы по одному
                .alias("alias3") // (НЕОБЕЗАТЕЛЬНО)
                .alias("alias4") // (НЕОБЕЗАТЕЛЬНО)
                 //Если true команды будет выполнять асинхронно
                .async(true) // (НЕОБЕЗАТЕЛЬНО)
                .build());
    }

    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
 
// Здесь вы можете добавить логику к вашей подкоманде.
         // Реализация может быть такой же, как в ванильном Bukkit.
         // Библиотека сама сделает все проверки для onlyPlayer и тд.
         // Обратите внимание, что в массиве args
         // первый элемент всегда будет
         // идентификатор вашей подкоманды или ее псевдоним.
        return false;
    }


    @Override
    public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
         // Здесь вы можете ввести Tab Complete для подкоманд,
         // библиотека сама все отфильтрует и отсортирует за вас
        return null;
    }
}

Actions
Если вы хотите сделать свои собственные сообщения о том, что у игрока недостаточно прав или что подкоманда не найдена, то воспользуйтесь системой Actions.
PHP:
    public void onEnable() {
        CommandRegistry commandRegistry = new CommandRegistry();
        CommandExecutor commandExecutor = new CommandExecutor(commandRegistry);

         // Это действие используется для отслеживания события
         // когда игрок ввел неизвестную подкоманду
        commandExecutor.setCommandNotFoundAction(action -> {
            action.getCommandID(); // ID команды, введенной игроком
            action.getCommandSender(); // Сам игрок или объект ConsoleSender
             // Здесь вы можете отправить сообщение игроку
             // команды о том, что команда не найдена.
            action.getCommandSender().sendMessage("Подкоманда " + action.getCommandID() + " не найдена.");
        });

         // Это действие будет вызвано, когда у игрока
         // недостаточно прав для использования этой подкоманды
        commandExecutor.setSenderDontHasPermissionAction(action -> {
            action.getCommand(); // Подкоманда, которую кто-то пытался использовать
            action.getCommandSender(); // Отправитель команды
             // Здесь вы также можете отправить сообщение
             // игроку что у него нет прав
            action.getCommandSender().sendMessage("Вы должны иметь право %s для того чтобы использовать %s"
                    .formatted(
                            action.getCommand().getSettings().getPermission(),
                            action.getCommand().getSettings().getId()
                    ));
        });
         // Это действие запускается, когда команда
         // использовалась консолью, но она только для игрока.
        commandExecutor.setOnlyPlayerAction(action -> {
            action.getCommand(); // Подкоманда, которую кто-то пытался использовать
            action.getCommandSender(); // Отправитель команды
        });
    }

 
Последнее редактирование:
Лол, Я сегодня в своем protocollere как раз сделал такую возможность xD
Ток чего-то на рубакит забыл обнову залить...

UPD, но у тебя выглядит покруче
 
Последнее редактирование:
UPD 2.2.1:
Код:
Переезд на jetbrains maven repo
 
UPD 2.2:
  1. Добавлен асинхронный вызов команд, настраивается через параметр async в SubCommandSettings
 
Ну хз, есть более удобная библиотека c подобным и более обширным функционалом

https://github.com/aikar/commands

А на вскидку, почему просто не создать класс который будет расширять org.bukkit.command
Command и зарегистрировать команду

Там же все это есть вроде, и вроде смысла тогда в этих библиотеках нет..
 
А на вскидку, почему просто не создать класс который будет расширять org.bukkit.command
Command и зарегистрировать команду

Там же все это есть вроде, и вроде смысла тогда в этих библиотеках нет..
так это мультиплатформенный фреймворк. При желании его можно хоть на дискорд имплементировать или на свои какие-то платформы, как это например сделано у меня
 

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

Назад
Верх