气体物质系统
pV=nRT 的核心抽象层,仿照 Forge 的 ItemStack / 库存模型,为「气体」提供了一套可注册、可堆叠、可序列化的容器。
内置气体
仓库在主类中静态声明 4 种气体(pvnrt/PVNRT.java:24-27)。每种气体在构造时经 StandardGas 构造器自动注册进 GasRegistry,无需额外调用 register()。
| 气体 | ResourceLocation | 摩尔质量 (g/mol) | 比热容 |
|---|---|---|---|
| 氧气 OXYGEN | pvnrt:oxygen |
32.0 | 0.919 |
| 氮气 NITROGEN | pvnrt:nitrogen |
28.0 | 1.040 |
| 氩气 ARGON | pvnrt:argon |
39.948 | 0.523 |
| 二氧化碳 CARBON_DIOXIDE | pvnrt:carbon_dioxide |
44.01 | 0.846 |
注意:仓库的
CLAUDE.md声称「built-in gases are Oxygen (O2) and Nitrogen (N2)」,与源码不符——源码实际有 4 种,多出氩气与二氧化碳。以PVNRT.java:24-27为准。
三态
GasState(pvnrt/gas/GasState.java)定义 GAS / FLUID / SOLID 三种物态。但 StandardGas.getStats()(pvnrt/gas/StandardGas.java:42-44)对所有气体一律返回 GAS + 101000 Pa + 293 K,物态枚举与压强/温度参数当前均未真正生效。
容器类型
| 类 | 文件 | 用途 |
|---|---|---|
GasStack |
pvnrt/gas/GasStack.java |
单个「气体 + 数量(摩尔)」的不可变单元 |
GasList |
pvnrt/gas/GasList.java |
可变列表,addAt(gas, amount, temperature) 按位置加入 |
MutableGasList |
pvnrt/gas/MutableGasList.java |
GasList 的可变侧接口 |
FixedGasList |
pvnrt/gas/FixedGasList.java |
长度固定的气体数组,供 Rust 侧零拷贝使用 |
气体列表额外携带能量,并可导出 GasStats(压强 Pa、温度 K)。
数值 ID 分配
GasRegistry.initIds()(pvnrt/gas/GasRegistry.java:28-41)在 postInit 阶段(CommonProxy.postInit)调用,把 ResourceLocation 映射为整数 ID,供原生层使用。GAS_LIST 的下标 0 固定为 null(表示"无气体"),因此首个气体拿到 ID 1。
⚠️ 该方法第 33-35 行构建并排序了 gasses 局部变量,第 37 行却遍历未排序的 GASSES.values()——排序结果被丢弃,数字 ID 的分配顺序实为 HashMap 迭代顺序。详见 源码缺陷。