heat_source(供热方块)
一份 heat_source 给一类方块定下两个数:它能让丹炉烧到多热(max_temperature)和每 tick 升多少度(heating_per_tick)。温度怎么推进、什么时候回落由服务端决定,定义只回答这两个数。
文件位置
heat_source 是一张数据包注册表,一份文件就是一条定义:
data/<namespace>/mxt/heat_source/<条目>.json条目 id 是 <namespace>:<路径>——data/example/mxt/heat_source/fire.json 就是 example:fire。本体不为这张注册表提供条目;内容包写自己的命名空间,不要塞进 mxt。
顶层直接写下面字段表里的键。没有 values 包一层,一份文件只描述一条定义;要在别的包里盖过同一个方块,靠 priority 分先后,没有 replace 这类开关。文件级 neoforge:conditions 是生效的:条件不成立时这条定义根本不进注册表。
这张注册表和别的数据包注册表一样在世界加载时读取,/reload 不会重读。/mxt registries list 与 /mxt registries validate 都包含它;/picker mxt:heat_source 列出这些定义认领的方块。
用途:一类方块的供热数值。
字段
| 字段 | 类型 | 默认 | 说明 |
|---|---|---|---|
blocks | 方块条目 | 必填、不能为空 | 这条定义认领哪些方块:单个方块 id、#方块标签,或它们的数组。 |
max_temperature | Double | 必填 | 这个方块能给炉子的最高温度,有限且大于 0。 |
heating_per_tick | Double | 必填 | 每一 tick 的升温量,有限且大于 0。 |
priority | Integer | 0 | 同一个方块被多条定义命中时的先后:数值大者胜;同分回落到注册表顺序。 |
data/example/mxt/heat_source/fire.json:
{
"blocks": ["#example:heat/fire"],
"max_temperature": 150,
"heating_per_tick": 40
}同一个方块被多条定义同时命中时只取一条:先比 priority,数值大的赢;同分才回落到注册表顺序,不把几个数值相加。
供热格在哪
供热格是丹炉底层正中央那一格(本地 index 4,也就是上层炉体中心的正下方)。那一格在结构里不被校验、也不被认领:底层只有四个角算结构,那一格放什么、放不放、区块加没加载都不影响成型。
只有那一格里的方块能供上热,读的就是这张注册表:放的东西没有被任何定义认领、或者那一格空着,炉子就没有热源,可设的炉温上限是 0,开炉会以温度不足被拒,也不扣料。
方块物品的提示框把注册表给它的两个数印给玩家看——一行「可提供的最高炉温」、一行「升温速度」;方块自己实现供热接口的那一类不写数字,只说热量由方块自身状态决定。
供热方块不消耗。拆核心不会掉它——它是世界里独立的一格,留在原地。活动批次里把它挖掉或换成别的方块,这一批不会中止,只是停止升温、按炉型的 cooling_per_tick 回落。
炉温上限
整炉实际可设的炉温上限是三者取最低:这个方块给出的最高温、18 块炉壁里最低的那个耐温、以及炉型规格自己可选的 max_temperature。炉壁的耐温见炉壁材料,设定温度与回落速度见炉型规格。
方块自己回答
方块可以实现 com.iafenvoy.mxt.api.AlchemyHeatSource,自己回答这两个数(点着时和熄灭时给不一样的值,或者看周围有什么)。实现了接口的方块以自己的回答为准,忽略这张注册表给它写的值——接口是这张注册表之上的更高级控制,不是必须的,绝大多数方块只写一条定义就够。接口的返回值必须有限且大于 0,否则炉子把那一格当成没有热源。
用 Jade 看一个供热方块时,同样的两个数也作为方块信息显示(一行「最高炉温」、一行「升温速度」)——数值由服务端现算后送出,所以自己回答的方块显示的是它此刻的实时值,而不是表里那一份。Jade 的插件设置里可以单独关掉这一项(列作「供热方块」)。
本体不提供热源方块,也不内置岩浆、火这类数值:给多少由数据包或内容包自己定。测试包里的三个方块只供测试,不是内容包要注册的东西。