可选模组支持
基本信息
| 属性 | 值 |
|---|---|
| 覆盖范围 | 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 处:
WECUIPacketHandler.java:32—— 类声明自身WECUIPacketHandler.java:39——WECUI_CHANNEL.register(new WECUIPacketHandler()),位于从未被调用的init()内部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 覆写中注册),服务端不注册。