跳到主要内容

MxtSpiritRoots:灵根

灵根是身体修炼身份的元素那一半:持有它就绑定了一个或多个元素(elements 是列表)、改变这些元素灵气的修炼速度,并缩放亲和其中任一元素的技能。元素无关的那一半是 MxtPhysiques。授予与移除都走权威服务,因此 conflicting_elements 冲突判定与"授予了哪些技能"照常处理。

方法​

方法参数返回值说明
list(entity)EntityList<String>该实体持有的灵根 ID,按 ID 排序。关闭的灵根、定义已不在当前包里的灵根仍会列出——它确实还持有。
active(entity)EntityList<String>现在生效的灵根:关掉的都不算。
has(entity, root)Entity、灵根 IDboolean是否持有(与 mxt:has_spirit_root 同义:关闭也算持有)。
enabled(entity, root)Entity、灵根 IDboolean该灵根是否处于开启状态;不持有则为 false。
grant(entity, root)LivingEntity、灵根 ID{changed, failure}走权威服务授予,conflicting_elements 与授予的能力都照常处理。
remove(entity, root)LivingEntity、灵根 IDboolean放弃该灵根及其元素与一切授予;本来没持有则为 false。
setEnabled(entity, root, enabled)LivingEntity、灵根 ID、boolean{changed, failure}「关闭但不失去」:状态真的变了并重算了授予才返回 changed: true,没持有则 failure: "NOT_HELD"。

灵根与体质共用同一套 failure 词表:DISABLED(注册表里没有这个 id,含被 neoforge:conditions 挡掉的定义)、ALREADY_HELD、CONDITIONS(体质 holder_condition 不满足)、EXCLUSIVE_CONFLICT、ELEMENT_CONFLICT(灵根 conflicting_elements)、NOT_HELD、SERVER_ONLY(在客户端调用)。四个读方法两侧都能用(spirit_identity 附件是同步的,物品悬浮提示问"你是不是火灵根"正是这个用途),四个改变状态的方法是服务端操作。

// kubejs/server_scripts/mxt_identity.js
// 洗练:把一条灵根换成另一条,并顺手把新体质打开。
const result = MxtSpiritRoots.grant(player, 'mxt_test:qingxiao_fire_root')
if (result.changed) {
MxtSpiritRoots.remove(player, 'mxt_test:water_root')
MxtPhysiques.setEnabled(player, 'mxt_test:blazing_body', true)
} else {
console.warn(`grant refused: ${result.failure}`)
}
// "他是不是正在火灵根上" —— 关闭的灵根仍然持有,所以要问 active 而不是 has。
const active = MxtSpiritRoots.active(player)

相关​