配置项

基本信息

属性 值
配置文件 event.getSuggestedConfigurationFile() → config/hydroenergy.cfg(hooks/HEHooksShared.java:46)
配置类 config/HEConfig.java(246 行)
加载方法 HEConfig.syncronizeConfiguration(File)
选项总数 21
分类 General(9)、Spreading(6)、Energy Balance(6)

⚠️ maxDams 与 blockIdOffset 改完必须重启,且不能改小: maxDams 决定 HE.waterBlocks 数组长度(static final 定长), 改配置后已存档的更大 waterId 会越界。 配置注释原文: "Keep it only as long as you need. You can always just raise, but not shorten the value." (HEConfig.java:81) 源码用 if (maxDams < 1) maxDams = 1; / if (maxDams > 16) maxDams = 16; 硬夹在 1–16(HEConfig.java:84-85)。

General(9 项)

键 类型 默认 侧 注释要点 行
maxDams int 16 SERVER 支持多少个坝,每个坝一个水体方块;只能增不能减,1–16 75-86
minimalWaterUpdateInterval int 1000 ms SERVER 服务端 → 所有客户端的水位更新包最小间隔 88-93
delayBetweenSpreadingChunks int 2000 ms SERVER 每处理一个区块(水扩散)之间的间隔;注释强调「一个 tick 就处理整个区块 y=0~255」 95-102
minLightUpdateTimePerSubChunk int 10 ms CLIENT 每个被重渲染子区块追加的最小光照延迟 104-114
useLimitedRendering boolean false CLIENT 性能不足时开启,渲染能力受限 116-122
forceOpenGL boolean false CLIENT 绕过 OpenGL 3.2 检查(部分 Mac 只报 2.1);注释警告可能崩溃 126-132
clippingOffset double 0.05 格 SERVER + CLIENT 水面低于方块顶部该值时不渲染;同时用于物理计算并由服务端同步 134-142
dimensionIdWhitelist int[] {0} SERVER 允许放置控制器的维度 ID 列表 144-152
blockIdOffset int 17000 SERVER + CLIENT GT 方块注册 ID 偏移 194-199

⚠️ Angelica 强制覆盖

if (Loader.isModLoaded("angelica")) useLimitedRendering = true;

(HEConfig.java:124)

装了 Angelica 就无条件打开 useLimitedRendering, 且这一行在 useLimitedRendering = useLimitedRenderingProperty.getBoolean();(HEConfig.java:122) 之后执行,所以配置文件里的 false 会被覆盖—— 但不会写回文件(config.hasChanged() 判定不含此项), 表现为「配置文件写着 false,实际却是 true」。

Angelica 在本 wiki 有收录(分类 angelica),跨分类链接见 分类页。

Spreading(6 项)

全为 SERVER 侧全局扩散上限(单位:格)。 分类有自定义注释(HEConfig.java:154-158): "Water spreading will quickly get out of control if somebody mis-clicks their limits on their controllers. Here are game-wide limits for spreading."

键 默认 方向 行
maxWaterSpreadWest 1000 W(−X) 160-162
maxWaterSpreadDown 1000 D(−Y) 163-165
maxWaterSpreadNorth 1000 N(−Z) 166-168
maxWaterSpreadEast 1000 E(+X) 169-171
maxWaterSpreadUp 24 U(+Y) 172-174
maxWaterSpreadSouth 1000 S(+Z) 175-177

⚠️ maxWaterSpreadUp 默认只有 24,其余 5 项都是 1000。 而 水力坝 放置时的默认 limitUp 只有 blockY + 10。 竖直方向被双重收紧(控制器默认 10 < 全局上限 24)。

这 6 项被 水力坝 的 HEDam.onConfigRequest 用于 夹紧客户端提交的限高(server/HEDam.java:280-285)。

Energy Balance(6 项)

