/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)
相关条目
- Horizon Wand -
load/export/label/labels/clear的前提物品 - 结构模板与导出 -
load与export的完整行为 - JVM 系统属性 -
mode决定哪些子指令可用