Kzeroko KTM2

变身能力与属性数据

变身能力字段、技能元数据、形态使用条件、属性配置与资源重载行为。

更新于 2026/9/30 13 分钟阅读

变身能力选择形态及其动作,属性配置则在指定阶段修改使用者的属性。本页说明可编写字段及重载行为,运行时扩展约定另见关联开发文档。

文件位置

变身能力位于 data/<namespace>/powers/<path>.json,属性配置位于 data/<namespace>/morph_attributes/<path>.json。相对路径决定各自资源 ID。能力还需通过数据包的起源或其他授予机制交给玩家。能力中的 id 选择已注册的技能执行行为,新增标识符不会创建执行逻辑。

保留玩家控制的形态包括本模组的基础 NPC 家族,以及 isekaiexpansion:morph_player_rigs 中的实体类型。此类形态保留玩家操作,并将两个配置的鼠标能力替换为 isekaiexpansion:none。只有第三方人形渲染器支持玩家骨架约定时,才应把它加入该标签。

最小示例

将下列内容放在 data/isekaiorigins/powers/kitsune_active_fox_form.json,可覆盖现有狐狸能力。它使用已注册的执行与能力 ID;仅有此文件不会授予能力。

{
  "type": "isekaiorigins:morphing_skill",
  "id": "isekaiexpansion:kitsune_active_fox_form",
  "meta": {
    "max_level": 1,
    "cooldown": "240",
    "energy": "0"
  },
  "entity_type": "minecraft:fox",
  "primary_ability": "isekaiexpansion:entity_primary",
  "secondary_ability": "isekaiexpansion:kitsune_fox_pounce",
  "transition_ticks": 18
}

独立配置 data/example/morph_attributes/fox_speed.json 为处于激活狐狸形态的玩家添加速度修饰符:

{
  "forms": [
    "minecraft:fox"
  ],
  "phases": [
    "ACTIVE"
  ],
  "modifiers": [
    {
      "attribute": "minecraft:generic.movement_speed",
      "operation": "multiply_total",
      "value": 0.2,
      "scale": {
        "attribute": "isekaiexpansion:dexterity",
        "factor": 0.002,
        "max": 0.1
      }
    }
  ]
}

示例的修饰量为 0.2 + min(0.1, dexterity × 0.002),上限只作用于换算项。此配置会与内置狐狸配置叠加;若要替换,应使用内置配置的资源 ID。

字段

变身能力

字段类型默认值作用
typeidentifier必填使用 isekaiorigins:morphing_skill。
categorystringORIGIN严格使用大写 NONE、LEARNED、ORIGIN、CLASS、PROFESSION 或 ULTIMATE;未知值或大小写不符会失败。
ididentifier必填已注册的执行 ID,与能力文件 ID 不同。新增 JSON ID 不会注册行为。
metaobject必填下表所述的等级序列;必须包含 cooldown 和 energy。
entity_typeidentifier必填激活时目标必须能解析为生物实体;不存在或非生物类型会拒绝变身。
primary_abilityidentifier必填主槽位执行行为,实体专用覆盖可替换它;未知能力 ID 无法解析出动作。
secondary_abilityidentifier必填副槽位执行行为,覆盖规则相同。isekaiexpansion:none 明确拒绝使用。
skin_ididentifier无可选专用纹理选择器。显式皮肤缺失时不会继续查找默认实体覆盖纹理。
transition_ticksint18最小限制为 4,进入和退出分别使用;没有上限钳制。
duration_ticksint0稳定形态的持续时间,单位 tick。0 表示一直持续到玩家主动返回;负值钳制为 0。没有上限钳制。
morph_ableobject无按下方共享规则解析,但变身子类型忽略它。用于普通触发技能或终极技能。
sound_ididentifier无成功触发后的可选声音;无法解析的声音事件跳过。
animation_ididentifier无成功触发后请求的可选玩家动画;解析时不验证动画资源。
effekobject无成功触发后的可选特效,字段见下表。
disablerobject无成功触发后的可选临时动作限制。

变身能力固定为主动侧,不提供可编写的 side 字段。

