
# 为什么使用 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 上的贡献欢迎!