跳到主要内容

开发者 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 或指令,插件会负责存档与跨服同步。