Перейти к основному содержимому

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
warning

CGAPIProvider.get() бросает IllegalStateException, если CommandGuard ещё не включён. Убедитесь, что ваш плагин зависит от CommandGuard и обращается к API уже после его запуска.

Подключение​

Артефакт публикуется на JitPack. Подключается одинаково для Spigot и Velocity — это тот же api. Версия ниже подтягивается автоматически — последняя сборка с JitPack.

Репозиторий​

Gradle
maven { url = "https://jitpack.io" }
Maven
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>

Зависимость​

dependencies {
compileOnly("com.github.1wairesd:CommandGuard:loading:api")
}

Что общее для обеих платформ​

Проверка команды​

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(). Никакой бизнес-логики в событии нет — только данные и результат.

Итог​

Часть APISpigotVelocity
CGAPIProvider.get() / CGAPIобщийобщий
CommandManager, TabGroupManager, Platformобщийобщий
Событие блокировкиBukkitCommandBlockedEventVelocityCommandBlockedEvent