ClientProxy
注册
ACTION_KEY+ 条件注册调试图层
基本信息
| 属性 | 值 |
|---|---|
| 路径 | com.gtnewhorizons.navigator.ClientProxy |
| 行数 | 31 |
| 父类 | CommonProxy |
| 注解 | @EventBusSubscriber(side = Side.CLIENT)(:15) |
preInit(:18-25)—— 全部客户端初始化
@Override
public void preInit(FMLPreInitializationEvent event) {
super.preInit(event);
ClientRegistry.registerKeyBinding(NavigatorApi.ACTION_KEY);
if (GeneralConfig.enableDebugLayers) {
NavigatorApi.registerLayerManager(DirtyChunkLayerManager.INSTANCE);
}
}
| 步骤 | 说明 |
|---|---|
super.preInit |
CommonProxy 的空实现 |
registerKeyBinding(ACTION_KEY) |
注册 navigator.key.action(默认 DELETE) |
| 条件注册调试图层 | enableDebugLayers 默认 false → 默认不注册 |
⚠️ enableDebugLayers 默认 false(见
GeneralConfig),
所以 DirtyChunkLayerManager
默认不生效 —— 本仓自带的唯一可见图层是关着的。
⚠️ 只注册了一个图层管理器,且是调试用途。
本 mod 自己不注册任何消费方图层 ——
真正的图层由依赖本 mod 的其他模组在各自 preInit 里调
NavigatorApi.registerLayerManager(...)。
onClientConnect(:27-30)—— static
@SubscribeEvent
public static void onClientConnect(FMLNetworkEvent.ClientConnectedToServerEvent event) {
NavigatorApi.layerManagers.forEach(LayerManager::clearFullCache);
}
连上服务器时清空所有图层缓存。
⚠️ 方法是 public static + @SubscribeEvent,
而 FMLNetworkEvent.ClientConnectedToServerEvent 在主线程触发
(FML 网络线程 post 到主线程),所以遍历 layerManagers 是安全的。
⚠️ layerManagers 是 public static final List(非同步),
第三方模组在 preInit 追加、主线程遍历 ——
若某个 mod 在非主线程注册会 ConcurrentModificationException。
API 文档要求「客户端初始化期间注册一次」,靠约定保证。
为什么不覆写 init / postInit
三个钩子里只覆写了 preInit。
init / postInit 继承 CommonProxy 的空实现。
⚠️ 所以本 mod 没有 init / postInit 阶段的任何注册 ——
包括 NavigatorApi.layerManagers 的填充(由消费方做)
和 mixin 的注册(由 NavigatorCore /
NavigatorLateMixins 做)。
相关
- CommonProxy - 父类,三个空钩子
- NavigatorApi -
ACTION_KEY与registerLayerManager - GeneralConfig -
enableDebugLayers - DirtyChunkLayerManager - 条件注册的图层
- LayerManager -
clearFullCache