Added Gas System and some gases. 添加了气体系统和几种气体 - #4489
Conversation
PigeonNian
commented
Aug 20, 2026
- 使得管道系统支持了气体气压扩散
- 泵会提供气压差
- 气体在泵内以透明度形式表现存量
- 新增氢气、氧气、氦气和氘气四种气体流体类型及其流体实例 - 实现GasFluid类,定义气体流体的特殊行为和属性 - 新增对应的桶物品及其模型,支持气体流体的倒置渲染效果 - 在物品标签页和物品集合中添加新桶物品 - 更新流体注册和客户端流体类型注册,定义各气体颜色和特效 - 添加语言文件条目,支持新桶物品的显示名称 - 为新桶物品注册动态流体模型颜色处理器
- 新增多种气体流体名称及对应中英文本地化 - 实现气体在流体管网内基于气压差的均衡分配算法 - 气压值由气体充填率与泵的压力偏置共同决定 - 气体流动不再依赖高度拟合的扬程,而由压强驱动 - 气体绘制支持全量显示,通过透明度表达气体填充比例 - 渲染时气体始终填满容器体积,区别于液体的高度变化 - 添加对气体流速限制及阈值判定的控制,避免过度计算 - 优化气体管网中的阀门流量限制与可达性判断逻辑
|
I've confirmed all gas types use 代码审查总结结论:需要修改 🔴(2 个警告,4 个建议) PR: #4489 — Added Gas System and some gases(气体系统:管道气压扩散)
|
| 被测目标 | 推荐测试场景 | 优先级 |
|---|---|---|
FluidPipeNetwork#transferGas |
大储罐间气压均衡:验证均衡量与代数解一致、且预算/阀门上限生效 | 🟡 |
FluidPipeNetwork#equilibrateGases |
混合气体(同罐多种气体)各自独立均衡、不互相污染 | 🟡 |
| BucketItem 气体桶 | 在世界中放置气体桶不消耗/可回收(若决定禁止则验证 FAIL) | 🔴 |
| 渲染 alpha | 存量很低时气体接近透明、满罐时完全不透明 | 🟢 |
由 Hermes Agent 审查
我已经完成对 PR #4489 的审查。核心逻辑(气压均衡数学、空安全、编译完整性、渲染、资源)都经过验证:均衡公式代数正确且无整数溢出,辅助方法齐全,isLighterThanAir() 判别当前不误伤既有流体。主要问题是两个警告:气体桶在世界中无法放置/回收(无 Block、getBucket=AIR,却在创造页签与 c:buckets 中暴露),以及用负密度作为气体判别的脆弱耦合。建议确认气体桶的预期使用方式并考虑更稳健的气体类型判别。
- 将气压相关变量类型由 int 改为 long 提高分辨率和范围 - 添加气体压力细化分辨率常量,避免整除死区 - 引入无限气体源和无限气体汇的压力标度,保证特殊储罐行为准确 - 在传输逻辑中区分无限气体源,突破存量限制直接填充目标 - 重构 gasPressure 方法,支持无限气体源/汇的专用压力计算 - 扩展气体均衡轮数限制,适应更复杂网络均衡需求 - 调整 transferGas 函数参数和实现,去除对压力差的依赖 - 新增辅助方法判断是否为无限气体源或汇,完善气体流动规则
|
I have enough context. The Let me confirm there are no leftover concerns about the render code duplication being a regression — the original I'll now write the final review. 代码审查摘要 — PR #4489操作: synchronize 概览添加了气体系统: 🟢 核心逻辑验证(均通过)
🔴 关键问题未发现阻塞性缺陷。
|
| 声称 | 状态 | 对应实现 |
|---|---|---|
| 管道系统支持气体气压扩散 | ✅ | FluidPipeNetwork.equilibrateGases/equilibrateGasType/transferGas/gasPressure |
| 泵提供气压差 | ✅ | gasPressure 中 (effectiveHeight − containerPos.getY())·GAS_PRESSURE_PER_LIFT / GAS_PRESSURE_PER_LIFT |
| 气体在泵内以透明度形式表现存量 | ✅ | FluidTankRenderUtil + LargeFluidTankBlockEntityRenderer opacity 模式 |
🧪 测试建议
| 被测目标 | 推荐场景 | 优先级 |
|---|---|---|
transferGas 有限源均衡 |
两端容量不等时转移量是否让压强收敛;loCap=Integer.MAX_VALUE(无限汇) 边界 |
🔴 |
gasPressure 泵偏置 |
泵拉高 effectiveHeight 后气体是否朝泵侧流动 |
🟡 |
| 无限源(非空 InfinityFluidTank) | want 不受源存量限制、受阀门限流 | 🟡 |
| 混合液/气共存 | 装液体的罐不视为气体目标容量 | 🟡 |
| 渲染 alpha | fill=0/1 边界、Math.clamp 越界输入 |
🟢 |
结论: COMMENT (倾向 APPROVE) — 核心均衡算法经推导验证正确,源/汇结合 InfinityFluidTank 语义自洽,渲染与 lang 完整。无阻塞性 bug;上述 getBucket() 语义、ItemsSections 侧边改动)建议作者确认后合并。
由 Hermes Agent 审查
- 为事件总线订阅者添加客户端限定标识 - 避免服务端加载客户端专用的颜色处理代码 - 确保颜色处理器仅在客户端环境下注册 - 修改注解为 @EventBusSubscriber(value = Dist.CLIENT, modid = AnvilCraft.MOD_ID)
|
💾 Self-improvement review: Skill 'gas-system-pr-review' created. |
|
Confirmed — no recipes, no gas flowable fluid/block. The gases are only usable in the pipe network with a creative InfinityFluidTank as source. Now I'll write the review. 代码审查摘要 — PR #4489操作: synchronize 概览本 PR 为管道系统引入"气体"概念:新增 ✅ 核心气体均衡逻辑 — 数学自洽(验证通过)
🔴 关键
|
| 声称 | 状态 | 对应文件 |
|---|---|---|
| 管道支持气体气压扩散 | ✅ | FluidPipeNetwork(equilibrateGases/pressure/transfer) |
| 泵提供气压差 | ✅ | GAS_PRESSURE_PER_LIFT → effectiveHeight−Y 偏置 |
| 气体以透明度表现存量 | ✅ | FluidTankRenderUtil / LargeFluidTankBlockEntityRenderer / FluidRenderHelper(alphaFill) |
| 新增几种气体 | ✅ | GasFluid + ModFluids(H2/O2/He/D2)+ 桶/模型/语言 |
| 生存可获取/用途 | ❌ | 无配方、无气体方块、无获取途径 |
结论: COMMENT — 气体均衡核心算法扎实、数学自洽,架构上与液体路径解耦得当,可合并方向正确。但本 PR 中气体在生存模式完全不可获取(无配方、无气体方块、getBucket()→AIR),功能实际为创造模式专属;且存在每 tick 全网络扫描的性能开销与 c:buckets 双重注册冗余。建议先澄清获取途径是否为后续 PR 范畴,若本 PR 定位即"管网气体模拟基建",可合并后补获取链。
由 Hermes Agent 审查
|
💾 Self-improvement review: Patched SKILL.md in skill 'gas-system-pr-review' (1 replacement). |
- 新增氙气和氪气流体类型及对应的流体注册 - 实现氙气和氪气桶物品及其模型文件 - 在物品标签和物品选项卡中添加氙气桶和氪气桶 - 更新流体客户端渲染设置以支持氙气和氪气颜色 - 增加多语言支持,包括英语和倒置英语的名称 - 修改流体网络代码,调整无限气体源和汇的处理逻辑 - 注册颜色处理器以支持新增的氙气桶和氪气桶
|
I now have a complete picture. Let me write the review. Key findings: Verified correct:
Critical:
Warnings:
Suggestions:
Let me write the final review. 代码审查摘要 — PR #4489操作: synchronize (gas system) 变更概览新增气体系统:6 种气体流体(氢/氧/氦/氘/氙/氪,均 🟢 数学正确性验证(通过)
num = (double)hiStored*loCap - (double)loStored*hiCap - (double)(loBias-hiBias)*hiCap*loCap/GAS_PRESSURE_SCALE;
x = num / (hiCap+loCap);与「两罐均衡后压强相等」的解析解 精确一致:
🔴 关键
|
| 声称 | 状态 | 对应文件 |
|---|---|---|
| 管道系统支持气体气压扩散 | ✅ | FluidPipeNetwork.equilibrateGases/transferGas/gasPressure |
| 泵会提供气压差 | ✅ | gasPressure 内 effectiveHeight−y·PER_LIFT bias |
| 气体在泵内以透明度形式表现存量 | ✅ | FluidTankRenderUtil / LargeFluidTankBlockEntityRenderer / FluidRenderHelper alphaFill |
结论: COMMENT(倾向 APPROVE 前的确认项) — 核心气压均衡数学正确、渲染整合完整、en_ud 无误。合并前需确认生存获取链(🔴)、getBucket()=AIR 的 intended 范围与 ItemsSections 越界改动;性能退化建议优化但可非阻塞跟进。
🧪 测试建议
| 被测目标 | 推荐测试场景 | 优先级 |
|---|---|---|
FluidPipeNetwork.transferGas() |
有限源/汇均衡边界:不同容量比、泵 bias 非零、容量为 Integer.MAX_VALUE 时无溢出;无限源→有限罐(want=min(loFree,valveLimit));有限源→无限汇(受 GAS_EQUILIBRIUM_BUDGET 2000mB/tick 压制) | 🔴 |
gasPressure() |
空/满罐、无穷大容量、bias 极端值下的 long 溢出 | 🔴 |
gasStorage() |
多 tank handler 混合存储(部分 tank 同气体 + 部分空槽) | 🟡 |
equilibrateGases() |
纯液体网络(无气体)时的性能/profile;多气体类型隔离均衡 | 🟡 |
| 渲染 opacity | alphaFill=0 / 0.5 / 1 的透明度与 fill 率对应;气体在大型罐恒充满 | 🟢 |
由 Hermes Agent 审查
|
💾 Self-improvement review: Patched references/gas-system-pr-4489.md in skill 'gas-system-pr-review' (1 replacement). |
- 修改gasStorage方法,改为根据剩余容量计算总容量 - 处理多流体槽情况下的容量判断问题,避免容量被占用槽位误判 - 采用总存储量和总容量差值计算剩余空间再加已存气体量 - 提升多流体处理的准确性和代码可读性 - 增加方法注释详细说明容量计算规则
- 修改气体均衡转移预算为所有气体共享的全网预算 - 在气体均衡方法中引入可变预算参数以实现预算共享 - 调整气体转移循环逻辑,确保总预算正确减少 - 清理相关变量定义,简化预算管理逻辑
|
I have the complete picture. One important detail I notice: FluidLang.java only adds 4 of the 6 gases (hydrogen, oxygen, helium, deuterium) — but I need to check whether xenon and krypton translations are provided. Looking at the en_us and en_ud generated files, all 6 gases have translations. But the Looking at the data:
Actually, this is worth noting but the generated en_us/en_ud files DO include all 6 Let me verify the en_ud flips are valid by checking a couple. The en_ud values shown:
These all look correct. The language files are complete. I've now confirmed all the key findings from the reference against the current diff. Everything matches. Let me compile the review. The reference notes the version evolved from 4 to 6 gases — the current diff has 6 gases (hydrogen, oxygen, helium, deuterium, xenon, krypton). The FluidLang source only lists 4, but the generated files include all 6 (xenon/krypton handled by Registrum bucket lang). Let me just double-check whether the Let me write the final review. PR #4489 审查意见 — Gas System审查范围: ✅ 核心实现正确性已核对1. 气压均衡数学验证通过 先 2. 3. 无限源/汇语义自洽: 4. 重力/扬程与气体解耦: 5. 渲染「恒充满 + opacity 表存量」: 6. 7. 语言文件:en_us/en_ud 均含全部 6 种气体 + 6 桶名;en_ud 翻转映射正确(氢 🔴 关键问题:生存获取链缺失(合并阻塞项)6 种气体零配方(diff 中 💡 注:
|
|
💾 Self-improvement review: Patched references/gas-system-pr-4489.md in skill 'gas-system-pr-review' (1 replacement). · Patched SKILL.md in skill 'gas-system-pr-review' (1 replacement). |
- 在流体语言文件中新增氙(Xenon)条目 - 在流体语言文件中新增氪(Krypton)条目
|
The grep pattern was slightly off, but I already confirmed via the earlier extraction that all 6 gases are in FluidLang.java with I have all the information needed for a thorough review. Let me compose the review. Key findings to report:
Let me write the review now. 代码审查摘要 — PR #4489操作: opened/synchronize 概览新增气体系统: 🔴 关键1. 生存获取链完全缺失 — 合并阻塞项 grep -c "recipes/" /tmp/pr4489.diff → 0 # 零配方
getBucket() → Items.AIR / createLegacyBlock → AIR # 无气体流体方块6 种气体没有任何配方,且因其
|
| 声称 | 状态 | 对应文件 |
|---|---|---|
| 管道系统支持气体气压扩散 | ✅ | FluidPipeNetwork (equilibrateGases/transferGas/gasPressure) |
| 泵提供气压差 | ✅ | gasPressure bias = (effectiveHeight−Y)·PER_LIFT |
| 气体在泵内以透明度表现存量 | ✅ | FluidTankRenderUtil/LargeFluidTankBlockEntityRenderer/FluidRenderHelper |
🧪 测试建议
| 被测目标 | 推荐测试场景 | 优先级 |
|---|---|---|
FluidPipeNetwork.transferGas |
有限罐→有限罐均衡后压强相等(数学边界);无限源/汇分支;阀门口径限流 | 🔴 |
FluidPipeNetwork.gasPressure |
sc[1]==0 除零守卫;无限源/汇压力极值;bias 上/下界 |
🟡 |
FluidPipeNetwork.equilibrateGases |
纯液体网络(无气体)跳过;GAS_MAX_ROUNDS 收敛;GAS_EQUILIBRIUM_BUDGET 预算耗尽 |
🟡 |
GasFluid |
isSource=true/getBucket=AIR/createLegacyBlock=AIR 语义;getTickDelay=0 |
🟢 |
| 渲染 opacity | 普通罐 fill=0/0.5/1;大型罐单一气体/多层混装 layerTop-layerBottom 一致性 |
🟡 |
结论: REQUEST_CHANGES — 核心气压均衡数学正确、注册/语言/渲染闭环完整,但**生存获取链完全缺失(零配方+无流体方块+getBucket→AIR)**是本 PR 的合并阻塞项,需作者确认设计意图(是否后续 PR 补齐);另建议统一大型罐 opacity 来源并确认 getBucket→AIR 的各消费方 intended。
由 Hermes Agent 审查
|
💾 Self-improvement review: Patched references/gas-system-pr-4489.md in skill 'gas-system-pr-review' (1 replacement). · Patched SKILL.md in skill 'gas-system-pr-review' (1 replacement). |