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 的标准做法。
相关
- ClientProxy - 覆写全部 5 个
- ServerProxy - 覆写 2 个
- PacketHandler -
init的唯一内容