HUD 与渲染器

基本信息

属性 值
包路径 com.gtnewhorizons.horizonqa.visual
渲染器文件总数 18(根目录 8 + drawables 4 + editor 6)
注册位置 ClientProxy.init(ClientProxy.java:23-35)
模式门控 仅 interactive 模式(ClientProxy.java:21-22)
键位数量 2
语言文件 assets/horizonqa/lang/en_US.lang(1 个)
键位分类 key.categories.horizonqa = Horizon QA

功能

Horizon-QA 的客户端可视部分由 9 个渲染器、2 个键位与 1 个语言文件构成。 全部只在 interactive 模式注册(见 Horizon Editor 同款门控)。

渲染器清单

visual/ 根目录 8 个(ls src/main/java/com/gtnewhorizons/horizonqa/visual/*.java):

类 注册于 作用
WandHudOverlay ClientProxy.java:33 手持 Wand 时的 HUD(模式、Pos1/Pos2、尺寸、标签数)
WandLabelRenderer ClientProxy.java:34 世界内标签文字渲染
GameTestOverlayRenderer ClientProxy.java:32 测试格 / 测试状态覆盖层
SelectionOutlineClientRenderer ClientProxy.java:31 选中方块轮廓
SelectionBoxRenderer CommonProxy.java:82 选区线框
VisualManager — 客户端可视化状态总控,被 clearAll 回调使用(ClientProxy.java:35)
WandLabelInput ClientProxy.java:24-26 标签键的客户端 tick 监听
WandLabelPrompt — 标签输入弹窗

[!NOTE] SelectionBoxRenderer 是唯一在 CommonProxy.preInit 注册的服务端侧渲染器, 且带模式门控 if (HorizonQAProperties.isActive())(CommonProxy.java:81-83)—— isActive() 覆盖 INTERACTIVE 与 CI 两种模式,与其他只认 interactive 的客户端组件不同。

visual/drawables/ 4 个可绘制基元(DebugBeacon FloatingText GhostBlockDiff HighlightBox) 为上述渲染器提供绘制元素。

键位

2 个键位,均注册在 key.categories.horizonqa 分类下(en_US.lang:74-76):

键位 键名 默认键 注册位置
标签键 key.horizonqa.label L WandLabelInput.java:19-22、24-26
自由相机键 key.horizonqa.freecam F10 WandFreecamController.java:55-58、108-110

标签键的处理在 ClientTickEvent 的 END 阶段轮询 isPressed()(WandLabelInput.java:29-33)。 打开标签输入框的前置条件:Minecraft 实例与玩家存在、当前无 GUI、自由相机未激活、手持 Wand (WandLabelInput.java:37-40)。

HUD 显示内容

WandHudOverlay 显示的行(en_US.lang:10-21):

行 键
模式 horizonqa.wand.hud.mode(SURFACE / BLOCK 两种)
Pos1 horizonqa.wand.hud.pos1,未设为 —
Pos2 horizonqa.wand.hud.pos2,等待中显示 aim & right-click
尺寸 horizonqa.wand.hud.size,格式 %s×%s×%s (%s)
标签 horizonqa.wand.hud.labels,选区外的标签额外标 (N outside)
标签键提示 horizonqa.wand.hud.label_key
自由相机键提示 horizonqa.wand.hud.freecam_key

其中 surface / block 模式对应 Wand 的表面模式:潜行点击时坐标是否沿面法线外推一格 (ItemHorizonWand.java:64-68)。

语言文件

assets/horizonqa/lang/en_US.lang 覆盖物品名、指令消息、Wand 提示、HUD、标签弹窗、 编辑器界面与键位共 4 组前缀(item.horizonqa.* / horizonqa.command.* / horizonqa.wand.* / key.horizonqa.*),共 77 行。

数值

数值名 值 来源
visual 包文件总数 9(根 8 + drawables 4 + editor 6,含 editor 6 计在内时目录文件共 18) ls visual/ 分目录统计
键位数量 2 ClientProxy.java:24-25、en_US.lang:75-76
drawables 基元数量 4 ls src/main/java/com/gtnewhorizons/horizonqa/visual/drawables/
editor 类数量 6 ls src/main/java/com/gtnewhorizons/horizonqa/visual/editor/
语言文件行数 77 wc -l assets/horizonqa/lang/en_US.lang
语言文件数量 1(仅 en_US.lang) ls assets/horizonqa/lang/

目录计数

目录 文件数
visual/*.java(根) 8
visual/drawables/ 4
visual/editor/ 6
合计 18

交互

  • 所有客户端组件在 ClientProxy.init 一次性注册,其中前 6 个挂到 MinecraftForge.EVENT_BUS, WandLabelInput 与 WandFreecamController 额外挂到 FMLCommonHandler.bus() (ClientProxy.java:24-34)
  • ClientProxy 继承 CommonProxy,init 先调 super.init(event) 完成网络通道初始化 (ClientProxy.java:20、CommonProxy.java:86-88)
  • 执行 /horizonqa clearall 时,客户端通过 InteractiveTestSession.onClearAllCallback 回调 VisualManager::clearAll 清理残留可视化(ClientProxy.java:35)

相关条目