duration_ticks 为正时,形态变成限时形态,计时方式和护符形态相同。形态完成进入后才开始计时,所以 1200 就是稳定形态下的 1200 tick(60 秒),进入和退出过渡不算在内。时间用完后形态自动返回,同时开始该能力的冷却,和手动返回一样。玩家周围没有站立空间时会继续保持形态,直到有空间为止,并只提示一次。限时形态运行期间,变身面板的进度条会逐渐减少,技能界面也会列出持续时间。

等级元数据

字段类型默认值作用
max_levelint必填1–256,必须为有限整数;拒绝数字字符串。
cooldown字符串序列必填非负整数 tick,最大 2147483647。进入形态时不使用该值:进入会开始固定 60 tick(3 秒)的稳定锁定,技能急速不会缩短它。成功返回或限时形态到期时,开始按技能急速调整后的配置值。
energy字符串序列必填非负整数星界能量消耗,最大 2147483647。只在成功触发时扣除,包括成功返回;创造模式不支付。
<custom_key>字符串序列无由处理器定义。最多 256 个序列,键匹配 [a-z][a-z0-9_]*,最多 64 字符;max_level 保留。

每个序列为斜杠分隔的字符串:可以只有一个有限数值用于全部等级,也可以恰好包含 max_level 个数值。"10/20/30" 有 3 项;空项、非有限值或数量不符均失败。解析数字前会去除首尾空白,查询时将等级限制到支持范围。其他合法键会保留,但只有读取它的处理器才能赋予行为。

核心能力支持以下可选序列:

字段类型默认值作用
pounce_velocitynumber series1.15狐狸扑击水平速度;处理器不限制范围。
pounce_damagenumber series4.0狐狸扑击基础火焰伤害。
pounce_coefficientnumber series0.55狐狸扑击火焰强度系数。
foxfire_multipliernumber series1.45消耗一个附着狐火时的扑击倍率。
secondary_cooldowninteger series取决于处理器狐狸扑击 100、监守者音爆 200、女巫治疗药水 120 tick。
primary_cadenceinteger series18监守者主攻击间隔;运行时间隔最小为 1 tick。
melee_damagenumber series形态攻击伤害,最小为 1覆盖监守者近战伤害;显式值不受处理器范围限制。
sonic_damagenumber series10覆盖监守者音爆伤害。
primary_potion_cooldowninteger series30女巫攻击药水冷却。
native_hold_ticksinteger series30Saints Dragons 技能栏原生动作保持时间;最小为 1。

整数查询遇到小数或超出 int 范围的值时,使用处理器回退值。成功能力的负冷却限制为 0。其他自定义序列在解析时只要求有限值;速度和伤害应选用有实际意义的数值。

使用条件与触发效果

字段类型默认值作用
morph_able.normal_formbooleantrue允许在非变身状态使用。
morph_able.entity_types标识符数组[]精确形态白名单;空数组允许全部已激活形态。重复项合并,不能用标签代替。
effek.ididentifier无特效资源 ID。启用 effek 时应提供;可选默认值不构成可用特效声明。
effek.bindbooleanfalse将特效绑定到触发实体。
effek.to_headbooleanfalse绑定特效时使用头部。
effek.offsetvector(0, 0, 0)传入特效构建器的偏移;此处不限制范围。
effek.scalefloat0直接传给特效构建器的缩放;此序列化器不钳制,具体见特效构建器校验约定。
disabler.duration_ticksint0仅为正值时施加限制;此处没有上限钳制。
disabler.use_itembooleanfalse临时禁止使用物品。
disabler.attackbooleanfalse临时禁止攻击。
disabler.movebooleanfalse临时禁止移动。
disabler.jumpbooleanfalse临时禁止跳跃。

普通 isekaiorigins:triggerable_skill 和 isekaiorigins:ultimate_skill 省略 morph_able 时只允许正常形态。空对象允许正常形态及所有已激活变身;显式 entity_types 列表限制激活形态。进入和退出过程中,普通技能无论此规则如何配置都被阻止。变身子类型始终通过这项使用条件检查,以便所属技能请求返回,但其他检查仍可拒绝请求。稳定锁定期间按下返回会和其他冷却中的能力一样被拒绝,所以最早要在进入后 60 tick(3 秒)才能返回。

声音、动画、特效和动作限制都在执行成功后发生。特效资源及构建器细节见 Effekseer 集成。

属性配置

