С чего начать
У AbstractMenus 2.0 есть SPI: через него аддоны в рантайме регистрируют свои действия, правила, свойства предметов, активаторы, каталоги и хендлеры провайдеров (экономика, права, уровни, плейсхолдеры, скины). Встроенные типы тянут тот же SPI.
Аддон можно поставить двумя способами - выбирай:
Дальше идут страницы про сам API. Про доставку (какой путь выбрать, формат манифеста, жизненный цикл) смотри страницу аддонов.
Подключи API в свою сборку
Заголовок раздела «Подключи API в свою сборку»API AbstractMenus публикуется на GitHub Packages и собирается под каждый релиз на JitPack.
repositories { maven("https://jitpack.io")}
dependencies { compileOnly("com.github.AbstractMenus:minecraft-plugin:2.0.0-alpha.2")}repositories { maven { url 'https://jitpack.io' }}
dependencies { compileOnly 'com.github.AbstractMenus:minecraft-plugin:2.0.0-alpha.2'}<repositories> <repository> <id>jitpack</id> <url>https://jitpack.io</url> </repository></repositories>
<dependencies> <dependency> <groupId>com.github.AbstractMenus</groupId> <artifactId>minecraft-plugin</artifactId> <version>2.0.0-alpha.2</version> <scope>provided</scope> </dependency></dependencies>artifactId - minecraft-plugin, по имени репозитория. JitPack кладёт мульти-модульные Gradle-проекты под одну корневую координату; внутри jar - модуль api.
Объяви зависимость в plugin.yml (только Путь 2)
Заголовок раздела «Объяви зависимость в plugin.yml (только Путь 2)»Плагины-как-аддоны (Путь 2) объявляют AbstractMenus жёсткой зависимостью - тогда Bukkit гарантирует, что твой onEnable запустится после того, как AbstractMenus уже поднялся.
name: MyAddonversion: 1.0.0depend: - AbstractMenusЕсли плагин должен подниматься и без AbstractMenus, ставь softdepend: - и тогда обмазывай вызовы API проверкой Bukkit.getPluginManager().getPlugin("AbstractMenus") != null.
У аддонов Пути 1 plugin.yml нет вообще - вместо него addon.conf с полем pluginDependencies. См. страницу аддонов.
Получи экземпляр API
Заголовок раздела «Получи экземпляр API»Точка входа - AbstractMenusApi. Берётся через статический get():
import ru.abstractmenus.api.AbstractMenusApi;
AbstractMenusApi api = AbstractMenusApi.get();Если AbstractMenus ещё не включился - вернёт null. С depend: [AbstractMenus] в манифесте к моменту твоего onEnable он точно поднят.
В аддонах Пути 1 get() дёргать вообще не нужно - API прилетает параметром в методы жизненного цикла:
public final class MyAddon implements MenuExtension { @Override public void onEnable(AbstractMenusApi api) { // api уже инициализирован }}Что выставляет API
Заголовок раздела «Что выставляет API»api.actions(); // TypeRegistry<Action>api.rules(); // TypeRegistry<Rule>api.activators(); // TypeRegistry<Activator>api.itemProperties(); // TypeRegistry<ItemProperty>api.catalogs(); // TypeRegistry<Catalog<?>>
api.providers(); // ProviderRegistry - экономика, права, уровни, плейсхолдеры, скиныapi.serializers(); // общие HOCON NodeSerializersapi.variables(); // VariableManager - чтение/запись персональных и глобальных переменных
api.openMenu(activator, ctx, player, menu);api.getOpenedMenu(player);api.loadMenus();
api.apiVersion(); // строка версии для диагностикиapi.getPlugin(); // сырой хэндл Bukkit PluginПод каждый реестр, менеджер и хелпер есть отдельная страница в этом разделе.
Опционально: GitHub Packages вместо JitPack
Заголовок раздела «Опционально: GitHub Packages вместо JitPack»Если по какой-то причине GitHub Packages обязателен (например, политика CI):
-
Сгенерируй Personal Access Token (classic) со скоупом
read:packages. -
Сложи учётку в
~/.gradle/gradle.properties:~/.gradle/gradle.properties gpr.user=your-github-usernamegpr.token=ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -
Добавь репозиторий и переключи координату на родную
ru.abstractmenus:api:build.gradle repositories {maven {url = uri('https://maven.pkg.github.com/AbstractMenus/minecraft-plugin')credentials {username = providers.gradleProperty('gpr.user').orElse(providers.environmentVariable('GITHUB_ACTOR')).getOrNull()password = providers.gradleProperty('gpr.token').orElse(providers.environmentVariable('GITHUB_TOKEN')).getOrNull()}}// JitPack всё ещё нужен для транзитивной зависимости api// com.github.AbstractMenus:hocon:maven { url 'https://jitpack.io' }}dependencies {compileOnly 'ru.abstractmenus:api:2.0.0-alpha.2'}