打开界面热键

TaskNH 只注册 1 个按键绑定,没有第二个。

完整定义

proxy/ClientProxy.java:

public static final KeyBinding KEY_OPEN_GUI = new KeyBinding(
    "key.tasknh.open",
    Keyboard.KEY_Y,
    "key.categories.tasknh");
项 值
字段名 KEY_OPEN_GUI(public static final)
类型 net.minecraft.client.settings.KeyBinding
翻译键 key.tasknh.open → en_US.lang 中为 “Open TaskNH”
默认键 Keyboard.KEY_Y —— 即键盘 Y
按键分类 key.categories.tasknh → “TaskNH”(在 Forge 按键设置里单独成一类)
修饰键 无(构造器只传两个参数,没有 Ctrl/Shift/Alt 组合)

注册发生在 ClientProxy.init():ClientRegistry.registerKeyBinding(KEY_OPEN_GUI);

行为

ClientProxy.onClientTick(TickEvent.ClientTickEvent),注册在 FML 总线,只处理 phase == END:

if (KEY_OPEN_GUI.isPressed()) { TaskNHGui.open(); }
TaskNHGui.tick();

每 tick 末尾检测一次,按下即调 TaskNHGui.open()(开一个空的 TaskNHGuiData,不选中任何任务)。TaskNHGui.open() 只是把数据存进 pendingOpen,真正构建界面由紧随其后的 TaskNHGui.tick() 完成,见 主界面 GUI。

松开/长按不会重复触发——KeyBinding.isPressed() 在 1.7.10 中只在该键本 tick 刚被按下时为真。

⚠️ 这个热键是纯客户端的:open() 不发任何封包,界面完全由本地缓存构建。在主菜单(未进世界)时按下不会有任何效果,因为 TaskNHGui 的构建依赖 TaskNHClientCache,而后者只在收到服务端同步后才有数据。

与命令的关系

除热键外,GUI 还能由服务端通过封包打开,见 网络协议 的 OpenGuiPacket:/tasknh gui 发无 taskId 版本,/tasknh open <taskId> 发带 taskId 版本。这两条需要 tasknh.gui / tasknh.open 权限,而热键不需要任何权限——客户端行为,无法被权限门控。

没有其他热键

grep -rnE "KeyBinding|KeyMapping|registerKey" --include=*.java src/ 在 ClientProxy.java 中只有 3 处命中:第 3 行 import、第 26 行 new KeyBinding、第 42 行 ClientRegistry.registerKeyBinding。仓库内没有 registerKeyMappings(1.19+ 风格),也没有 InputEvent 处理。

不过界面上还有几个不属于 TaskNH 的键:IconSlotWidget 的注释写明「With NEI installed, left-click opens the item’s recipes and the R and U hotkeys work over the slot」——这里的 R 与 U 是 NEI 自己的热键(配方/用法查询),TaskNH 只是让该槽位对 NEI 的悬停物品解析可见(mouseOver 处注释:「Lets NEI resolve the hovered item, so its R and U hotkeys work over this slot.」),从而把这两个键让渡给 NEI。此外还有 NEI 拖放的左/中/右键(见 主界面 GUI 的槽位交互约定)与 HUD 设置界面的 ESC 关闭(原生 GuiScreen 行为)。这些都不出现在 Forge 按键设置界面里,也不在 TaskNH 的控制之下。