字段类型默认值作用
formsidentifier / identifier array[]精确目标实体类型;形态或形态标签至少提供一个。非法标识符导致文件失败。
form_tagsidentifier / identifier array[]不带 # 的实体类型标签,与 forms 为或关系。没有匹配时不产生效果。
phasesstring / string array["ACTIVE"]不区分大小写的 NONE、ENTERING、ACTIVE、EXITING,不去除空白。缺失或为空时使用 ACTIVE,未知值失败。NONE 可解析,但运行时在该阶段不应用修饰符。
priorityint0按升序排列,再按配置 ID 排序;应用所有匹配项,并非仅采用最高优先级。
modifiers对象数组[]必须至少有一个修饰符;任一条目错误导致整个文件失败。
modifiers[].attributeidentifier必填目标玩家属性。合法但未注册的 ID,或玩家没有的属性,在应用时跳过。
modifiers[].operationstringaddition不区分大小写,不去除空白。加法:addition / add / add_value;基础乘算:multiply_base / multiply_base_value;总量乘算:multiply_total / multiply / multiply_total_value。未知值失败。
modifiers[].valuedouble0固定贡献;解析器不检查范围或是否有限。
modifiers[].scaleobject无可选属性换算贡献,与 value 相加。显式 null 无效。
scale.attributeidentifier必填源玩家属性。注册项或玩家属性实例缺失时,整个换算贡献为 0,包括偏移。
scale.factordouble1当前源属性值的乘数。
scale.offsetdouble0乘算后、钳制前加上的值。
scale.mindouble−1.7976931348623157e308只限制换算贡献的下界;上下界反转时自动交换。
scale.maxdouble1.7976931348623157e308只限制换算贡献的上界,不限制固定 value;没有显式有限性检查。

最终量为 value + clamp(source_attribute × factor + offset, min, max)。换算读取玩家当前有效属性,包括当前已安装修饰符。计算发生在移除旧变身修饰符之前,因此受其他变身修饰符影响的源属性,可能反馈到下一次刷新。这不是依赖图,也不是持续重算公式。

所有匹配配置都会贡献临时玩家修饰符。稳定修饰符身份由配置 ID 和数组索引生成,因此不同索引下的相同属性条目仍是独立贡献。优先级决定解析顺序,不排除其他配置;玩家不存在的属性会跳过。

验证

属性根必须是对象。选择器接受转换成文本的基本值,或由可转换为文本的条目组成的数组;对象或 null 形状会失败。应明确使用字符串:数字基本值也可能变成看似合法的标识符。非法阶段、操作、必填 ID 或修饰符对象会使整个配置失败。未知字段忽略。失败配置会记录并跳过,随后以全部成功解析项替换注册表,不保留其旧值。

属性配置必须同时具有非空选择器集合和非空修饰符列表。合法但未匹配的形态或标签不产生修饰符。属性数值字段没有显式有限性或游戏范围检查。

能力构造拒绝无效分类或元数据,并要求提供上表标记的必填字段。实体和能力是否可用在稍后解析。变身目标必须是生物,空间必须容纳目标尺寸,且玩家不能正在骑乘。返回要求能容纳站立玩家。执行被拒绝时,不扣除触发消耗,也不施加触发效果。成功返回可能支付与进入相同的能量,不能默认认为返回免费。

实体专用能力覆盖优先于配置 ID。内置监守者和女巫覆盖会选择对应主副动作;能力 JSON 中的 isekaiexpansion:none 无法抑制已安装的实体覆盖。专用变体也可接管形态纹理,绕过通用变身纹理覆盖。

重载

属性配置随服务端数据包重载。成功重载后刷新在线玩家的临时修饰符;阶段变化、加入和重生也会刷新。源属性变化本身不会触发刷新,组件不会每 tick 重算换算值。离开形态会移除已应用修饰符。

能力定义遵循所安装能力加载器的行为。当前变身保存已解析的形态和能力 ID,不能假定编辑能力会改写正在运行的形态。重载后重新进入形态,再检查变化。

纹理属于客户端资源。未提供 skin_id 时,候选路径为 assets/isekaiexpansion/textures/morphs/entities/<entity-namespace>/<entity-path>.png;提供时为 assets/isekaiexpansion/textures/morphs/skins/<skin-namespace>/<skin-path>.png。候选缺失时沿用渲染器正常纹理。修改 PNG 后重载客户端资源;JSON 不定义原生形态变体。

相关页面