第三方模组兼容 Mixin

基本信息

属性 值
Mixins 条目 3(XAEROS_MINIMAP_SCROLL、XAEROS_WORLDMAP_SCROLL、OPENCOMPUTERS_KEYBOARD_INPUT_FIX)
源码注释标记 // Mod compat patches(Mixins.java:50)
包含的 mixin 类 3
注册位置 Mixins.java:51-59

这是 Mixins 枚举中仅有的 3 个受目标模组条件门控的条目——其余 9 个条目对所有环境无条件应用或只受配置开关控制。

功能

XAEROS_MINIMAP_SCROLL(Mixins.java:51-53,Phase.LATE)

  • mixin 类:xaeros.XaerosMinimapScrolling(源文件位于 mixins/late/xaeros/)
  • 目标模组:TargetedMod.XAEROS_MINIMAP,按 modId XaeroMinimap 匹配(TargetedMod.java:29)
  • 目标 GUI(4 个):GuiAddWaypoint、GuiEntityRadar、GuiTransfer、GuiWaypoints(XaerosMinimapScrolling.java:16,来自 xaero.common.gui.*)
  • 核心修改:@ModifyConstant(method = "handleMouseInput", constant = @Constant(intValue = 120), expect = -1),把滚轮增量 120 重标定为 1(XaerosMinimapScrolling.java:20-23)。120 是 Xaero 假定"一次滚轮一格"的值,LWJGL3/SDL 下实际像素级增量不同。
  • 另在 initGui()V 的 HEAD 注入 lwjgl3ify$onInit(XaerosMinimapScrolling.java:25-26)。

XAEROS_WORLDMAP_SCROLL(Mixins.java:54-56,Phase.LATE)

  • mixin 类:xaeros.XaerosWorldmapScrolling
  • 目标模组:TargetedMod.XAEROS_WORLDMAP,按 modId XaeroWorldMap 匹配(TargetedMod.java:30)
  • 目标 GUI(1 个):xaero.map.gui.GuiMap(XaerosWorldmapScrolling.java:9)
  • 相同的 120→1 重标定(XaerosWorldmapScrolling.java:13-16)

幂等性设计

两个 Xaeros mixin 源码里都有同一条注释:// Optional because an old hodgepodge patch might also do the same(XaerosMinimapScrolling.java:19、XaerosWorldmapScrolling.java:12)。

对应的实现手法是 expect = -1:该参数使修改器在目标常量不存在时静默跳过,因此即使 Hodgepodge 已先行打过同一补丁,LWJGL3ify 也不会因"找不到待改常量"而崩溃。这两处是本仓库中少见的有意容错设计,与 ObjectHolderRef 那类无条件 catch (Throwable) 降级不同。

OPENCOMPUTERS_KEYBOARD_INPUT_FIX(Mixins.java:57-59,Phase.EARLY)

  • mixin 类:oc.OcInputBuffer(源文件位于 mixins/early/oc/)
  • 目标模组:TargetedMod.OPENCOMPUTERS
  • 目标:li.cil.oc.client.gui.traits.InputBuffer$class(OcInputBuffer.java 的 @Mixin(remap = false, targets = {...}))

与另两个不同,OpenComputers 补丁是 EARLY 阶段而非 LATE。TargetedMod.OPENCOMPUTERS 用 setCoreModClass("li.cil.oc.client.launch.TransformerLoader") + setModId("OpenComputers") 双重匹配,源码注释写明"同时支持 NH 分支与上游"(TargetedMod.java:31-33)。

数值

数值 值 来源
受目标模组门控的条目数 3 Mixins.java:51,54,57
LATE 阶段条目 2 Mixins.java:51,54
EARLY 阶段条目 1 Mixins.java:57
目标 GUI 类总数 6(Xaero Minimap 4 + WorldMap 1 + OC 1) 各 mixin 文件 @Mixin
expect = -1 幂等修改点 2 XaerosMinimapScrolling.java:20、XaerosWorldmapScrolling.java:13
滚轮增量重标定 120 → 1 同上

交互

触发 行为
装了 XaeroMinimap,在其 4 个 GUI 滚轮 滚轮增量由 120 归一为 1,缩放不再跳变
装了 XaeroWorldMap,在地图 GUI 滚轮 同上
未装对应模组 整个条目不加载
Hodgepodge 已打过相同补丁 expect = -1 使本次修改静默跳过,不报错

相关条目