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)。
相关
- TargetedMod -
addRequiredMod的参数 - NavigatorCore -
getEarlyMixins的调用方 - NavigatorLateMixins -
getLateMixins的调用方 - Util - JM 版本判定