Proxy 体系

基本信息

属性 值
抽象基类 com.github.lunatrius.core.proxy.CommonProxy
客户端实现 com.github.lunatrius.core.proxy.ClientProxy
服务端实现 com.github.lunatrius.core.proxy.ServerProxy
唯一抽象方法 public abstract void registerTickers();

三个类都只有这一个方法,全部逻辑量集中在 ClientProxy 的 5 行实现里。

方法实现对照

类 registerTickers() 实现 注册了什么
CommonProxy abstract —
ClientProxy FMLCommonHandler.instance().bus().register(new ConfigurationHandler()); + MinecraftForge.EVENT_BUS.register(new GuiHandler()); 2 个事件处理器
ServerProxy 空方法体 无

[!IMPORTANT] 服务端侧本 mod 是完全空转的。 ServerProxy.registerTickers() 什么都不做,因此 ConfigurationHandler 与 GuiHandler 都只在客户端存在——服务端即使修改配置也不会触发重载(但配置值在 preInit 已被读取过一次)。

注册的两个处理器

对象 注册到的总线 订阅事件 作用
new ConfigurationHandler() FML 总线(FMLCommonHandler.instance().bus()) ConfigChangedEvent.OnConfigChangedEvent 配置变更后重新加载,见配置项
new GuiHandler() MinecraftForge.EVENT_BUS GuiOpenEvent 改写 FML 模组列表页,见配置界面

[!WARNING] ClientProxy 没有注册 VersionTicker(见版本检测)或 DelayedGuiDisplayTicker(见延迟打开界面)。后者的注册入口是它自己的静态 create() 方法,调用方只能是外部 mod。

相关条目