1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем 0xLairon1, 24 апр 2023.

?

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

  1. Да

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

    0 голосов
    0,0%
  1. Автор темы
    0xLairon1

    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(commandRegistryPlugin);

            
    // Зарегистрируйте 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 senderCommand commandString labelString[] args) {
     
    // Здесь вы можете добавить логику к вашей подкоманде.
             // Реализация может быть такой же, как в ванильном Bukkit.
             // Библиотека сама сделает все проверки для onlyPlayer и тд.
             // Обратите внимание, что в массиве args
             // первый элемент всегда будет
             // идентификатор вашей подкоманды или ее псевдоним.
            
    return false;
        }


        @
    Override
        
    public List<StringonTabComplete(CommandSender senderCommand commandString aliasString[] 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(); // Отправитель команды
            
    });
        }

     
    Последнее редактирование: 25 апр 2023
  2. ReloGGrc

    ReloGGrc Активный участник Пользователь

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

    UPD, но у тебя выглядит покруче
     
    Последнее редактирование: 24 апр 2023
  3. Автор темы
    0xLairon1

    0xLairon1 Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    0xLairon1
    UPD 2.2.1:
    Код:
    Переезд на jetbrains maven repo
     
  4. Автор темы
    0xLairon1

    0xLairon1 Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    0xLairon1
    UPD 2.2:
    1. Добавлен асинхронный вызов команд, настраивается через параметр async в SubCommandSettings
     
  5. swat1x

    swat1x Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    swat1x
    Ну хз, есть более удобная библиотека c подобным и более обширным функционалом

    https://github.com/aikar/commands
     
  6. ReloGGrc

    ReloGGrc Активный участник Пользователь

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

    Там же все это есть вроде, и вроде смысла тогда в этих библиотеках нет..
     
  7. swat1x

    swat1x Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    swat1x
    так это мультиплатформенный фреймворк. При желании его можно хоть на дискорд имплементировать или на свои какие-то платформы, как это например сделано у меня
     
  8. ReloGGrc

    ReloGGrc Активный участник Пользователь

    Баллы:
    46
    Имя в Minecraft:
    ALis
    А, интересно получается
     

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