可选模组支持

基本信息

属性 值
覆盖范围 NEI(NotEnoughItems)、CUI 协议、客户端参考手册 GUI
依赖声明 dependencies.gradle 中的 runtimeOnlyNonPublishable(NEI)、无(CUI/GUI)

NotEnoughItems(neid)

NEI 支持是 1.7.10 专属适配,用于放宽 WorldEdit 对方块 data 值的上限。

项目 值 证据
检测方式 Loader.isModLoaded("neid") ForgeWorldEdit.java:134
效果 BaseBlock.MAX_DATA = (1 << 16) - 1 ForgeWorldEdit.java:135
gradle 声明 runtimeOnlyNonPublishable 'com.github.GTNewHorizons:NotEnoughItems:2.8.72-GTNH:dev' dependencies.gradle
检测时机 preInit ForgeWorldEdit.java:104-137

NEI 存在时,MAX_DATA 从 1.7.10 原生的 4 bit 扩展到 16 bit,从而支持高 data 值的模组方块。注意用的是 modid neid(NotEnoughItems 的 id),不是 NotEnoughItems 本身。

runtimeOnlyNonPublishable 的语义(见 dependencies.gradle 头部注释)是「进 runClient/runServer 但不作为发布的 Maven 依赖」,因此 NEI 不是 WorldEdit 的硬依赖。

CUI 协议(WECUI)——⚠️ 入站通道未注册

项目 值 证据
通道名常量 CUI_PLUGIN_CHANNEL = "WECUI" ForgeWorldEdit.java:83
处理类 WECUIPacketHandler forge/WECUIPacketHandler.java:32
注册方法 WECUIPacketHandler.init() :37-40

init() 全仓无调用点。grep -rn 'WECUIPacketHandler' src/(含 src/test)仅命中 3 处:

  1. WECUIPacketHandler.java:32 —— 类声明自身
  2. WECUIPacketHandler.java:39 —— WECUI_CHANNEL.register(new WECUIPacketHandler()),位于从未被调用的 init() 内部
  3. ForgePlayer.java:122 —— send.getBytes(WECUIPacketHandler.UTF_8_CHARSET),只引用静态常量 UTF_8_CHARSET

因此:

  • NetworkRegistry.INSTANCE.newEventDrivenChannel("WECUI") 从不执行
  • 入站处理方法 onPacketData(:42-57,@SubscribeEvent ServerCustomPacketEvent)从不注册到 FML 事件总线
  • 但出站发送仍然有效:ForgePlayer.dispatchCUIEvent(ForgePlayer.java:114-125)照常在 :120-122 构造 S3FPacketCustomPayload 并在 WECUI 通道发出

结论:1.7.10 版只发不收 CUI 消息。//worldedit cui 只能由客户端主动调用,无法由服务端握手触发。属于「注册方法存在但从未被调用」的死注册。

客户端参考手册 GUI

项目 值 证据
GUI 处理类 forge/gui/GuiHandler —
GUI ID GuiHandler.REFERENCE_ID KeyHandler.java:42
注册位置 CommonProxy.registerHandlers() CommonProxy.java:25-26
注册调用点 ForgeWorldEdit.init → proxy.registerHandlers() ForgeWorldEdit.java:142
快捷键 Keyboard.KEY_L(L 键),分类 “WorldEdit” KeyHandler.java:33
按键名 “WorldEdit Reference” 同上
按键注册 ClientRegistry.registerKeyBinding(mainKey) KeyHandler.java:36
客户端注册 ClientProxy.registerHandlers() 额外 FMLCommonHandler.instance().bus().register(new KeyHandler()) ClientProxy.java:24-28

CommonProxy.registerHandlers 中的 NetworkRegistry.INSTANCE.registerGuiHandler(ForgeWorldEdit.inst, new GuiHandler()) 是活注册(经 ForgeWorldEdit.java:142 调用),与 WECUI 形成对比。

按键绑定仅在客户端(ClientProxy 覆写中注册),服务端不注册。

相关条目