Horizon QA

[!INFO] Git Commit: e05abc0 | Updated: 2026-10-02

Horizon QA 是 GTNewHorizons 的 1.7.10 GameTest 框架——把现代 Minecraft 的 GameTest 机制回移到 Forge 1.7.10,让模组作者可以在真实服务端环境里写结构化测试、多方块测试与 CI 回归测试。 源码仓库 GTNewHorizons/Horizon-QA,mcmod.info 自述为 「A 1.7.10 backport of the modern Minecraft GameTest framework」。

它不是内容模组。 整个模组只注册 1 个物品(Horizon Wand 结构编辑工具), 0 个方块、0 个 TileEntity、0 个实体、0 个合成配方。它的真实内容面是 测试注解 API + 运行调度器 + 报告输出 + 客户端可视化编辑器,共 220 个 .java 源文件。

[!IMPORTANT] modid 与本分类名不同:源码中 @Mod(modid = HorizonQAMod.MODID), 而 HorizonQAMod.java:23 声明 MODID = "horizonqa" —— modid 是 horizonqa(无连字符), 本 wiki 分类名 horizon-qa 只是按驼峰转 kebab-case 规则从仓库名 Horizon-QA 推导而来。 实际使用中物品注册名是 horizonqa:wand,语言键前缀是 horizonqa.,网络频道名是 horizonqa。 资源域同样是 horizonqa 而非 horizon_qa。

模组通过运行时注解 + FML ASMDataTable 自动发现测试(@GameTestHolder / @GameTest), 无需中心注册表。运行行为由 13 个 JVM 系统属性(-Dhorizonqa.*)控制,分 off / interactive / ci 三种模式;ci 模式支持 turbo 加速(最高 100×)、 虚空世界、批量报告输出与进程退出码,常用于持续集成。interactive 模式则提供 Horizon Wand、结构模板编辑导出与 Horizon Editor 自由相机可视化。

源码语言为纯 Java(220 个 .java,0 个 .scala,0 个 .kt)。 另有 5 个 Mixin 注入 MinecraftServer / DedicatedServer / NetHandlerPlayServer / ItemStack / FMLCommonHandler,以及 1 个 1.7.10 版本的 IFMLLoadingPlugin (asm/HorizonQALoadingPlugin.java,其 getASMTransformerClass() 等方法均返回 null, 即占位声明、不实际参与字节码转换)。

[!NOTE] 仓库内的 examples/ 是 Gradle 子项目,包含一个独立的示例模组 com.gtnewhorizons.horizonqa.examples.ExamplesMod(自带 @Mod 注解与独立 mcmod.info)。 它不是 Horizon-QA 本体,本 wiki 各页均未计入其内容。

配置列表

  • JVM 系统属性 - 13 个 -Dhorizonqa.* 开关,含运行模式、世界策略、turbo、报告路径

指令列表

  • /horizonqa 指令 - 13 个子指令(别名 /qa,权限等级 2),覆盖运行控制、定位调试与结构编辑

物品列表

  • Horizon Wand - horizonqa:wand,结构选区与坐标标签编辑器,模组注册的唯一物品

API 列表

  • 测试注解与发现 - @GameTest / @GameTestHolder 等 5 个注解,ASM 自动发现测试
  • GameTestHelper API - 68 个公开方法:断言、世界操作、序列与流程控制
  • GTNH 多方块 API - 面向 GregTech 机器的 20 个扩展方法与 GT5UnofficialAdapter 反射适配层
  • 测试事件日志 - 37 个事件类型,按发出顺序回看测试内的机器行为

测试运行列表

  • 测试执行与状态机 - 7 个状态、START/END 两阶段、5×5 测试格网格与区块强制加载
  • 报告输出 - JUnit XML + 状态 JSON 双报告,退出码 0/1/2 与原子写入

结构列表

界面列表

  • Horizon Editor - F10 开启的自由相机编辑器,3 种变换工具 + 标签面板
  • HUD 与渲染器 - 18 个客户端渲染文件、2 个键位与语言文件