源码缺陷清单
以下均为读源码实测得到的问题,附文件与行号。按严重度排序。
1. 原生动态库路径硬编码,装机即崩
pvnrt/rust/NativeGasSimulator.java:40
System.load(Paths.get("..", "..", "gas-sim", "target", "release", "libgas_sim.so")
.toAbsolutePath().normalize().toString());
- 路径假定 CWD 在仓库内两层子目录,且要求事先
cargo build --release .so不随 jar 打包(src/main/resources下无任何 native 库)- 该方法在
CommonProxy.preInit无条件调用,失败会抛UnsatisfiedLinkError直接崩服 - 无
try/catch、无System.loadLibrary回退、无架构探测
2. 数字 ID 分配顺序与排序不符
pvnrt/gas/GasRegistry.java:33-40
var gasses = new ArrayList<>(GASSES.entrySet()); // 第 33 行
gasses.sort(Comparator.comparing(e -> e.getKey().toString())); // 第 35 行
for (var gas : GASSES.values()) { // 第 37 行 ← 遍历的是未排序的 GASSES
gasses 排序后从未被使用,循环遍历的是原始 HashMap.values()。setNumericId 的分配顺序实为 HashMap 迭代顺序,import java.util.Comparator 因此是无效 import。
3. 物态与热力学参数是硬编码常量
pvnrt/gas/StandardGas.java:42-44
public GasStats getStats(GasStack stack, float volume) {
return new GasStats(GasState.GAS, 101000f, 293f);
}
对所有气体无条件返回 GAS 相、101000 Pa、293 K。GasState 枚举的 FLUID / SOLID 无人使用;volume 形参未被使用。构造器传入的 molarWeight / specificHeatCapacity 在此不参与计算。
4. 显示名是占位字符串
pvnrt/gas/StandardGas.java:37-40 —— getDisplayName() 恒返回字面量 "something"。
5. 方块无 ItemBlock,玩家无法获得
pvnrt/CommonProxy.java:27 只 GameRegistry.registerBlock(BlockFan.FAN, "fan")。全仓 grep -rn "ItemBlock" src/ 0 命中,风扇没有物品形式,进不了创造栏也拿不到。
6. 本地化与贴图缺失
assets/pvnrt/lang/en_US.lang仅 3 行(1 空行 + 2 物品键)argon/carbon_dioxide两种气体无显示名键BlockFan.setBlockName("fan")缺tile.fan.name键 → 方块名显示为tile.fan.nameassets/pvnrt/下只有lang/,没有textures/→ 2 个物品显示为紫黑缺失模型(风扇因复用原版贴图而正常)
7. 遗留模板文件未清理
| 文件 | 问题 |
|---|---|
src/main/resources/mcmod.info |
完全是 GTNH 模板原样:description 写 “An example mod for Minecraft 1.7.10”、url 指向 https://github.com/SinTh0r4s/MyMod、author 为 SinTho0r4s |
src/main/java/pvnrt/Config.java |
greeting = "Hello World" 模板字段,synchronizeConfiguration 生成的配置文件无任何实际配置项 |
pvnrt/rust/NativeGasSimulator.java:28-35, 46-51 |
ebs_patch_dump.bin 落盘代码整段注释掉,out 恒为 null |
8. 仓库 CLAUDE.md 与源码不符
该文档多处与实读源码矛盾,不可作为事实来源:
| CLAUDE.md 声称 | 源码实况 |
|---|---|
| 「built-in gases are Oxygen (O2) and Nitrogen (N2)」 | 4 种,另有 ARGON、CARBON_DIOXIDE(PVNRT.java:24-27) |
| 「default surface atmosphere is 70% N2 / 30% O2」 | 实为 79.42% N2 / 20.37% O2 / 0.21% Ar / 0.0009% CO₂ |
| 「Voxel data packed into 16-bit integers」 | Voxel.data 是 32 位 int(VoxelLike.java:5-11) |
| 「4 voxel statuses: OCCLUDED, ACTIVE, IDLE, WORLD_ATMOSPHERE」 | 无此枚举;get_voxel_status 返回 format! 调试串(gas-sim/src/jni.rs:156) |
| 「4-pass algorithm」 | 未在 Java 侧找到对应的 4 遍循环实现 |
9. 依赖声明与实际使用不符
dependencies.gradle 声明 NotEnoughItems:2.8.82-GTNH(runtimeOnlyNonPublishable),但 src/main 与 src/mixin 中无任何 NEI 引用。该依赖仅用于开发期运行,不构成 NEI 集成。同理 Angelica:2.1.13 亦为 runtimeOnlyNonPublishable。
10. 未完成的 API 表面
PVNRTNetwork全类标注@SuppressWarnings("unused")PVNRTAction/PVNRTActionWithPayload无任何子类(extends PVNRTAction0 命中)CommonProxy.getThePlayer()服务端版直接return nullStandardGas.toString()只返回 id