Mixins

6 个构建器常量,管辖 16 个 mixin 类

基本信息

属性 值
路径 com.gtnewhorizons.navigator.mixins.Mixins
行数 68
类型 enum implements IMixins
格式化豁免 // spotless:off … // spotless:on(:12、:55)

⚠️ 整段被 spotless 格式化豁免包住 —— 因为 MixinBuilder 的链式调用每行很长,手动换行才可读。

6 个常量

常量 行 phase 目标模组 mixin 类数
TEXTURE_ATLAS_SPRITE_ACCESSOR :13-15 EARLY 无 1
ENABLE_STENCIL :16-21 EARLY XaeroMiniMap + XaeroWorldMap 1
JOURNEYMAP_V5 :22-33 LATE JourneyMap 7
JOURNEYMAP_V6 :34-38 LATE JourneyMap 2
XAEROS_GUI :39-43 LATE XaeroWorldMap 1
XAEROS_MINIMAP_WAYPOINT :44-48 LATE XaeroMiniMap 1
XAEROS_MINIMAP_RENDERER :49-54 LATE XaeroMiniMap + XaeroWorldMap 1

⚠️ 表中是 7 行但标题写「6 个构建器」 —— 实际 JOURNEYMAP_V5(7 类)、JOURNEYMAP_V6(2 类)等 共 7 个枚举常量(TEXTURE_ATLAS_SPRITE_ACCESSOR、 ENABLE_STENCIL、JOURNEYMAP_V5、JOURNEYMAP_V6、 XAEROS_GUI、XAEROS_MINIMAP_WAYPOINT、XAEROS_MINIMAP_RENDERER)。

⚠️ JOURNEYMAP_V5 没有 MixinBuilder 描述串 —— 其余 6 个都有 new MixinBuilder("Force enables stencil buffer") 这样的首参, JOURNEYMAP_V5(:22)是 new MixinBuilder() 无参。

⚠️ JOURNEYMAP_V6 也无描述串(:34)—— 所以两个 JM 构建器都没有描述,只有 Xaero 与 stencil 那个有。

⚠️ 目标模组用 addRequiredMod 累加(:17-18、:50-51): ENABLE_STENCIL 与 XAEROS_MINIMAP_RENDERER 各调 2 次 addRequiredMod(XaeroMiniMap 且 XaeroWorldMap), 即两个都装才应用。

setApplyIf 的 6 个条件

构建器 setApplyIf 行
TEXTURE_ATLAS_SPRITE_ACCESSOR 无 —
ENABLE_STENCIL () -> ModuleConfig.enableXaeroMinimapModule :20
JOURNEYMAP_V5 () -> enableJourneyMapModule && Util.isJourneyMapV5Installed() :25
JOURNEYMAP_V6 () -> enableJourneyMapModule && Util.isJourneyMapV6Installed() :37
XAEROS_GUI () -> ModuleConfig.enableXaeroWorldMapModule :42
XAEROS_MINIMAP_WAYPOINT () -> ModuleConfig.enableXaeroMinimapModule :47
XAEROS_MINIMAP_RENDERER () -> ModuleConfig.enableXaeroMinimapModule :53

⚠️ ENABLE_STENCIL 的 setApplyIf 只判 enableXaeroMinimapModule, 而 addRequiredMod 要求 两个 Xaero 模组都在。 所以「装了 World Map 但没装 Minimap」→ 条件为真但模组不满足 → 不应用; 「两个都装但关了 Minimap 开关」→ 也不应用。见分类页缺陷 7。

⚠️ 两个 Xaero minimap 构建器共用同一个 setApplyIf (:47 与 :53 都是 enableXaeroMinimapModule)。

⚠️ JOURNEYMAP_V5 的描述串缺失(见上), 而 getLateMixins 会用描述串打日志。

addClientMixins 的 14 个类

全部是 addClientMixins(无 addServerMixins)—— 所以服务端不应用任何 mixin(与 CommonProxy 的分析一致)。

构建器 类(相对 ...mixins.late 或 .early)
TEXTURE_ATLAS_SPRITE_ACCESSOR minecraft.TextureAtlasSpriteAccessor
ENABLE_STENCIL minecraft.ForgeHooksClientMixin
JOURNEYMAP_V5 journeymap.DisplayVarsAccessor、journeymap.FullscreenAccessor、journeymap.FullscreenMixin、journeymap.MiniMapMixin、journeymap.RenderWaypointBeaconMixin、journeymap.WaypointManagerMixin、journeymap.TextureCacheMixin
JOURNEYMAP_V6 journeymap.v6.FullscreenMixin、journeymap.v6.MapChatMixin
XAEROS_GUI xaerosworldmap.GuiMapMixin
XAEROS_MINIMAP_WAYPOINT xaerosminimap.WaypointsIngameRendererMixin
XAEROS_MINIMAP_RENDERER xaerosminimap.MinimapRendererMixin

⚠️ EARLY 的两个类前缀是 minecraft. (minecraft.TextureAtlasSpriteAccessor、minecraft.ForgeHooksClientMixin), 对应 mixins.navigator.early.json 的 package com.gtnewhorizons.navigator.mixins.early。

⚠️ journeymap.FullscreenMixin 与 journeymap.v6.FullscreenMixin 同名 (分别在 FullscreenMixin 343 行与 JourneyMapV6FullscreenMixin 42 行)—— 不同包、不同目标类(都是 Fullscreen.class 但属于 JM5 / JM6), 极易混淆。

getBuilder(:63-67)

@NotNull @Override public MixinBuilder getBuilder() { return builder; }

private final MixinBuilder builder(:57),构造器注入(:59-61)。

相关