客户端运行时与事件

基本信息

属性 值
事件处理类 codechicken.core.internal.CCCEventHandler
注册位置 CodeChickenCoreModContainer.java:70-71(双总线)
相关类 ClientUtils、GuiModListScroll、CCUpdateChecker、ProfileTimer、TaskProfiler

功能

CodeChickenCoreModContainer 虽然不注册任何方块物品,但会在 init 阶段挂上若干客户端行为。全部逻辑在 event.getSide().isClient() 分支内(CodeChickenCoreModContainer.java:66),服务端不执行任何一行。

初始化时(CodeChickenCoreModContainer.java:66-72)依次做三件事:

调用 行 作用
ClientUtils.enhanceSupportersList("CodeChickenCore") :67 改写模组描述中的 “Supporters:” 为青色,并登记滚动列表
ClientUtils.registerLocalizedColourReloadListener() :68 注册资源重载监听器
new CCCEventHandler() :70-71 同一个实例同时注册到 FMLCommonHandler.instance().bus() 与 MinecraftForge.EVENT_BUS

CCCEventHandler

codechicken.core.internal.CCCEventHandler 是全仓 5 个 @SubscribeEvent 类之一,共 3 个处理方法:

方法 行 逻辑
clientTick(TickEvent.ClientTickEvent) :18-22 phase == END 时 renderTime++
renderTick(TickEvent.RenderTickEvent) :24-26 phase == START 时 renderFrame = event.renderTickTime
posGuiRender(GuiScreenEvent.DrawScreenEvent.Post) :30-32 @SideOnly(Side.CLIENT);当 event.gui instanceof GuiModList 时调用 GuiModListScroll.draw(...)

renderTime(int)与 renderFrame(float)是公开静态字段,供 ClientUtils.getRenderFrame() / getRenderTime() 读取(ClientUtils.java:37-43),后者合成为小数渲染时刻。

本地化颜色重载

ClientUtils.registerLocalizedColourReloadListener()(ClientUtils.java:74-83)向 IReloadableResourceManager 注册一个匿名 IResourceManagerReloadListener,在 onResourceManagerReload 中调用 LocalizedColours.reloadLocalizedColours()。这条链路的落点是 codechicken.lib.colour.LocalizedColours 的 24 个常量(见 几何、颜色与数学库)。

模组列表增强

ClientUtils.enhanceSupportersList(Object mod)(ClientUtils.java:66-71)通过 FMLCommonHandler.instance().findContainerFor(mod) 找到容器,把 description 中的 "Supporters:" 替换为带 EnumChatFormatting.AQUA 的形式,然后调用 GuiModListScroll.register(mod)。

工具类

类 说明
CommonUtils 跨端工具:isClient()、getSaveLocation(World) / (int)、getWorldName、getDimension、getMinecraftDir、getRelativePath、registerHandledEntity(Class, String)(CommonUtils.java:15-46)
ServerUtils 服务端工具:getPlayer、getPlayers、getPlayersInDimension、openSMPContainer、getGameProfile、isPlayerOP、isPlayerOwner、sendChatToAll(ServerUtils.java:22-98)
ClientUtils 客户端工具,继承 CommonUtils
ProfileTimer / TaskProfiler 性能计时
ClassDiscoverer 生态发现,见 CodeChicken 生态契约
IGuiPacketSender / IStringMatcher 接口

CCUpdateChecker 是空壳(已核实)

codechicken.core.CCUpdateChecker(22 行)的 6 个公开方法中,5 个是空方法体:

方法 行 状态
tick() :9 {} 空实现
addUpdateMessage(String s) :11 {} 空实现
mcVersion() :13-15 唯一有实现:返回 FMLInjectionData.data()[4]
updateCheck(String mod, String version) :17 {} 空实现
updateCheck(String mod) :19 {} 空实现
updateCheck(String url, Function<String, Void> handler) :21 {} 空实现

grep -rn 'CCUpdateChecker' --include='*.java' src/ 的命中仅有其自身的类声明一处——本仓内零调用方。

连带后果:语言文件中的 codechickencore.update=Version %s of %s is available(en_US.lang:1,de_DE/it_IT/ru_RU/uk_UA 各有 1 条同键翻译)没有任何 Java 代码读取。按「死代码 ≠ 注册内容」的口径,本模组不具备更新检查功能,该语言键为残留。

相关条目