CarryManager API
CarryManagerAPI 是 CarryYou 用于实现抓举的,通过 CarryyouAPI.getCarryManager() 拿到。
先判空!
如果 CarryYou 没有安装(或者版本太老),getCarryManager() 会返回 null,调用前记得判空。
抱起和丢出
carry - 抱起实体
java
boolean carry(Entity carrier, Entity target);让 carrier 抱起 target,成功返回 true。
以下情况会返回 false:
carrier已经抱着别的东西了carrier自己正被别人抱着(身上有乘客不行)- PlayerCarryEvent 被别的插件取消了
- 骑乘失败
drop - 丢出实体
java
boolean drop(Entity target, double power, boolean callEvent);把被抱着的 target 丢出去。
power:丢出的力度callEvent:是否触发 PlayerDropEvent,填false则静默丢出(玩家挣脱时插件内部就是这么干的)
如果 target 没有被抱、抱它的实体已经没了、或者事件被取消,会返回 false。
查询状态
通过 UUID 互相查询
java
UUID getTargetByCarrier(UUID carrierUUID);
UUID getCarrierByTarget(UUID targetUUID);getTargetByCarrier:通过抱人者的 UUID 拿到被抱者的 UUID,没有抱着东西则返回nullgetCarrierByTarget:通过被抱者的 UUID 拿到抱人者的 UUID,没被抱则返回null
直接拿 Entity 对象
java
Entity getTargetEntityByCarrier(UUID carrierUUID);
Entity getCarrierEntityByTarget(UUID targetUUID);和上面两个一样,只不过直接帮你把 UUID 转成了 Entity 对象,查不到返回 null。
是否正在抱 / 被抱
java
boolean isCarrying(UUID carrierUUID);
boolean isCarried(UUID targetUUID);isCarrying:这个实体是否正抱着东西isCarried:这个实体是否正被别人抱着
禁止被抱
java
void setCarryDisabled(UUID uuid, boolean disabled);
boolean isCarryDisabled(UUID uuid);setCarryDisabled:动态控制某个实体(包括玩家)是否允许被抱起isCarryDisabled:查询该实体是否被禁止抱起(默认false)
底层方法(你最好知道你在干什么O_o)
java
void put(UUID carrierUUID, UUID targetUUID); // 手动登记一对抱举关系
void remove(UUID carrierUUID, UUID targetUUID); // 手动移除一对抱举关系
void cleanup(); // 清空所有抱举关系(插件关闭时会调用)小心
put() / remove() 只操作内部的映射表,不会真的改变游戏里的骑乘状态,也不会触发任何事件。日常开发请使用 carry() / drop(),除非你非常清楚自己在做什么。