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 拦截。

相关条目