源码缺陷清单

以下均为读源码实测得到的问题,附文件与行号。按严重度排序。

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.name
  • assets/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 PVNRTAction 0 命中)
  • CommonProxy.getThePlayer() 服务端版直接 return null
  • StandardGas.toString() 只返回 id

相关条目