API 参考 / 事件系统
KeyEvent
全局按键分发时投递:按下 / 抬起 / 长按,type() 为 InputType.KEY_PRESSED / KEY_RELEASED / KEY_HELD。宿主由进程级转播桥(GlobalKeyEventRelay)把内核按键事件同步转译到模组总线,一次订阅跨游玩有效。
方法速览
| 方法 | 用途 |
|---|---|
keyCode() | 按键码(与宿主键位编码一致) |
type() | 输入类型 |
keyCode()
java
public int keyCode();行为:返回按键码,与宿主键位编码一致(AWT key code 口径)。
type()
java
public InputType type();行为:返回输入类型:KEY_PRESSED / KEY_RELEASED / KEY_HELD。转播桥对未知类型直接丢弃。
示例
java
ctx.eventBus().subscribe(KeyEvent.class, event -> {
if (event.type() == InputType.KEY_PRESSED && event.keyCode() == 0x70) {
toggleOverlay();
}
});完整签名
java
public class KeyEvent extends CancellableEvent {
public KeyEvent(int keyCode, InputType type);
public int keyCode();
public InputType type();
}行为核验与注意:类型上继承 CancellableEvent,契约语义是「DENY 表示宿主吞掉该次按键、不再向场景 / 模组转发」;但当前宿主实现(GlobalKeyEventRelay)只做转译并 post,不读取返回事件的 isDenied(),因此 DENY 目前不会改变按键分发。需要真正拦截按键请用 LaneInputEvent.Pre(游玩内轨道)或全局快捷键能力(ModContext#hotkeys())。玩家可见、需要改键的快捷键应经全局快捷键注册,不要用本事件实现隐性快捷键。
线程:游戏线程(内核输入分发线程)。
稳定性:2.0 起冻结,2.x 内只增不破。