API для разработчиков
У CommandGuard единый API-модуль для обеих платформ. Доступ к tab-группам и проверка команд — одинаковый код и для Spigot, и для Velocity. Отличается только событие блокировки команды — оно своё на каждой платформе.
Один артефакт на обе платформы
Точка входа — интерфейс CGAPI, который вы получаете через CGAPIProvider.get().
Он одинаков и на Spigot, и на Velocity:
CGAPI api = CGAPIProvider.get();
api.getCommandManager(); // проверка блокировки команд
api.getTabGroupManager(); // работа с tab-группами
api.getPlatform(); // платформа (Bukkit / Velocity), версия, logger
CGAPIProvider.get() бросает IllegalStateException, если CommandGuard ещё не
включён. Убедитесь, что ваш плагин зависит от CommandGuard и обращается к API уже
после его запуска.
Подключение
Артефакт публикуется на JitPack.
Подключается одинаково для Spigot и Velocity — это тот же api. Версия ниже
подтягивается автоматически — последняя сборка с JitPack.
Репозиторий
maven { url = "https://jitpack.io" }
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
Зависимость
- Gradle (Kotlin)
- Gradle (Groovy)
- Maven
dependencies {
compileOnly("com.github.1wairesd:CommandGuard:loading:api")
}
dependencies {
compileOnly 'com.github.1wairesd:CommandGuard:loading:api'
}
<dependency>
<groupId>com.github.1wairesd</groupId>
<artifactId>CommandGuard</artifactId>
<version>loading</version>
<classifier>api</classifier>
<scope>provided</scope>
</dependency>
Что общее для обеих платформ
Проверка команды
CommandManager cm = CGAPIProvider.get().getCommandManager();
// логика блокировки по конфигу — одинакова на Spigot и Velocity
Работа с tab-группами
TabGroupManager tgm = CGAPIProvider.get().getTabGroupManager();
// Разрешённые команды для набора прав игрока
// serverName = null, если фильтр по серверу не нужен
List<String> allowed = tgm.getTabCommands(permissions, serverName);
// Активные группы игрока (минимум ["default"])
List<String> groups = tgm.getActiveGroupNames(permissions, serverName);
Что отличается: событие блокировки
Событие блокировки команды наследует разные базовые типы платформы, поэтому класс свой на каждой:
Spigot — BukkitCommandBlockedEvent
Обычное Bukkit-событие, реализующее Cancellable.
@EventHandler
public void onCommandBlocked(BukkitCommandBlockedEvent event) {
event.getPlayer().sendMessage("Заблокировано: " + event.getFullCommand());
event.setCancelled(true); // пропустить команду несмотря на блокировку
}
Velocity — VelocityCommandBlockedEvent
Реализует ResultedEvent<GenericResult>.
@Subscribe
public void onCommandBlocked(VelocityCommandBlockedEvent event) {
event.getPlayer().sendMessage(Component.text("Заблокировано: " + event.getFullCommand()));
event.setResult(ResultedEvent.GenericResult.denied()); // разрешить команду
}
Оба события дают getPlayer() и getFullCommand(). Никакой бизнес-логики в
событии нет — только данные и результат.
Итог
| Часть API | Spigot | Velocity |
|---|---|---|
CGAPIProvider.get() / CGAPI | общий | общий |
CommandManager, TabGroupManager, Platform | общий | общий |
| Событие блокировки | BukkitCommandBlockedEvent | VelocityCommandBlockedEvent |