医疗包按键

基本信息

属性 值
字段 ClientProxy.MEDICAL_KEY(proxy/ClientProxy.java:27)
键名 GraviSuite MedKit
分类 GraviSuite(在「选项 → 控制」下的独立分组)
默认键 无绑定(Keyboard.KEY_NONE)
注册方式 ClientRegistry.registerKeyBinding(ClientProxy.java:38)
监听事件 KeyInputEvent(ClientProxy.java:192-193)
侧别 仅客户端

本 mod 只注册这一个按键。它不用 GTNHLib 的 SyncedKeybind,而是标准 FML KeyBinding + KeyInputEvent。

行为

onKeyInput(ClientProxy.java:192-200)的触发条件:

  1. 聊天界面未打开(!isGUIOpen(GuiChat.class))
  2. MEDICAL_KEY.isPressed()(1.7.10 的 isPressed 为边沿触发,每次按下计一次,不会每 tick 重复)

满足后:

步骤 行为 源码
1 读玩家胸甲槽(armorItemInSlot(2)) :195
2 非空且物品 == GraviSuite.graviChestPlate :196
3 发出 PacketKeyPress.issue(4) :197

即「穿着量子护盾胸甲时按此键,向服务端请求一次医疗包」。伤害/治疗的具体结算在父模组 GraviSuite 内完成(不在本 wiki 收录范围)。

已知注意点

  1. 默认无绑定:出厂状态该键不响应任何按键,玩家必须自行在「选项 → 控制 → GraviSuite」分组里绑定
  2. 只认胸甲槽的精确实例:判定用 itemstack.getItem() == GraviSuite.graviChestPlate(对象引用相等),量子护盾胸甲的染色变体或被替换的等价物品都不触发
  3. 无 isGUIOpen 之外的 GUI 屏蔽:只判断了聊天界面。打开箱子、任务书等任何 GUI 时按此键仍会发包(此时 thePlayer 存在,故不会崩,但会误触发医疗包)
  4. 第 3 步的包号 4 是父模组协议:PacketKeyPress.issue(4) 中的 4 必须在父模组侧有对应处理,本 mod 自己不发包