HeadlessNH

[!INFO] Git Commit: 4eea6e6 | Updated: 2026-06-27

HeadlessNH(modid headlessnh)是一个客户端集成测试自动化框架,不是「服务器不渲染」的 mod。它运行在客户端,把 1.7.10 的 GUI 自动点一遍(主菜单 → 服务器直连 / 单人世界 → 世界加载完成),并向磁盘写出**标记文件(marker)供外部 CI 编排器判断进度;可选的闸门文件(gate)**还能让流程停在某一步,直到编排器放行,从而一步一步推进测试。

因此它的作用是:在没有人工干预的无人值守环境里驱动客户端跑完加载流程,供 CI 做冒烟测试。

核心设定

  • 不注册任何 Block / Item / TileEntity / 实体,CommonProxy 与 ClientProxy 的四个生命周期方法全是空实现(源码里带 (Remove if not needed) 注释)。
  • 全部功能通过 5 个 Mixin + 1 个 coremod 加载器实现,附带一个 access transformer。
  • 配置全部走 17 个 JVM system property(-Dheadlessnh.*),没有 .cfg / .json 配置文件。
  • 目标 mod(Angelica、Custom Main Menu)用于适配不同的主菜单与世界渲染器。

自动化

标记与闸门文件

  • Marker 与 Gate 文件 - 3 个标记文件与 3 个闸门文件的命名、目录、轮询间隔与超时语义

阶段状态机

  • Stage 状态机 - MULTIPLAYER → SINGLEPLAYER → DONE 的推进逻辑、连接失败重试与拆除世界

系统属性

  • System Properties - 全部 17 个 headlessnh.* 系统属性、默认值与生效范围

Mixin

Minecraft 菜单驱动

  • MinecraftMixin - 主入口:监听 displayGuiScreen 自动点击主菜单/世界选择/多人/直连/断开/暂停菜单

世界加载检测

  • 世界加载检测 - WorldRendererMixin 与 Angelica/Celeritas 下的 CeleritasWorldRendererMixin

窗口焦点

Custom Main Menu 适配

加载器与 AT

源码

Git commit: 4eea6e6