键 类型 默认 注释要点 行
damDrainPerSecond int 2048 坝每秒向涡轮提供多少 EU(注释写 “per tick”) 179-184
waterBonusPerSurfaceBlockPerRainTick double 1.0 下雨时每个水面方块每 tick 附加的 EU 186-192
efficiencyLossPerTier double 0.03 泵/涡轮每升一档的效率衰减,起点 LV 为 1.0 − 0.03 201-207
pressureIncreasePerTier double 2.0 泵每升一档的压力高度上限,起点 LV 为 1 × 2.0 209-215
milliBucketPerEU double 1.0 压力 1 时加压水与 EU 的换算比 217-225
enabledTiers String[] {“lv”,“mv”,“hv”,“ev”,“iv”} 哪些档位生成泵/涡轮配方;ULV 被永久忽略 227-240

⚠️ 缺陷 1:damDrainPerSecond 单位自相矛盾

位置 写法
HEConfig.java:30(Defaults) public static final int damDrainPerSecond = 2048; // in EU
HEConfig.java:183(cfg 注释) "How many EU a dam will provide as Pressurized Water for turbines **per tick**."
实际使用 HEHydroDamTileEntity.java:169 Math.min(HEConfig.damDrainPerSecond, euStored) —— 在 onRunningTick 里,即每 tick

代码行为 = 每 tick(与 cfg 注释一致),但配置项名与 Defaults 注释说 “second”。 名字与行为不符,不要按「每秒 2048」去推算产能。

⚠️ 缺陷 2:enabledTiers 只置 true 从不置 false

String[] enableTierNames = enabledTiersProperty.getStringList();
for (int i = 0; i < enableTierNames.length; i++) {
    final int tierId = HEUtil.voltageNameToTierId(enableTierNames[i]);
    // Catch -1 and disable ULV permanently
    if (tierId > 0) {
        enabledTiers[tierId] = true;
    }
}

(HEConfig.java:233-240)

enabledTiers 是 static 数组(HEConfig.java:67 new boolean[GTValues.VN.length - 1]),没有任何一行写 false。

因此:先在会话中把某档设为 true 再改配置文件删掉它,同一进程内不会被关掉。 if (tierId > 0) 确实把 ULV(voltageNameToTierId 返回 0 或 -1)永久排除, 这点是按预期工作的。

enabledTiers 与方块可见性

事项 行为 行
方块注册 14 档全部无条件注册 hooks/HEHooksShared.java:94-121(源码注释:// Instantiate all variants in case a server has a different configuration the block is still available)
配方生成 仅 enabledTiers[tierId] == true 的档位 HEBlockRecipes.java:106-108
NEI 显示 未启用的档位 API.hideItem(...) 隐藏 hooks/HEHooksShared.java:129-137

所以「关掉」的档位方块仍存在、仍能放置,只是没配方且 NEI 里看不到。

blockIdOffset 决定的 ID 布局

方块 ID 行
水体 × maxDams 由 Block.blockRegistry 动态分配 hooks/HEHooksShared.java:81
水力坝 blockIdOffset + 0 = 17000 hooks/HEHooksShared.java:96
水力泵(14 档共用) blockIdOffset + 1 = 17001 hooks/HEHooksShared.java:97 等
水力涡轮(14 档共用) blockIdOffset + 17 = 17017 hooks/HEHooksShared.java:98 等

语言文件

文件 存在?
assets/hydroenergy/lang/en_US.lang ✅
assets/hydroenergy/lang/zh_CN.lang ❌ 不存在

本 mod 完全没有中文翻译文件。 en_US.lang 共 17 行:1 行 fluid.Pressurized Water + 16 行 tile.water0.name … tile.water15.name(全部 =Water)。

⚠️ tile.water13.name=tWater(en_US.lang 第 14 行数据行)—— 多了个字母 t,应为 Water。拼写错误。 其余 15 个水方块键均为正确的 Water。

📌 机器名(Hydro Dam / Hydro Pump / Hydro Turbine)不在本 mod 的 lang 里, 走 GT 自己的本地化机制。

关联