定义符箓
符箓是把技能装在物品上:一张符箓铭刻若干能力,灌满载体的灵气存量,它就把这些能力替你放出去。定义只写「铭刻了什么、装得下多少、一次要付多少」;至于「灌满就自动放」还是「存着等你动手」,是载体自己(物品堆上)的模式,不是定义的属性。
手工铭刻还没有入口
符笔 mxt:talisman_brush 现在只管自己的颜料存量(蘸料,见通用物品);"拿着符笔右键把技能刻上去"这条路还没接——写符要么在画符工作站里按符方誊写(见编写画符配方),要么直接写进物品:/talisman give …、物品组件语法(/give 的 components)、创造模式检索里生成的单条铭刻物品。
所以这一篇讲的是定义 → 发放 → 灌注 → 发动这条链(第 3 步就是"交到玩家手里"的那几条路);工作站里照着符形誊写的那条手工路,见编写画符配方,字段表仍在 talisman_drawing(画符配方)。
你要搭建什么
| 文件 | 用途 |
|---|---|
data/example/mxt/aura/qi.json | (已有) 符箓的容量与灵气消耗只能引用具体的灵气定义。 |
data/example/mxt/ability/spark.json | 要被铭刻的技能:激发时跑自己的动作字段。 |
data/example/mxt/talisman/flame_sigil.json | 符箓定义:铭刻哪些技能、装得下多少灵气、一次发动扣多少。 |
第 1 步 —— 一个能被承载的技能
// data/example/mxt/ability/spark.json
{
"type": "mxt:active",
"cooldown": 60,
"entity_action": {
"type": "mxt:apply_effect",
"effect": "minecraft:fire_resistance",
"duration_ticks": 120
}
}四个动作字段写在技能自己的顶层(见 技能类型 · 四个动作字段),所以"激发时发生什么"就写在同一条 example:spark 上——一条技能就够,不需要再拆一条 mxt:interval 出来。这里那句 "effect": "minecraft:fire_resistance" 是 mxt:apply_effect 行为自己的参数(要施加的状态效果),与技能引用的 effect 无关。
**只有立即生效的能力能被符箓承载。**需要吟唱(cast_time > 0)或持续引导(mxt:channelled)的能力会被拒绝,因为唱法与引导的收尾靠"持有者已授予的能力"列表推进,而载体从不授予任何东西。被拒绝时载体不消耗、灵气也不清空,可以换一张符或换一个能力。
第 2 步 —— 符箓定义
// data/example/mxt/talisman/flame_sigil.json
{
"abilities": ["example:spark"],
"capacity": 5,
"costs": [{"type": "mxt:aura", "aura": "example:qi", "amount": 12}],
"durability": 5,
"consume": 1
}| 字段 | 类型 | 默认 | 说明 |
|---|---|---|---|
abilities | HolderOrTag<ability>[] | [] | 铭刻的能力:单个 ID、ID 数组或 #标签,写法与 technique.granted_abilities 一致。 |
capacity | double | 1 | 灌注容量倍率(≥ 1):容量 = 一次发动的灵气用量 × 倍率,差不多就是"这符能连打几次"。实际倍率还要跟载体剩余使用次数取小(次数由耐久算出:没声明耐久的算 1 次,带耐久的至少 1 次)。 |
durability | int | 0 | 给载体多少点耐久(同一张载体上的条目相加);0 或省略=不靠耐久记账,仍是一用即焚。 |
consume | int | 1 | 每次激发扣几点耐久(≥ 1);只在 durability > 0 时有意义。 |
condition | 实体条件 | mxt:always | 这个持有者现在能不能用这张符,与价格无关;对持有者判定,排在 costs 之前,不满足就拒绝激发且什么都没动。 |
costs | Cost[] | [] | 一次发动的代价:mxt:aura 条目从载体自己的存量里扣,其余向持有者收;付不出就拒绝激发。 |
三条要记住的语义:
- 倍率只对带耐久的符有意义:没声明耐久的载体打一次就烧掉,剩余次数算 1,倍率再大也只会按 1 次算——想连打就得同时写
durability/consume。 - 灵气条目按空公式上下文求值:客户端要为姿势算出同一个数,所以能不能写取决于"脱开持有者也成立"。
"realm_rank * 4"这类只在有人时才有值的写法会求出0,被当作这条不算;一条灵气条目都不剩的符等同于免费符。 - 容量与单次用量是两个字段:
capacity决定载体装得下几次(灌满就是达到它),costs里的灵气条目决定每次发动扣多少。例子给的 12 × 5 意思是灌满一次能连打五次;只想"刚好一次"就把倍率留空(缺省1)。想让它耐用就写durability/consume(见第 4 步的「耐久」),想按代价卡门槛就写costs、想按条件卡门槛(境界、天气、手上拿着什么……)就写condition,想分档就写quality——四者的完整语义都在符箓定义。
第 3 步 —— 将符箓交到玩家手中
/talisman blank 给一张空白载体
/talisman give example:flame_sigil 给一张铭刻好、未灌注的载体
/talisman give example:flame_sigil count 3 给三张
/talisman give example:flame_sigil charged 给一张并直接灌满——下次点按即发动
/talisman give example:flame_sigil stored 以 store 模式铭刻(只积累,等你动手)整棵 /talisman 子树需要 gamemaster 权限;顶层别名 /talisman 受服务端配置「命令别名 → /talisman」控制(默认开启),关掉之后 /mxt talisman 仍然完整。charged 与 stored 不能组合,且 charged 只能写在 count 之后。
不想用命令时,直接写物品组件也行——载体上存的是具体条目列表加一个模式:
give @s mxt:talisman[mxt:talisman={talisman:"example:flame_sigil",mode:"fire"}]mode 缺省就是 "fire";空列表等于刚做出来的空白载体。灌注进度另存在 mxt:spirit_storage(与灵石共用同一个存储组件)。
第 4 步 —— 灌注与发动
灌注:主手持有载体,按住右键不放(与灵石灌注同一套手势:BLOCK 姿势、每 4 tick 一次提示音、action bar 显示「已存 / 容量」)。每 tick 灌 1 单位、1 单位收 1 点自身灵气,所以一次发动的 12 点要按满 12 tick、容量 60 要按满 60 tick;一次手势最多 200 tick。灌注期间不消耗物品,只有发动时才扣掉一次代价(没声明耐久的载体是消耗一件本体,声明了的是扣耐久);灵气则是在灌注时就按 1:1 扣掉的。
发动由载体模式决定,前提都是存量够付清一次发动的灵气条目(不够时右键会变成灌注):
| 模式 | 行为 |
|---|---|
fire(默认) | 灌满那一刻自动发动。 |
store | 只积累,不自动发动;右键才发动。 |
潜行 + 右键切换模式(会有一句 action bar 提示,tooltip 里也写着当前模式)。一条特例:store 且已经灌满时,潜行使用不切换——它直接发动并消耗那张符(存着的灵气就是拿来花的)。
发动时铭刻的能力逐个走普通的能力使用流程:能力自己的条件、冷却、次数与消耗全部照旧,唯一被替换掉的是「该能力已授予你」这一条——符箓自己就是授权的来源。所以带一张符就能放你不会的法术,但符箓不是绕过这些门的后门。只有至少一道能力真的发动成功才扣掉这一次的灵气(并消耗载体或扣耐久);全部被拒时载体和灵气都还在。容量够打好几次时,只有这一次的那份被扣掉,剩下的留给下一次。
手持发动有冷却,由服务端配置「符箓 → 使用冷却」控制(单位 tick,范围 0..72000,默认 20)——不在数据包里;想连点几次就把它调小或设成 0。它的边界值得记清:
- 一次「尝试」就进冷却:能力因为自己的冷却或消耗付不起而被拒,也算尝试(那次点击确实是发动)。
- 空载体、存量不够一次发动这两种点击不算尝试,不花冷却——它们本来只是给玩家一句说明,立刻就能改。
- 因为模组的载体都是同一个物品
mxt:talisman,这份冷却是按玩家、按物品记的:手上另外几张符在窗口内也一起按不动。
第 5 步 —— 展示架:不手持也能发动
把载体放进展示架(手持右键方块放入,放入不发动),再用灵力射线(默认 V)对准它灌注——灌满那一刻它就地发动。
展示架那条路和手持是两套规则:
| 手持 | 展示架 | |
|---|---|---|
| 使用冷却 | 读,也记 | 完全不看,也不记 |
| 消耗载体 | 消耗一件,创造模式不消耗 | 永远消耗,与填料的人是不是创造模式无关 |
写了 durability 的符两条路都改成扣耐久(上限落在原版组件上,所以有耐久条、也能被原版的修复与 mxt:durability / mxt:damage_item 读到):每次激发扣 consume 点,扣到或越过上限那一次把那张载体销毁(这一次的灵气照扣,只有没花掉的存量按"当初灌进去的价钱"退回给行为者)。三个数按铭刻在同一张载体上的条目相加——一张 10 点每次 1、另一张 5 点每次 1,写在一起就是 15 点、每次 2;没声明耐久的条目跟着发动但不出账。上限由框架写入:/talisman give 给出的载体在拿到手时就有耐久条,自己用组件补丁造的载体则在第一次激发时补上;内容包自己写进 stack 的 minecraft:max_damage 优先于定义的合计值(组件只改上限,"扣不扣"仍由定义决定)。耐久只属于单张载体:带耐久的载体不叠放,/talisman give count 给的是多份单张。创造模式那条豁免照旧(手上不扣耐久,展示架上的照扣)。 | 行为者 | 持有者 | 填料的人(出账、被记录、为其能力作答) | | 位置 | 行为者自己 | 展示架中心 |
位置以 block_x/block_y/block_z 进入公式上下文,并作为这次激发的原点交给位置类行为(spawn_projectile、spawn_particles、explode、mxt:area 的方盒中心……);投射物仍按行为者的朝向发射——位置是"从哪里发出",朝向是"谁在瞄"。架上灵气取不回来(展示架的取出是空操作),要拿回物品就空手右键或破坏方块。
在游戏里验证
数据包注册表在世界加载时读取,所以先退回标题界面重开世界,然后:
/mxt registries validate
/talisman give example:flame_sigil chargedvalidate无 Codec 错误。- 手上出现一张「符箓」:tooltip 显示当前模式与「已铭刻符箓」,
charged给的那张还写着「灵气充足,右键激发」。 - 右键发动:一道
example:spark被放出去(获得 120 tick 抗火),载体扣 1 点耐久,这一次的灵气从存储组件里扣掉(例子容量 60、每次 12,还能再打四次)。 - 再要一张不加
charged的,按住右键灌注:action bar 显示已存 / 容量,每 4 tick 一声提示音,60 tick 后灌满自动发动(例子的容量是 5 × 12 = 60)。 - 试
stored:灌满只提示「已存储」,随后右键才发动;潜行右键能在两种模式之间切换。 - 试冷却:连点两张符,第二张会提示「符箓尚在冷却」,窗口内长按也不会把灵气灌进去。
- 试展示架:放一个展示架、把符放进去(不发动),用
V瞄准它灌注——灌满即就地发动。
常见错误
| 现象 | 原因 |
|---|---|
| 右键只提示「未铭刻任何道法」 | 载体是空的(/talisman blank 给的就是这种);这种点击不算一次尝试,也不进冷却。 |
| 右键提示「灵气不足以激发」 | 存量不够付清一次发动的灵气条目;先按住右键灌注,或用 /talisman give … charged。 |
| 右键提示「不满足发动条件」 | 铭刻定义的 condition 对这个持有者不成立(境界不够、天气不对……)。它是在 costs 之前判的,所以账上一点没动;条件成立后同一张符照常发动。 |
| 提示「该道法已被禁用」 | 铭刻的那条技能定义不在当前包里(文件被删,或被 neoforge:conditions 挡掉);符箓不绕过这一点。 |
| 提示「灵根与该道法属性不合」 | 能力的 element_affinity 与施法者灵根不匹配——符箓也不绕过它。 |
| 提示「需要吟唱或持续引导,符箓无法承载」 | cast_time > 0 或 mxt:channelled 的能力不能被承载。 |
| 灌不满 / 按了没反应 | 灵气条目在空上下文里算出了 0(例如用了 realm_rank),它不参与灌注;或者手上灵气不够(会提示「灵气不足」)。 |
| 组件写法被拒绝 | talisman 只收具体 ID;写 #标签 只有 abilities 允许。 |
| 发动成功但灵气没了 | 这次发动的那份被扣掉了;容量只够一次时组件随之清空,容量够几次时剩下的会留着。 |
| 打不了几次就没了 | 没写 capacity(缺省 1 次)或载体没有耐久(剩余次数算 1);把倍率写大,再配 durability / consume,就能一次灌注连打多次。 |
接下来
- talisman(符箓) —— 完整字段表与灌注/发动的全部规则。
- 通用物品 —— 符箓、符笔、展示架这些物品在游戏里怎么用。
- item_aura(物品灵气) —— 灌注与灵石共用的一套存储。
- 定义技能 —— 被铭刻的那些能力怎么写。
- 编写画符配方 —— 给画符工作站写一张符方:符形怎么画、完成度判什么、符纸与颜料从哪来。