Skip to content

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,没有抱着东西则返回 null
  • getCarrierByTarget:通过被抱者的 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(),除非你非常清楚自己在做什么。