Proxy(CommonProxy / ClientProxy)
文件
| 类 | 路径 | 行数 |
|---|---|---|
CommonProxy |
src/main/java/com/gtnewhorizons/angelica/proxy/CommonProxy.java |
26 |
ClientProxy |
src/main/java/com/gtnewhorizons/angelica/proxy/ClientProxy.java |
446 |
proxy 包共 2 个文件。NotFine 另有自己的一套(jss.notfine.proxy,2 个文件)。
CommonProxy:唯一的方块注册点
// CommonProxy.java:12-16
public void preInit(FMLPreInitializationEvent event) {
if (AngelicaConfig.enableTestBlocks) {
GameRegistry.registerBlock(new BlockTest(), "test_block");
}
}
init / postInit 均为空实现(:18、:20)。
两个方法在服务端直接抛异常,防止服务端误调:
| 方法 | 行 | 行为 |
|---|---|---|
putFrametime(long) |
:23 |
throw new UnsupportedOperationException() |
putTicktime(long) |
:25 |
throw new UnsupportedOperationException() |
注释 :22 标明「Only present on the client!」—— ClientProxy 覆写了这两个方法。
ClientProxy:真正的行为集中地
ClientProxy extends CommonProxy,final 类,构造即持有 Minecraft.getMinecraft()(:109)。它 import 了 Sodium、Iris、Reese’s Sodium Options、BOP、gtnhlib 的 VAOManager/ModelRegistry 等 40 余个类型 —— Angelica 把多个渲染库揉进了一个 jar,Proxy 是它们的装配点。
preInit(:132-147)
| 行 | 动作 |
|---|---|
:134 |
ModStatus.preInit() —— 探测各 mod 是否加载 |
:135 |
遍历 AngelicaConfig.dynamicBoundsTileEntities,调 TileEntityRenderBoundsRegistry.registerDynamicClass(name) |
:137-138 |
把 this 注册到 FML bus 与 Forge EVENT_BUS |
:139 |
注册 EmissiveTextureAutoloader |
:140 |
注册 AngelicaTesrMeshCache.ReloadListener |
:141 |
ModelRegistry.registerModid(MOD_ID) —— 向 gtnhlib 登记 modid,供 JSON ISBRH 模型用 |
:142 |
blockError = new BlockError() |
:143-146 |
enableIris 时:IrisGLSMBridge.installImmediateExtendedHandler() + Iris.warmupShaderTransforms() |
init(:149-212)
| 行 | 动作 |
|---|---|
:153-155 |
enableHudCaching 时 HUDCaching.init() |
:156 |
CeleritasSetup.ensureInitialized() |
:157-162 |
读 SodiumGameOptions,为 null 则取 FrameRateOptions.defaultMode(),同步到 gameSettings.enableVsync 与 GLStateManager.setVSyncPreference |
:163-166 |
FramePacer.setIdleWork(...) —— 把空闲帧工作接到 CeleritasWorldRenderer.runFrameIdleWork |
:168-175 |
enableIris 时:注册 IrisGLSMBridge / IrisDebugScreenHandler,并把 Iris.INSTANCE 同时注册到 FML bus 与 EVENT_BUS |
:176-178 |
!enableVAO 时 VAOManager.disableVao() |
:183-185(preInit 段内) |
BetterCrashes 已加载则 BetterCrashesCompat.init() |
:187-189 |
enableZoom 时 Zoom.init() |
:189 |
FpsReducer.init() |
:190 |
注册 DebugKeyHandler |
:191 |
AngelicaConfig.applyGpuCullingMode() |
:192-194 |
enableDynamicLights 时 EntityLightConfig.init(mc.mcDataDir/config) |
:195-198 |
optimizeInWorldItemRendering 时注册 Item/Block 两个 RenderListManager 的 reload listener |
:201-203 |
debugTooling() 或 Tracy 开启时注册 /angelica 命令 |
:204-208 |
debugTooling() 时挂 FlybyRunner / FlybyFallGuard |
:209-211 |
Tracy 开启时 TracyCaptureNotifier.INSTANCE.register() |
postInit(:215-231)
:218-227若ModStatus.isLotrLoaded && CompatConfig.fixLotr,用ReflectionHelper.setPrivateValue把 LOTRBlockRendering的三个私有缓存字段替换为ConcurrentHashMap,换成线程安全版本;找不到类则打 ERROR 日志「Could not replace LOTR handle render code with thread safe version」。:228-230若ModStatus.isBOPLoaded,取BOPCBlocks.newBopGrass存入静态字段bopGrass。
这是整个 mod 里唯一对第三方 mod 私有字段做反射替换的地方,且用的是 Mixin 之外的第二条路径。
视频设置界面的三方分叉
onGuiInit(:385-403)拦截 GuiVideoSettings 并 event.setCanceled(true),然后按优先级弹出不同界面:
| 条件 | 弹出界面 |
|---|---|
enableNotFineOptions 或 按住 Shift |
GuiCustomMenu,带 5 个分页:general / detail / atmosphere / particles / other |
!enableReesesSodiumOptions 或 按住 Ctrl |
SodiumOptionsGUI(原版 Sodium) |
| 其余(默认) | ReeseSodiumVideoOptionsScreen |
三者互斥,Shift / Ctrl 是强制覆盖快捷键。
其它事件处理
| 方法 | 行 | 行为 |
|---|---|---|
onF3Update |
:320-367 |
modernizeF3Screen 时重写 F3 调试屏:合并 x:/y:/z:/f: 四行为 XYZ: / Block: / Chunk: / Facing: / lc:,并在启用 FPS 图时绘制 frametime 与 TPS 曲线 |
onGuiOpen |
:372-383 |
首次打开主菜单时打印游戏加载耗时;enableZoom 且打开任意 GUI 时 Zoom.resetZoom() |
onFogColor |
:406-411 |
把 NaN 雾色钳回 0(注释标明来自 ArchaicFix,对应 Mojang bug MC-10480) |
onTick |
:413-418 |
ClientTick END 阶段 CloudRenderer.getCloudRenderer().checkSettings() |
onFOVModifierUpdateEarly |
:421-427 |
FOVMode.MODS 时把原版 FOV 效果清零(priority = HIGHEST) |
onFOVModifierUpdateLate |
:430-435 |
FOVMode.NONE 时清零全部 FOV 动态(priority = LOWEST) |
两个 FOV 处理器用不同优先级实现三级模式(vanilla / mods / none),注释明确说明「only disables FOV changes from vanilla, leaving mod FOV changes untouched」。
相关条目
- AngelicaMod - 主类
- KeyBinding 注册总表 - 本类注册的 3 个按键
- AngelicaModulesConfig -
enableHudCaching/enableIris/enableZoom等开关 - AngelicaClientTweaker - Proxy 运行前就已完成的配置加载