Плагин-библиотека для разработки серверных плагинов Майнкрафт на Spigot и Paper. Он добавляет контейнер зависимостей и систему аннотаций, чтобы автоматически собирать компоненты, команды, обработчики событий и задачи без большого кода в onEnable().
Возможности
- Управляет экземплярами конкретных классов через
@Componentи передаёт зависимости в конструктор с@Inject. - Проверяет циклические зависимости, ошибки конфигурации и несовместимость с сервером при запуске, чтобы не оставлять их до работы сервера.
- Исключает из автоматического сканирования шаблонные, абстрактные и повторно используемые классы аннотациями
@Virtualи@ConsumableClass. - Подключает классы-обработчики Bukkit-событий через
@Listeners, а исполнители серверных команд — через@Commands. - Запускает методы по расписанию с
@Schedule, в том числе в фоне, и выполняет отдельные тяжёлые методы в фоновом потоке через@Async;@Syncзакрепляет выполнение за основным потоком сервера. - Привязывает разделы YAML-файлов к Java
recordи объектам через@ConfigObject, а отдельные значения передаёт через@ConfigValue. - Позволяет включать компонент только при выполнении своего условия с
@Conditional. - Поддерживает обработчики корректного завершения работы
@GracefulShutdown, каналы сообщений между сервером и прокси через@InboundChannelи@OutboundChannel, а также измерение производительности с@Monitor.
Настройка
Главный класс плагина должен наследовать LazberryRegistryFramework. Для собственного кода запуска и остановки предусмотрены методы onLrfEnable() и onLrfDisable().
Классы с @Component, @Listeners, @Commands и запланированными методами должны быть конкретными классами в пакете плагина. Если у класса несколько конструкторов, нужный отмечают @Inject; все его зависимости также должны быть зарегистрированы как компоненты, объекты @ConfigObject или внешние экземпляры.
Команду, указанную в @Commands, всё равно добавляют в раздел commands: файла plugin.yml. Класс с @Listeners должен реализовывать Bukkit-интерфейс Listener.
Для @ConfigObject(path = "...") путь обязан точно совпадать с разделом YAML. Значения, которых может не быть в файле, требуют значений по умолчанию либо допускающего пустое значение типа.
Асинхронные методы с @Async и @Schedule(async = true) не должны напрямую менять сущности и блоки через Bukkit API: такие действия выполняют в основном потоке. Методы с @Schedule рассчитаны на вызов без параметров.
Внешние объекты, например экземпляр JavaPlugin, папку данных или клиент сторонней библиотеки, можно заранее зарегистрировать через DependencyContainer.registerInstance() до построения контейнера.
Требования
Библиотека предназначена для плагинов серверов Spigot и Paper и использует Bukkit API. Для работы классов с @Listeners и @Commands нужны соответствующие интерфейсы Bukkit; конфигурационные объекты читаются из YAML.
