KeyHelper
Shift / Ctrl 读取,含 Mac Command 兼容
基本信息
| 属性 | 值 |
|---|---|
| 路径 | squeek.tictooltips.helpers.KeyHelper |
| 行数 | 23 |
| 方法数 | 2(均 public static boolean) |
isCtrlKeyDown(:9-17)
boolean isCtrlKeyDown = Keyboard.isKeyDown(Keyboard.KEY_LCONTROL)
|| Keyboard.isKeyDown(Keyboard.KEY_RCONTROL);
if (!isCtrlKeyDown && Minecraft.isRunningOnMac)
isCtrlKeyDown = Keyboard.isKeyDown(Keyboard.KEY_LMETA)
|| Keyboard.isKeyDown(Keyboard.KEY_RMETA);
return isCtrlKeyDown;
| 平台 | 接受的物理键 |
|---|---|
| Windows / Linux | LCTRL、RCTRL |
| macOS | LCTRL、RCTRL、LMETA、RMETA(Command) |
⚠️ 源码注释(:10-11)写明原因:
GuiScreen.isCtrlKeyDown 在 Mac 上只认 OPTION 键,
所以这里额外放行 Meta(Command)。这是对原版行为的刻意偏离。
macOS 判定用的是 Minecraft.isRunningOnMac 字段,
在真正启动前该字段是 false(默认值),此时 Meta 不被接受。
isShiftKeyDown(:19-22)
return Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_RSHIFT);
无条件接受左右 Shift,无 Mac 特例。 与 Ctrl 不同,Shift 在 Mac 上没有 Option/Command 的歧义问题。
直接使用 LWJGL 而非 KeyBinding
本类绕过了 Minecraft 的 KeyBinding / GameSettings 体系,
直接查 org.lwjgl.input.Keyboard 静态状态。
后果:这两个键无法在 Minecraft 设置界面重绑定,
也不受 options.keyBindSneak 之类影响。属于本 mod 硬编码的交互。
调用点
| 调用方 | 位置 | 用途 |
|---|---|---|
isCtrlKeyDown |
TooltipHandler :145、:160 |
Ctrl 分支 |
isShiftKeyDown |
TooltipHandler :146、:292、:441 |
Shift 分支 / 箭杆材料展开 / 图纸材料全展开 |
:292 是三处 Shift 用法中最容易被忽略的一处:
判定「材料 ID 是否是箭杆材料」时用 matID <= MaterialID.Wood 卡掉
芦苇/烈焰箭杆与铁/燧石的材料 ID 重叠(TooltipHandler
的注释 :285-287 自称 “terribly hacky”)。
相关
- TooltipHandler - 唯一调用方