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”)。

相关