气体物质系统

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 迭代顺序。详见 源码缺陷。

相关条目