大气组成
定义方式
WorldGasProvider(pvnrt/gas/WorldGasProvider.java)是「一个世界维度的默认大气」接口,只有一个方法 getAtmosphericGasses(),返回 FixedGasList。
地表大气
MixinWorldProviderSurface(src/mixin/java/pvnrt/mixin/mixins/early/MixinWorldProviderSurface.java)mixin 到原版 WorldProviderSurface 并实现该接口,注入一份 @Unique 的大气常量:
氮气 34.78 mol @ 293 K
氧气 8.92 mol @ 293 K
氩气 0.093 mol @ 293 K
二氧化碳 0.0004 mol @ 293 K
换算为摩尔分数:
| 气体 | 体积分数 |
|---|---|
| 氮气 | 79.42 % |
| 氧气 | 20.37 % |
| 氩气 | 0.21 % |
| 二氧化碳 | 0.0009 % |
这是一份接近地球真实空气的配比(真实值约 78.08 / 20.95 / 0.93 / 0.04 %),二氧化碳被刻意压低了约 45 倍。
⚠️ 仓库
CLAUDE.md写的是「default surface atmosphere is 70% N2 / 30% O2」,这是错的——该文档只列了 2 种气体且百分比也对不上。以MixinWorldProviderSurface的字面量为准(79.4184 % / 20.3684 %)。
温度常量
四个组分统一使用 293 K(约 19.85 °C),即该字面量对温度的表示并非开尔文量纲的自洽值,而是 mod 作者选定的地面基准温度。ItemAtmoScanner 显示温度时会减去 273 转成摄氏度(pvnrt/item/ItemAtmoScanner.java)。
与模拟层的衔接
GasManager 构造时读取 world.provider instanceof WorldGasProvider,命中则把该大气作为原生模拟器的初值传入,否则退化为空大气(pvnrt/core/world/GasManager.java:28-30)。这意味着除地表维度外,洞穴、下界、末地等维度默认没有气体——需要各自实现 WorldGasProvider 才有大气。