PassengerAPI

修复乘客兼容性问题 | 管理你自己的实体乘客

资源图片
Join Discord Server # 为什么使用 PassengerAPI? 它解决了不同插件创建实体时可能出现的兼容性问题, 通过向玩家发送数据包并将其设置为乘客来实现。 这可能导致冲突和意外行为,例如其他插件卸载之前设置的乘客。 例如,这使得以下插件可以自动兼容: - Better Chat Bubbles(更好聊天气泡) - ProdigyCape(传奇披风) - VanillaMinimaps(原版小地图) - PlayerMounts(玩家坐骑) 此插件**开箱即用!** 只需将其放入插件文件夹并重启服务器即可。 (需要 [Packet Events](https://modrinth.com/plugin/packetevents)) # 展示 **视频解释** 正如你在视频中看到的: 如果没有 PassengerAPI,聊天气泡和披风不能同时设置为乘客! 原因是它们都是不同的插件,各自发送自己的乘客数据包。 如果你是**开发者**,也可以使用此API添加/访问/移除乘客! (大多数兼容性问题应能自动修复,但……) 例如,如果你想从实体中移除一个乘客,而不想杀死它,这将很有用。 # 指令: 权限 `passengerapi.commands` ``` /passengerapi debug /passengerapi reload ``` > 注意 > 当你处于调试模式并且手里拿着一个方块的时候 > 你将在聊天中获得额外的调试信息。 # 配置文件: ```yml # 请不要修改此文件中的任何内容 # 如果你不是100%确定你在做什么! AutoPassengerDetection: SetPassengerPacket: true EntityDestroyPacket: true ``` # 快速开始 1. 将 PassengerAPI 作为仅编译依赖项添加到你的插件中。 Gradle: ```gradle repositories { mavenCentral() maven { url 'https://jitpack.io' } } dependencies { implementation 'com.github.max1mde:PassengerAPI:1.0.1' } ``` (对于 maven: https://jitpack.io/#max1mde/PassengerAPI/1.0.0) 2. 将以下行添加到你的 `plugin.yml` 文件中: ``` depend: - PassengerAPI ``` 还要将插件 [Packet Events](https://www.spigotmc.org/resources/packetevents-api.80279/) 添加到你的服务器 这个插件需要它! # 使用方法 ### 获取 PassengerActions 实例 要访问 PassengerAPI 的功能,你需要获取 PassengerActions 实例: ```java PassengerActions passengerActions = PassengerAPI.getAPI(yourPluginInstance); ``` 将 yourPluginInstance 替换为插件主类的实例。 (例如,如果你在你的主类中使用它,可以使用 `this`) ### 管理乘客 以下是如何使用 `PassengerActions` 接口的一些示例: 请记住,你只能检索和移除使用 addPassenger... 方法设置的乘客。 **例外:** 当使用 getGlobalPassengers 等“全局”方法时。 ```java // 添加单个乘客 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 passengers = passengerActions.getPassengers(targetEntityId); // 移除全局乘客(由所有插件设置的乘客) passengerActions.removeGlobalPassengers(targetEntityId, Set.of(passenger1Id, passenger2Id, ...)); // 移除针对目标实体的所有全局乘客(由所有插件设置的乘客) passengerActions.removeAllGlobalPassengers(targetEntityId); // 获取针对目标实体的所有全局乘客(由所有插件设置的乘客) Set globalPassengers = passengerActions.getGlobalPassengers(targetEntityId); ``` > 注意 > 所有实体都通过其实体 ID(而不是 UUID)进行标识。 ### 监听事件 PassengerAPI 还提供了一些事件,你可以监听并相应地处理: ```java @EventHandler public void onAddPassenger(AddPassengerEvent event) { // 尝试添加这些乘客的插件名称 String pluginName = event.getPluginName(); int targetEntity = event.getTargetEntityID(); Set passengers = event.getPassengerList(); // 对这些属性执行操作 } @EventHandler public void onRemovePassenger(RemovePassengerEvent event) { // 尝试移除这些乘客的插件名称 String pluginName = event.getPluginName(); int targetEntity = event.getTargetEntityID(); Set removedPassengers = event.getPassengerList(); // 对这些属性执行操作 } @EventHandler public void onPassengerPacket(PassengerPacketEvent event) { int targetEntity = event.getTargetEntityID(); Set passengers = event.getPassengerList(); // 应该接收数据包的玩家 (你可以修改这个列表) List receivers = event.getPacketReceivers(); // 对这些属性执行操作 } ``` 不要忘记注册你的事件类 # GitHub 上的贡献欢迎!