PassengerAPI
Активный0.0
Установок
Последнее обновление
Версии
Решение проблем совместимости пассажиров с помощью PassengerAPI
PassengerAPI — это специализированный плагин, который решает распространённые проблемы совместимости между различными модификациями, управляющими системой пассажиров сущностей. Когда разные плагины независимо работают с пассажирами путём отправки сетевых пакетов, возникают конфликты, приводящие к непредсказуемому поведению и откреплению ранее установленных пассажиров.
Как устраняются конфликты совместимости
Пассажирский API централизует управление пассажирами сущностей, предотвращая типичные проблемы, такие как:
- Потеря визуальных элементов
- Некорректные отображения
- Неожиданное открепление пассажиров
Полная совместимость из коробки — плагин начинает работать сразу после установки в папку plugins и перезагрузки сервера.
(Требуется установленный Packet Events)
Демонстрация в действии
Примеры совместной работы плагинов
PassengerAPI обеспечивает бесшовную интеграцию между такими популярными модификациями как:
- Better Chat Bubbles
- ProdigyCape
- VanillaMinimaps
- PlayerMounts
Без PassengerAPI различные плагины не могут одновременно устанавливать пассажиров, поскольку они отправляют собственные пассажирские пакеты независимо друг от друга.
Настройки и управление
Конфигурация
# НЕ ИЗМЕНЯЙТЕ НИЧЕГО В ЭТОМ ФАЙЛЕ,
# ЕСЛИ НЕ УВЕРЕНЫ НА 100% В СВОИХ ДЕЙСТВИЯХ!
AutoPassengerDetection:
SetPassengerPacket: true
EntityDestroyPacket: true
Команды администратора
Разрешение: passengerapi.commands
/passengerapi debug
/passengerapi reload
Примечание: В режиме отладки с блоком в руке вы будете получать расширенную диагностическую информацию в чате.
Для разработчиков: сильный функционал API
PassengerAPI предоставляет разработчикам инструменты для полного контроля над пассажирами сущностей без уничтожения самой сущности.
Получение экземпляра PassengerActions
PassengerActions passengerActions = PassengerAPI.getAPI(yourPluginInstance);
Замените yourPluginInstance на экземпляр основного класса вашего плагина (обычно используйте this для вызова из основного класса).
Управление пассажирами
// Добавление одного пассажира
passengerActions.addPassenger(targetEntityId, passengerEntityId);
// Добавление нескольких пассажиров
passengerActions.addPassengers(targetEntityId, Set.of(passenger1Id, passenger2Id, ...));
// Удаление пассажира
passengerActions.removePassenger(targetEntityId, passengerEntityId);
// Удаление нескольких пассажиров
passengerActions.removePassengers(targetEntityId, Set.of(passenger1Id, passenger2Id, ...));
// Удаление всех пассажиров для сущности
passengerActions.removeAllPassengers(targetEntityId);
// Получение пассажиров
Set<Integer> passengers = passengerActions.getPassengers(targetEntityId);
// глобальные методы для пассажиров от всех плагинов
passengerActions.removeGlobalPassengers(targetEntityId, Set.of(passenger1Id, passenger2Id, ...));
passengerActions.removeAllGlobalPassengers(targetEntityId);
Set<Integer> globalPassengers = passengerActions.getGlobalPassengers(targetEntityId);
Важно: Все сущности идентифицируются по ID сущности (не по UUID).
Система событий
PassengerAPI предоставляет набор событий для реагирования на изменения пассажиров:
@EventHandler
public void onAddPassenger(AddPassengerEvent event) {
// Название плагина, пытающегося добавить пассажиров
String pluginName = event.getPluginName();
int targetEntity = event.getTargetEntityID();
Set<Integer> passengers = event.getPassengerList();
// Ваш код обработки
}
@EventHandler
public void onRemovePassenger(RemovePassengerEvent event) {
// Плагин, удаляющий пассажиров
String pluginName = event.getPluginName();
int targetEntity = event.getTargetEntityID();
Set<Integer> removedPassengers = event.getPassengerList();
// Ваша логика обработки
}
@EventHandler
public void onPassengerPacket(PassengerPacketEvent event) {
int targetEntity = event.getTargetEntityID();
Set<Integer> passengers = event.getPassengerList();
// Список игроков для получения пакета (можно модифицировать)
List<Player> receivers = event.getPacketReceivers();
// Дополнительная обработка
}
Не забудьте зарегистрировать свои классы событий для их обработки.