配置项
基本信息
| 属性 | 值 |
|---|---|
| 配置文件 | 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 自己的本地化机制。