储物与灵器
本模组里有三样东西都长得像「容器」、或者都挂在物品上,它们之间没有任何关系:
- 储物技能(
mxt:storage)挂在物品上,按一下打开一只箱子。箱子的内容存在物品堆的组件里,玩家在打开的窗口里点进点出。→ 子教程:储物 - 灵力容器是物品
mxt:spirit_vessel:它拿着某个数值的一份便携副本,按住右键就把量倒进你身上的账户(往里灌要摆到展示架上、或者对着它发射灵力)。没有窗口、没有菜单、没有技能。→ 本篇 - 飞行法器是同一件物品的另一种声明:法器声明"我能飞",一条由功法这类常驻来源授予的术负责按一下。→ 子教程:飞行法器
这篇只讲灵力容器——它不需要任何数据包定义。
你要搭建什么
灵力容器是本体物品,没有定义文件:用命令发一个就够。另外两样各有自己的定义要写,去它们那两篇子教程。
第 1 步 —— 灵力容器
物品 mxt:spirit_vessel 拿着一份浮点数值的便携副本,由两件组件说清它是什么:
| 组件 | 作用 |
|---|---|
mxt:resource_capacity | 存储上限:一张裸映射,资源 → 这个容器装得下多少。没写的资源上限就是 0,也就是存不进。 |
mxt:resource_container | 存储量:一张裸映射,资源 → 现在装着多少。 |
- 按住右键把它倒进你身上的数值账户:每 tick 每种资源各 1 单位,松开就停,倒空也停。没有窗口、没有菜单、没有技能。
- 没有模式、没有切换:潜行右键什么都不做;容器空着时点一下只会告诉你"容器内没有可用灵力"。
- 上限是每种资源各自一份:一个容器可以同时装好几种资源,每种自己一份容量;不写
mxt:resource_capacity的容器什么都收不进(数值本身没有天然上限,容量必须有人写下来)。 - 上限没有配置项,只由组件(命令 / 数据包 / 内容包)给。
两张映射都是裸映射——没有 values 外层:
json
{ "example:qi": 25.0 }- 键是
resource定义的 id,值是数量(写在mxt:resource_capacity里就是上限)。 - 写
0会把那个键删掉(上限那张表里0与不写是一回事:没有容量)。 - 坏条目只记一行日志然后被丢弃:拼错一个 id 不会报错,你拿到的是一个空表。
发一个装得下 1000 点、已经装了 25 点的容器:
text
/give @s mxt:spirit_vessel[mxt:resource_capacity={"example:qi":1000.0},mxt:resource_container={"example:qi":25.0}]resource 定义本身见 resource(资源),mxt:spirit_vessel 与其它统一功能载体见通用物品。
第 2 步 —— 往容器里灌
容器自己不会收,它只往外倒;往里灌有两处,都灌的是灵气——而灵气是按某个 resource 计量的(aura 定义里的 resource),所以它落进容器就是那个资源的量,收多少由那个资源的上限决定,满了就灌不进去:
- 展示架:把容器摆上去,挨一记灵力射线(轮盘里选中的、
burst_amount大于 0 的灵气)即可。 - 对着它发射灵力:主手拿着容器时,发射灵力不会射出射线,那次灵力直接充进容器(付出同样的代价),action bar 报一行「灌注灵气 已存 / 上限」。
在游戏里验证
发一个带上限的容器:按住右键不放,看它一 tick 一单位地倒进账户、账户满了或容器空了就停。上限写得比账户余额小的时候,先倒满账户、剩下的留在容器里。整个过程没有窗口,也不消耗任何技能。
再验证灌进去:把容器摆到展示架上挨一记射线,容器里的量会按射线增长、展示架上显示的那份也跟着变;或者主手拿着它发射一次灵力,看它涨量并报出一行进度(而不是飞出一道射线)。
常见错误
| 现象 | 原因 |
|---|---|
mxt:resource_container 按 { "values": { … } } 写,容器是空的 | 外壳不对。解不出条目、只记一行日志,得到空容器。不报错。 |
容器里写了一个拼错的 resource id | 坏条目被丢弃并记一行日志,其余键照常。不报错。 |
| 按住右键没反应,只提示"容器内没有可用灵力" | 容器里没有东西可倒;灌进去请看下一条。 |
| 展示架/发射灵力灌不进容器 | 没写 mxt:resource_capacity,或那张表里没有这个资源:这个资源的上限是 0;也可能已经到上限了。 |
接下来
- 储物 —— 子教程:一条挂在物品上的储物技能,格数怎么算、箱子存在哪、怎么预填。
- 飞行法器 —— 子教程:一件会飞的物品,载具、术与两笔燃料账。
- 通用物品 ——
mxt:spirit_vessel与mxt:resource_container的组件写法。 - resource(资源) —— 灵力容器里那些键引用的是哪张注册表。
- artifact(法器) —— 两篇子教程都要用到的那份定义。
- 轮盘、资源条与灵气 HUD —— 按一下会发生什么,以及轮盘上的格子。