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。
相关条目
- Mod 入口与生命周期 - 调用
proxy.registerTickers()的位置 - 常量与配置键名 -
PROXY_SERVER/PROXY_CLIENT常量 - 配置界面 - 此处注册的
GuiHandler详解