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 做)。

相关