/horizonqa 指令

基本信息

属性 值
指令名 horizonqa(HorizonQACommand.java:64-66)
别名 qa(HorizonQACommand.java:80-82)
实现类 com.gtnewhorizons.horizonqa.command.HorizonQACommand(继承 CommandBase)
权限等级 2(HorizonQACommand.java:74-76)
注册时机 FMLServerStartingEvent 中 event.registerServerCommand(...)(CommonProxy.java:105)
子指令数 13
多标签页 LABEL_SUBCOMMANDS = { list, remove, clear }(HorizonQACommand.java:55)

[!IMPORTANT] 指令只在 mode 不为 off 时注册:serverStarting 在 isOff() 时提前返回 (CommonProxy.java:99)。off 模式下 /horizonqa 与 /qa 完全不存在。

功能

/horizonqa 是 Horizon-QA 的全部玩家可见操作面。所有子指令在 processCommand 的 switch 中分发 (HorizonQACommand.java:91-135),并带 Tab 补全(HorizonQACommand.java:140-180)。

指令分三类:运行控制、定位调试、结构编辑。

运行控制

子指令 参数 行为 来源
run <testId> 启动单个已发现测试;未知 id 会提示用 runall 列出 HorizonQACommand.java:182-233
runall [selector] 启动全部或选择器匹配的测试;返回启动/跳过/失败三个计数 HorizonQACommand.java:235-313
runfailed — 重跑上一次运行中失败/超时/报错的测试,按 executionOrder() 排序 HorizonQACommand.java:315-369
clearall — 清除所有已放置的测试格 HorizonQACommand.java:650-665
  • runall 会对"所需 mod 未加载"而被跳过的测试单独计数并提示(HorizonQACommand.java:276-293)
  • 失败的启动(TEMPLATE_ERROR 标记)会单独提示数量(HorizonQACommand.java:294-301)
  • runfailed 的失败集合在交互模式取自 InteractiveTestSession,在 CI 批次模式取自 RunResult (HorizonQACommand.java:433-450)

定位调试

子指令 参数 行为 来源
tp <testId> 传送到测试格中心上方 HorizonQACommand.java:371-431
runthis — 重跑玩家当前所在位置的测试格 HorizonQACommand.java:526-550
runthat — 重跑玩家视线 64 格内的测试格 HorizonQACommand.java:552-570
pos — 输出测试 id、世界坐标、相对坐标,并给出可点击复制的 helper.absolute(x,y,z) HorizonQACommand.java:596-648
  • tp 目标点为测试格中心 (minX+maxX+1)/2, maxY+2, (minZ+maxZ+1)/2(HorizonQACommand.java:414-416)
  • tp 必须在主世界(dimensionId == 0)执行,否则报错(HorizonQACommand.java:407-412)
  • tp 会先卸下玩家坐骑再传送(HorizonQACommand.java:418-420)
  • pos 找不到所在格时会回退到最近的测试格(HorizonQACommand.java:611-618)
  • pos 输出的 helper.absolute(...) 带有 SUGGEST_COMMAND 点击事件(HorizonQACommand.java:643-647)

结构编辑

见 结构模板与导出 专页;此处仅列入口: load / export / clear / label / labels(HorizonQACommand.java:667-1096)。

数值

数值名 值 来源
子指令数量 13 HorizonQACommand.java:53-54
labels 子子指令数量 3 HorizonQACommand.java:55
权限等级 2 HorizonQACommand.java:74-76
别名数量 1(qa) HorizonQACommand.java:80-82
runthat 视线搜索距离 64 格 HorizonQACommand.java:565
tp 传送高度偏移 格顶 +2 HorizonQACommand.java:415

Tab 补全覆盖

参数位 补全来源 来源
第 1 位 13 个子指令名 HorizonQACommand.java:141-143
run 第 2 位 全部测试 id(catalog.testIds()) HorizonQACommand.java:145-150
runall 第 2 位 选择器候选(catalog.selectorCandidates()) HorizonQACommand.java:151-156
tp 第 2 位 已放置测试格 id HorizonQACommand.java:157-159
load 第 2 位 模板名(catalog.templateNames()) HorizonQACommand.java:160-165
labels 第 2 位 list / remove / clear HorizonQACommand.java:166-168
labels remove 第 3 位 手持 Wand 上的标签名 HorizonQACommand.java:170-178

交互

模式门控

  • runthis / runthat / pos / clearall / load 仅在 interactive 模式可用, 其他模式返回 “That command is only available in interactive mode”(HorizonQACommand.java:494-505、866-873)
  • run / runall / runfailed 在两种模式下都可用,但走的执行通道不同: interactive 走 InteractiveTestSession,ci 走 ReportedRun 报告批次 (HorizonQACommand.java:204-210、260-270、334-344)
  • export / clear / label / labels 没有模式门控,但都需要玩家手持或背包内有 Wand (HorizonQACommand.java:1197-1209)

并发保护

run / runall / runfailed / runthis / runthat / clearall / load 都会先检查 GameTestRunner.isBatchActive(),已有执行在进行时拒绝并提示 (HorizonQACommand.java:486-492)。

参数校验

  • load 的旋转参数必须是 0–3 的顺时针四分之一圈,否则报错(HorizonQACommand.java:875-888)
  • export 的名字必须匹配 [A-Za-z0-9_.-]+(/[A-Za-z0-9_.-]+)*+(StructureExporter.java:35)

相关条目