CommonProxy

公共逻辑:logger 赋值 + 网络初始化

基本信息

属性 值
路径 com.github.lunatrius.ingameinfo.proxy.CommonProxy
行数 27
子类 ClientProxy、ServerProxy

五个钩子

方法 实现
preInit Reference.logger = event.getModLog();
init PacketHandler.init();
postInit 空 {}
serverStarting 空 {}
serverStopping 空 {}

5 个方法体共 5 行有效代码 + 4 个空实现。

⚠️ 三个空钩子(postInit / serverStarting / serverStopping) 在基类是空的,但子类全部覆写了它们 —— 基类的空实现只是为了满足 InGameInfoXML 的 @SidedProxy 转发链能编译。

⚠️ preInit 与 init 没有 @Override, 因为基类就是 CommonProxy 本身(不是接口)。子类才加 @Override。

preInit 的 logger 替换(:14-16)

public void preInit(FMLPreInitializationEvent event) {
    Reference.logger = event.getModLog();
}

用 FML 提供的 per-mod logger 覆盖 Reference 的 静态 logger。这是 1.7.10 mod 接 FML 日志的标准做法。

⚠️ 副作用是 Reference.logger 从 final 退化为可变静态字段 (见 Reference 条目),而它被客户端 tick 线程读取。

init 的网络注册(:18-20)

public void init(FMLInitializationEvent event) { PacketHandler.init(); }

⚠️ PacketHandler.INSTANCE 是 static final 字段初始化时创建的 (PacketHandler.java:13-14),即类加载时建通道; init() 只做 registerMessage。

⚠️ 客户端与服务端都会执行 PacketHandler.init()。 两个 registerMessage 都指定 Side.CLIENT(接收方向), 所以服务端注册它们是为了能发送,客户端注册是为了能接收 —— 这是 FML SimpleNetworkWrapper 的标准做法。

相关