开发者 API
套件:dev.cloudplugins.pet.api。在你的 plugin.yml 加上 softdepend: [CloudPet](或 depend),把云宠物的 jar 加进编译依赖(compileOnly)即可。所有方法请在主线程调用。
CloudPetAPI
| 方法 | 返回 | 说明 |
|---|---|---|
CloudPetAPI.isPet(Entity e) | boolean | 这个实体是不是某人的宠物(身体或名牌) |
CloudPetAPI.ownerOf(Entity e) | Player | 宠物的主人;不是宠物返回 null |
CloudPetAPI.activePets(Player p) | List<Entity> | 玩家召唤中的宠物身体 |
CloudPetAPI.pets(Player p) | List<PetData> | 玩家拥有的宠物(数据还没读完时是空的) |
CloudPetAPI.summon(Player p, UUID pet) | String | 召唤;返回 null = 成功,否则是 messages.yml 的消息键(例如 summon.fainted) |
CloudPetAPI.despawnAll(Player p) | void | 收回玩家召唤中的全部宠物 |
CloudPetAPI.addExp(Player p, UUID pet, double amount) | void | 给玩家的某只宠物加经验(不乘倍率) |
UUID pet 是宠物编号(/cp admin list <玩家> 显示的完整编号)。
import dev.cloudplugins.pet.api.CloudPetAPI;
@EventHandler
public void onDamage(EntityDamageByEntityEvent e) {
if (CloudPetAPI.isPet(e.getEntity())) {
Player owner = CloudPetAPI.ownerOf(e.getEntity());
// ……
}
}
事件
每个事件都有 getOwner()(主人,PetGiveEvent 是 UUID、PetTameEvent 用 getPlayer())与 getPet()(这只宠物的数据)。标「可取消」的事件可以 setCancelled(true) 挡下。
| 事件 | 什么时候 | 可取消 | 其他 getter / setter |
|---|---|---|---|
PetSummonEvent | 宠物准备召唤(含上线、换世界后自动叫回) | ✔ | getType()、isAuto()(true = 自动叫回) |
PetSpawnedEvent | 宠物身体已经生成 | getEntity() | |
PetDespawnEvent | 宠物被收回 | getReason():player 玩家收回、faint 昏倒、world 换世界或 /cp admin reload 重新生成、evolve 进化、other 其他(下线、死亡、禁用世界……) | |
PetDamagedEvent | 宠物受到伤害(已经通过保护规则、扣除减伤) | ✔ | getDamager()(真正的攻击者:射手、药水的主人……)、getDamage() / setDamage(double) |
PetFaintEvent | 宠物血量将要归零(昏倒)之前 | ✔ | getKiller();取消 = 宠物留下 1 点血 |
PetAttackEvent | 宠物出手攻击 | ✔ | getTarget()、getDamage() / setDamage(double) |
PetExpEvent | 宠物获得经验(已乘倍率) | ✔ | getAmount() / setAmount(double) |
PetLevelUpEvent | 宠物升级 | getLevel() | |
PetEvolveEvent | 宠物进化 | ✔ | getFrom()、getTo()(宠物编号) |
PetFeedEvent | 主人喂食 | ✔ | getFood()(foods.yml 的键) |
PetRenameEvent | 改名 | ✔ | getName() / setName(String)(空字符串 = 恢复原名) |
PetMountEvent | 主人骑上宠物 | ✔ | |
PetInteractEvent | 主人右键自己的宠物 | ✔ | isSneaking() |
PetSignalEvent | 对宠物送出 MythicMobs 信号 | ✔ | getSignal() / setSignal(String) |
PetGiveEvent | 玩家得到一只宠物(给予、购买、孵化、解锁、驯服……) | getSource();getOwner() 返回 UUID | |
PetTameEvent | 野生宠物驯服进度增加 | ✔ | getPlayer()、getWild()、getPetType()、getProgress() / setProgress(double) |
@EventHandler
public void onLevel(PetLevelUpEvent e) {
if (e.getLevel() == 30) {
Bukkit.broadcastMessage(e.getOwner().getName() + " 的宠物满级了!");
}
}
@EventHandler
public void onAttack(PetAttackEvent e) {
if (e.getTarget() instanceof Player) e.setCancelled(true); // 这台子服宠物不打玩家
}
宠物数据对象
getPet() 与 CloudPetAPI.pets() 返回的 dev.cloudplugins.pet.model.PetData 可以直接读:id(宠物编号)、owner、type(宠物编号,对应 pets/ 的文件)、name(空 = 原名)、skin、level、exp、health、fainted(System.currentTimeMillis())、skins(已解锁皮肤)。请只读取,要改等级、经验、名字请用 CloudPetAPI 或指令,插件会负责存档与跨服同步。