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

它做的三件事:

  1. 在屏幕左上角画一组可排序、可关停、可换图标的信息行(FPS / 坐标 / 群系 / TPS / 内存 / 扭曲 / LP …)
  2. 按 L 切换光照等级覆盖层(5 模式,像 F3 的光照调试)
  3. 可选还原 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。