NEI 输入处理器注册
基本信息
| 属性 | 值 |
|---|---|
| 实现接口 | codechicken.nei.guihook.IContainerInputHandler |
| 实现类 | handlers/KeyboardEventHandler.java:19 |
| 单例 | KeyboardEventHandler.INSTANCE(:21,public static final) |
| 注册入口 | ClientProxy.init → GuiContainerManager.addInputHandler(KeyboardEventHandler.INSTANCE)(ClientProxy.java:13) |
| 代理声明 | @SidedProxy(clientSide = "...ClientProxy", serverSide = "...CommonProxy")(NoHotbarNeeded.java:20-23) |
侧别分工
CommonProxy.init 是空方法(CommonProxy.java:7)。所有实际逻辑只在 ClientProxy 里,服务端侧本模组不做任何事(只保留网络处理器)。
NoHotbarNeeded.init(:25-29)的顺序是:先建网络通道 NETWORK,再调 proxy.init(event)。服务端也会建通道,但不会注册输入处理器。
IContainerInputHandler 的 8 个方法实现情况
本模组只实现 1 个方法,其余 7 个为空桩或直接 return false:
| 方法 | 实现 | 行号 |
|---|---|---|
lastKeyTyped |
有完整逻辑 | :41-67 |
keyTyped |
return false |
:31-33 |
onKeyTyped |
空 | :36-38 |
mouseClicked |
return false |
:70-72 |
onMouseClicked |
空 | :75-77 |
onMouseUp |
空 | :80-82 |
mouseScrolled |
return false |
:85-87 |
onMouseScrolled |
空 | :90-92 |
onMouseDragged |
空 | :95-97 |
使用 lastKeyTyped 而非 keyTyped,意味着返回 true 时该按键会被标记为已消费,阻止其他容器处理器再处理同一次按键。
依赖
@Mod(dependencies = "required-after:NotEnoughItems@[2.8.93,);")(NoHotbarNeeded.java:13)——NEI 是硬依赖,版本下限 2.8.93,且用 Maven 范围语法 ,[2.8.93,) 表示"2.8.93 及以上"。
Gradle 侧对应 api("com.github.GTNewHorizons:NotEnoughItems:2.8.93-GTNH:dev")(dependencies.gradle),用的是 api 配置,即 NEI 类型出现在本模组公开 API 面上。
限制
- 本模组不注册任何 recipe handler、usage handler 或 overlay,只是借用 NEI 的输入分发机制。整个 mod 与 NEI 的耦合面仅此一个
addInputHandler调用。 - 因为强依赖 NEI,在没有 NEI 的服务端上也会因
dependencies声明被 FML 拦截。
相关条目
- 激活物品热键 - 在
lastKeyTyped中被比对 - ActivateItemRequest 网络包 - 判定通过后发出的消息
- ActivatableFromInventoryServerSide API - 判定条件