MythicMobs 双向集成
PetOwner、lipetExperience、lipet 属性与 skill.power 写法,以及 MCPets 包迁移边界。
LiPet 2.3.0 在原有 mythic-skills 的基础上,向 MythicMobs 提供宠物主人目标、经验机制和宠物属性占位符。宠物可以继续按等级、触发器和冷却调用 MM 技能;MM 技能也可以读取 LiPet 档案和提交经验奖励。
这些名称由 LiPet 在 MythicMobs 中注册,不依赖 PlaceholderAPI。只在安装并启用 MythicMobs 时使用;不使用 MM 的服务器仍可使用原版宠物功能。
主人目标选择器
| 写法 | 用途 |
|---|---|
@LipetOwner |
选择当前施法宠物的在线主人,建议新配置使用此名称 |
@PetOwner |
兼容第三方宠物包;仅在未安装 MCPets 时由 LiPet 注册 |
选择器从技能施法者对应的 LiPet 活动宠物查找主人,不依赖 Bukkit 驯服实体的 owner 字段,因此 MM 生成的宠物也能使用。施法者不是已召唤且归属有效的 LiPet 宠物,或主人不在线时,不选择任何目标。
下面内容放在 MythicMobs 的技能文件中,用于在宠物主人位置显示粒子:
# 示例技能名称;需由对应 MM Mob 或 LiPet mythic-skills 调用。
LiPetOwnerAura:
# MM 技能列表;粒子只表现效果,不改变经验或属性。
Skills:
- effect:particles{p=happy_villager;amount=10;hS=0.5;vS=0.5} @LipetOwner
同服存在 MCPets 时,LiPet 不接管 @PetOwner;MCPets 的同名选择器不保证认识 LiPet 宠物。此时将要交给 LiPet 的技能明确改为 @LipetOwner。
从 MM 技能给予宠物经验
| 机制 | 参数 | 范围 |
|---|---|---|
lipetExperience{amount=N} |
amount 为每次给予的经验 |
十进制正整数 1 至 2147483647 |
petExperience{exp=N} |
MCPets 兼容名称;仅未安装 MCPets 时注册 | 同上 |
经验给予机制选中的目标宠物。给施法宠物自己奖励时必须使用 @self;@LipetOwner 选中的是玩家,不能用来给宠物加经验。目标必须是 LiPet 当前管理的活动宠物。小数、负数、零、超出范围及无效目标不会提交奖励。
# 这是供其他 MM 技能调用的奖励技能;触发频率由服主安排。
LiPetExperienceReward:
# 每次执行给予目标宠物 25 点经验;1..2147483647。
Skills:
- lipetExperience{amount=25} @self
未安装 MCPets 时,兼容包的同一行也可写成 - petExperience{exp=25} @self。与 MCPets 同服时使用 lipetExperience 避免同名机制冲突。
奖励进入 LiPet 原有经验、等级和持久化链,继续受等级上限等成长规则约束;不会另建一套 MM 经验。提交与保存是异步流程,MM 下一行立刻读取 <lipet.level> 时不保证已包含这次奖励。机制被接受也不等于数据库保存已经完成。不要把需要“经验已落库”的交易写成紧接其后的 MM 指令。
是否在击杀、交互或定时技能中调用由服主决定;如果同一击杀已经由 LiPet 奖励,再额外调用该机制就会重复奖励。该机制不会自动替所有第三方技能增加经验。
读取施法宠物属性
以下占位符读取 MM 施法者 caster 对应的 LiPet 宠物,不会因为 @target 或 @LipetOwner 改变而切换档案。它们使用 <lipet.…>,与 PlaceholderAPI 的 %lipet_…% 是两条不同的接口。
| 占位符 | 返回内容 |
|---|---|
<lipet.level> |
当前宠物等级 |
<lipet.damage> |
LiPet 计算的宠物攻击伤害数值;不是倍率,也不是本次命中后的最终扣血 |
<lipet.max_health> |
LiPet 计算的宠物最大生命值;不是当前剩余生命 |
<lipet.strength> |
已分配力量点数 |
<lipet.defense> |
已分配防御点数;不是减伤百分比 |
<lipet.agility> |
已分配敏捷点数;不是移动速度 |
<lipet.vitality> |
已分配体质点数;不是生命值 |
<lipet.quality> |
存档中的稳定品质 ID,例如 common;不是带颜色的显示名 |
damage 与 max_health 使用 LiPet 的 PetTraitStats 计算结果,再加上已学习技能书提供的对应被动加成,包含该计算链中的等级成长、随机成长和性格等效果;不会额外读取临时药水、装备或其他插件直接修改的实体 attribute。它们是 LiPet 的计算属性,不是任何来源伤害都必须采用的最终值。
施法者不是有效 LiPet 活动宠物,宠物已召回或死亡,或其类型配置不存在时,数值占位符返回 0,quality 返回空字符串。只有归属仍有效的活动宠物才会返回对应档案值。
在 MM 的技能文件中按伤害属性计算技能数值:
# 示例使用当前宠物的 LiPet 伤害数值;目标与触发时机由 MM 配置决定。
LiPetAttributeStrike:
# a 为伤害表达式;1.5 是本例技能倍率,可按平衡需求调整为正数。
# poweraffectsdamage 为布尔值;false 避免 MM 再乘 skill.power,使本例只按属性乘 1.5。
Skills:
- damage{a="<lipet.damage> * 1.5";poweraffectsdamage=false} @target
实际扣血还受 MM 的机制选项、目标护甲、事件监听器和区域规则影响。LiPet 不替第三方 MM 技能重写所有伤害规则,也不会通过占位符强制绕过保护。
原有 power 与等级技能
mythic-skills 的调用、等级解锁、trigger、概率、冷却和 power 计算保持原行为。最终值由 MM 原生 <skill.power> 读取:
最终 power = power + max(0, 宠物等级 - unlock-level) × power-per-level
对应 LiPet 类型下的配置示例(合并到 types.<类型ID> 内,保留其他节点):
# 该宠物调用的 MM 技能列表;技能节点 ID 在当前宠物类型内唯一。
mythic-skills:
level-10-strike:
# 是否启用;true 开启,false 保留配置但不调用。
enabled: true
# 已在 MM Skills 中定义的技能名称,大小写一致,长度 1..128。
skill: "LiPetPowerStrike"
# 触发方式;本例宠物攻击时,其他可用值见 Wiki。
trigger: "PET_ATTACK"
# 解锁等级,1..当前类型 maximum-level。
unlock-level: 10
# 单次触发概率,必须大于 0 且不超过 1。
chance: 1.0
# 独立冷却秒数,0..3600;PASSIVE/INTERVAL 至少 0.5。
cooldown-seconds: 8.0
# 解锁时的基础 power,必须大于 0;MM 用 <skill.power> 读取最终值。
power: 1.0
# 每超过解锁等级一级增加的 power,至少 0;最高等级最终值不得超过 1000。
power-per-level: 0.05
MM 技能示例:
# 本例只沿用既有 power;14 级时 power 为 1.2。
LiPetPowerStrike:
# 6 为技能基础伤害,可按服务器平衡调整为正数。
# poweraffectsdamage 为布尔值;显式乘 <skill.power> 时设 false,避免默认流程再乘一次。
Skills:
- damage{a="6 * <skill.power>";poweraffectsdamage=false} @target
MM 的 damage 默认 poweraffectsdamage=true,会把 a 的计算结果再乘本次技能的 power。因此显式写 6 * <skill.power> 时要设 poweraffectsdamage=false;否则相当于 6 × power × power。本例 14 级、power 为 1.2 时,关闭重复乘算后的基础结果是 7.2。
如果直接沿用 MM 默认的一次 power 缩放,也可以写 - damage{a=6} @target,无需在 a 中再次引用 <skill.power>。LiPet 传入 power 的计算与调用没有改变。
<lipet.damage> 已表示 LiPet 算出的伤害数值。上一个属性伤害示例设置 poweraffectsdamage=false,确保按“宠物伤害 × 1.5”计算;保留默认 true 或另外显式乘 <skill.power> 时,两套成长就会共同生效。按设计选择或明确组合,不要误把 damage 当成 damagemodifier。
第三方 MCPets 包迁移边界
LiPet 已支持把含 Id、MythicMob 等核心字段的 MCPets 单宠物 YML 放入 plugins/LiPet/宠物/ 子目录,在内存中转换读取,不改写原文件。MM Mob、Skills、模型蓝图和客户端资源包仍需安装到各自插件的正确位置;完整支持字段见 Wiki 的 MCPets 说明。
本次补齐主人目标、宠物经验和属性读取三类接口,能减少技能重写。不能据此承诺任意 MCPets 包零改写迁移:
- 未安装 MCPets 时可兼容
@PetOwner与petExperience{exp=N};同服存在 MCPets 时使用 LiPet 专名。 <pet.damagemodifier>是原插件的伤害倍率概念,不能等价替换成完整伤害数值;LiPet 不注册这一误导别名。按包的公式重新核对,以<lipet.damage>或原有<skill.power>表达。- 依赖 MCPets 的其他机制、条件、Signals、Skins、权限或行为,需分别转换或继续由其原插件执行。本次没有实现这些未支持的 MCPets 功能。
- MM 自身事件启动的技能与 LiPet
mythic-skills的调用来源不同;LiPet 的主动攻击开关不等于禁用第三方 Mob 配置里的所有定时或事件技能。
安装与修改
升级到 2.3.0 时正常停服并备份配置、数据库和恢复台账,只保留一个 LiPet-2.3.0.jar,正常启动后确认 Enabling LiPet v2.3.0。不要覆盖现有宠物文件或数据库配置。
修改 LiPet 的 mythic-skills 后执行 /lipet reload;修改 MM Mob 或 Skills 后使用 MythicMobs 自身的重载流程。安装、卸载 MCPets 或更换 Jar 后正常重启,让自定义名称按当前前置组合重新注册。只执行 LiPet 重载不会替换 MM 已读取的技能定义。
本轮实际验证范围、依赖版本和成品哈希见 2.3.0 更新说明。