InfoHUD
[!INFO] Git Commit:
9a853b9| Updated: 2026-10-01
modid:infohud(InfoHUD.java:21
public static final String MODID = "infohud";,
由 @Mod(modid = InfoHUD.MODID, ...) 在 InfoHUD.java:14 引用)。
gradle.properties 的 modId = infohud 一致。全小写。
⚠️ mcmod.info 全是构建期占位符("${modId}" / "${modName}" /
"${modVersion}" / "${minecraftVersion}"),无法从这里读 modid。
唯一的真实描述是手写字段:
“Configurable HUD showing player and world info, with a classic bar renderer and light-level overlay.”
(src/main/resources/mcmod.info:6)
显示名:InfoHUD(InfoHUD.java:23 MODNAME,gradle.properties 的 modName = InfoHUD)
网址: https://github.com/EvgenWarGold/InfoHUD
作者: EvgenWarGold(mcmod.info 的 authorList)
根包名: com.gtnewhorizons.infohud(注意不是 infohud)
版本号: Tags.VERSION(InfoHUD.java:15),构建期生成,源码中不存在
一句话:可配置的信息 HUD + 光照覆盖层 + 经典状态条
61 个 Java 文件。本 mod 不注册任何方块、物品、实体、指令之外的注册物:
| 项目 | 数量 | 说明 |
|---|---|---|
| 注册方块 / 物品 / TileEntity / 实体 | 0 / 0 / 0 / 0 | 纯客户端显示 mod |
| HUD 信息行类 | 18(hud/core/infolines/) |
实例化 最多 20 个(15 常驻 + 5 条件) |
| Mixins | 8(2 组:7 early + 1 late) | 见 Mixin 与网络 |
| 配置项 | 69(4 个配置文件、5 个嵌套类) | 见 配置项 |
| 按键 | 1(L 切光照层) |
见 按键与指令 |
| 指令 | 1(/hud 开配置界面,无需 OP) |
同上 |
| 可选 mod 集成 | 6(5 个产生信息行) | 见 可选 mod 集成 |
| 网络子通道 | 3(`IHHUD | TPS/ |
| 语言文件 | 1(en_US.lang,41 行) |
❌ 无 zh_CN.lang |
它做的三件事:
- 在屏幕左上角画一组可排序、可关停、可换图标的信息行(FPS / 坐标 / 群系 / TPS / 内存 / 扭曲 / LP …)
- 按
L切换光照等级覆盖层(5 模式,像 F3 的光照调试) - 可选还原 1.8 的经典状态条(生命 / 饥饿 / 饱和 / 空气 / 护甲,最多 7 根)
依赖声明
⚠️ @Mod 没有 dependencies 字段(InfoHUD.java:13-18):
@Mod(
modid = InfoHUD.MODID,
version = Tags.VERSION,
name = InfoHUD.MODNAME,
acceptedMinecraftVersions = "[1.7.10]",
acceptableRemoteVersions = "*")
| 依赖 | 级别 | 说明 | 在本 wiki 收录范围? |
|---|---|---|---|
无任何 dependencies |
— | 所有集成都是运行时可选 | — |
GTNHLib:0.9.53 |
implementation |
配置框架与 SimpleGuiConfig,实际必需 |
不在 |
AWWayofTime |
隐式可选 | LP 行 | ✅ 在(分类 blood-magic 等,modid 为 AWWayofTime) |
Thaumcraft |
隐式可选 | 扭曲值行 | ✅ 在 |
gregtech_nh |
隐式可选 | 矿脉区块行 | ✅ 在(分类 gregtech,但 modid 是 gregtech_nh) |
Forestry |
隐式可选 | 气候行 | ✅ 在 |
nutrition |
隐式可选 | 营养行 | 不在 |
backhand |
隐式可选 | 副手护甲 | ✅ 在 |
OverloadedArmorBar |
⚠️ 未声明 | ArmorBarRenderMixin 的目标 |
不在 |
Baubles-Expanded |
⚠️ 未声明且无守卫 | 扭曲值计算读饰品栏 | ✅ 在(分类 baubles-expanded) |
AppleCore:3.3.11 |
⚠️ compileOnly 但源码零引用 |
无 | 不在 |
acceptableRemoteVersions = "*"(InfoHUD.java:18)——
允许任意远端版本。配合「纯客户端显示 mod」的设计,
不装服务端也能用本地显示(但服务端数据类信息行会失效)。
modid 陷阱
本 mod 自身 modid 是全小写 infohud,不是陷阱。
陷阱在于它检测的 6 个 modid:
| 枚举 | 源码里的 modid | 常见误用 |
|---|---|---|
GREGTECH |
gregtech_nh |
❌ gregtech(wiki 分类名 ≠ 运行时 modid) |
BLOOD_MAGIC |
AWWayofTime |
❌ BloodMagic / bloodmagic |
THAUMCRAFT |
Thaumcraft |
❌ thaumcraft(首字母大写) |
FORESTRY |
Forestry |
❌ forestry(首字母大写) |
NUTRIENT |
nutrition |
— |
BACKHAND |
backhand |
— |
另:mcmod.info 同样是 ${modId} 占位符。
生命周期
4 个 @Mod.EventHandler,全部转发给 @SidedProxy
(InfoHUD.java:26-29):
| 阶段 | 行 | 动作 |
|---|---|---|
preInit |
31-34 |
proxy.preInit(event) |
init |
36-39 |
proxy.init(event) |
postInit |
41-44 |
proxy.postInit(event) |
serverStarting |
46-49 |
proxy.serverStarting(event) —— 注册 /hud |
本 mod 没有
serverStarting之外的 FML 服务端事件, 服务端数据采集靠MinecraftServerMixin的tick(TAIL)注入。
已确认的源码缺陷
| # | 位置 | 问题 |
|---|---|---|
| 1 | mixins/late/ArmorBarRenderMixin.java:15 |
⚠️ 可能启动即崩:目标是 locusway.overloadedarmorbar.overlay.ArmorBarRenderer(外部 mod),但 Mixins.java:10-11 没有 addRequiredMod,而 mixins.infohud.late.json 是 "required": true。未装 Overloaded Armor Bar 时目标类不存在。详见 Mixin 与网络 |
| 2 | configs/ClassicBarConfig.java:7 |
⚠️ 配置文件名冲突:filename = "LightOverlayConfig",应为 "ClassicBarConfig" ⇒ 两个配置类写同一个 config/InfoHUD/LightOverlayConfig.cfg,经典条设置与光照层设置互相覆盖 |
| 3 | hud/HudUtils.java:72 |
⚠️ 隐藏硬依赖:BaublesApi.getBaubles(player) 无 Loader.isModLoaded 守卫、不在 Mods 枚举、不在 @Mod(dependencies)。「装 Thaumcraft 但没装 Baubles」时渲染扭曲值行会抛 NoClassDefFoundError / NPE |
| 4 | compat/Mods.java:28-31 |
死代码:Mods(Supplier<Boolean>) 构造器从未被使用(6 个枚举全用 String 版),supplier 恒 null,isLoaded() 的 supplier 分支永不执行 |
| 5 | dependencies.gradle |
compileOnly("com.github.GTNewHorizons:AppleCore:3.3.11-GTNH:dev") —— 源码 零引用,且不在 Mods 枚举中,纯遗留依赖 |
| 6 | mixins/Mixins.java:10 |
命名误导:组名 MINECRAFT_LATE / "Minecraft Late" 暗示打 Minecraft 类,实际唯一成员打的是第三方 mod |
| 7 | hud/Hud.java:72 |
InfoCountItem 的 order 硬编码 0,是 20 个实例中唯一不可排序的(HudOrder 只有 19 项) |
| 8 | hud/core/infolines/InfoBiome.java:14 + en_US.lang:19 |
显示的是 getBiome().**rainfall** * 100,lang 却写成 Humidity。BiomeGenBase 无 humidity 字段,文案与实际取值不符 |
| 9 | hud/core/InfoLine.java:19 |
ROUGHDIRECTION = {"South","West","North","East"} 是硬编码英文,不走 tr() ⇒ 即便有中文包,朝向文本也永远是英文 |
| 10 | hud/Hud.java:44、47 |
JoinWorldEvent 同一实例被注册到两个事件总线(MinecraftForge.EVENT_BUS + FMLCommonHandler.bus()),是有意还是重复无法从代码判定 |
| 11 | hud/core/InfoLine.java:69 |
方法名 getChachedItemStack() —— Chached 拼写错误(应为 Cached) |
| 12 | classicbar/event/ClassicBarRenderEvent.java |
ProgressBarBuilder 的 AnimationStyle 枚举(4 种)与全部 setIcon / setNumberFormat / setAnimationStyle setter 均未被调用 ⇒ 枚举在这条路径上是未使用代码 |
| 13 | commands/CommandHUD.java:31-32 |
catch (Exception e) { e.printStackTrace(); } —— 配置 GUI 打不开只打堆栈,无聊天提示 |
| 14 | 全仓库 | 无 zh_CN.lang,本 mod 无任何中文翻译(9 个配置 LangKey 只能显示英文) |
| 15 | configs/HudConfig.java |
@Config.Order(GUI 行序)与字段默认值(实际排序权重)刻意不同且易误读——如 MemoryOrder @Config.Order(2) 但默认 4。排版必须看默认值 |
📌 不是缺陷(已核实,避免误记):
GeneralConfig.DisablePotionEffect默认true是有意—— 它禁用原版药水图标,由HudPotion替代。InfoCountItem/InfoForestry/InfoNutrient没有 lang 键也是合理的 (裸数字 / 借 Forestry 本地化 / 自建字符串)。
条目索引
机制
- HUD 信息行 - 18 个类 / 最多 20 个实例(
InfoMemory、InfoWorldTime各双实例);19 顺序 + 19 图标 + 20 开关,InfoCountItem无序无图 - 光照等级覆盖层 - 按
L循环 5 模式(OFF/ALL/SPAWNABLE/SKY/CAN_SPAWN);17×17×25 格扫描,数字跟随视角可关 - 经典状态条 - 最多 7 根条(生命/饥饿/饱和/空气/护甲 + 饥饿/饱和预览),还原 1.8 样式;默认关闭
配置
- 配置项 - GTNHLib 注解式,4 个文件 / 69 项;⚠️
ClassicBarConfig文件名与LightOverlayConfig冲突
兼容
- 可选 mod 集成 - 6 个枚举(
gregtech_nh/AWWayofTime/Thaumcraft/Forestry/nutrition/backhand);⚠️ Baubles 无守卫、AppleCore 零引用
其它
- 按键与指令 - 1 按键(
L)+ 1 指令(/hud,无需 OP,忽略所有参数) - Mixin 与网络 - 8 个 Mixin / 2 组;
GuiIngameForge渲染入口 +MinecraftAccessor读 FPS;OSL 握手 3 个子通道;⚠️ 护甲条 Mixin 缺门控
覆盖率
| 维度 | 注册真源实测 | 已收录 |
|---|---|---|
| InfoLine 类 | 18(hud/core/infolines/*.java) |
18(全部在 HUD 信息行 逐条说明) |
| InfoLine 实例 | 最多 20(Hud.java:57-92,20 处 lines.add) |
20(逐条列表,含 5 个条件行) |
| 配置文件 | 4(ConfigRegister.java:9-12) |
4(配置项 全表) |
| 配置项 | 69(HudConfig 65 + General 1 + LightOverlay 1 + ClassicBar 2) | 69(逐项列出默认值与范围) |
| Mixin | 8(Mixins.java 2 组) |
8(逐条 列出目标/侧/阶段/注入点) |
| 按键 | 1(KeyBindHandler.java:18) |
1 |
| 指令 | 1(CommandHUD.java:19) |
1 |
| 可选 mod | 6(Mods.java:10-15) |
6(逐条) |
| 网络子通道 | 3(OSLHandshakePayload.java:23-25) |
3 |
| 经典条 | 7 根(ClassicBarRenderEvent.java:101-168) |
7(逐条) |
| 光照模式 | 5(LightLevelOverlayRenderer.java:25-29) |
5 |
| lang 键 | 41 行 en_US.lang,9 个配置 LangKey 全部命中 |
9/9(列出) |
| 方块 / 物品 / 实体 | 0 / 0 / 0 | — |
覆盖率:信息行 18/18、配置 69/69、Mixin 8/8、按键 1/1、指令 1/1、可选 mod 6/6、网络通道 3/3、模式 5/5。