Mixin 列表

基本信息

属性 值
Mixin 类 com.gtnewhorizons.gravisuiteneo.mixins(24 个类文件)
注册类 com.gtnewhorizons.gravisuiteneo.GraviSuiteNeoMixins(GTNHLib @LateMixin)
列表来源 硬编码在 Java 里,见 GraviSuiteNeoMixins.getMixins()
声明的配置文件 mixins.gravisuiteneo.late.json
注入总数 15 无条件 + 1 条件 + 8 仅客户端 = 24

⚠️ 本 mod 几乎没有独立内容——它的全部价值都在这 24 个 Mixin 上:通过改写父模组 Gravitation Suite(不在本 wiki 收录范围)的既有物品与机制来提供「tweaks」。

两份 JSON 都是空壳

文件 mixins client server minVersion
mixins.gravisuiteneo.json [] [] [] 0.8.5-GTNH
mixins.gravisuiteneo.late.json [] [] [] 0.8.3-GTNH

GraviSuiteNeoMixins.getMixinConfig() 返回 "mixins.gravisuiteneo.late.json"(:17),但该文件三个数组全为空。GTNHLib late-mixin 直接消费 getMixins(loadedMods) 返回的 List<String>,不使用 JSON 里的数组。

无条件 Mixin(15,GraviSuiteNeoMixins.java:23-37)

# Mixin 注入目标
1 MixinEntityPlasmaBall 父模组等离子球
2 MixinGraviSuite_General GraviSuite 主类,见下
3 MixinHelpers 父模组工具类
4 MixinItemAdvancedJetPack 父模组高级喷气背包
5 MixinItemAdvancedLappack 父模组高级镐之背包
6 MixinItemAdvChainsaw 父模组高级链锯
7 MixinItemAdvDDrill 父模组高级动力钻
8 MixinItemAdvancedNanoChestPlate 父模组高级纳米胸甲
9 MixinItemGraviChestPlate 父模组量子护盾胸甲
10 MixinItemGraviTool 父模组引力工具
11 MixinItemRelocator 父模组传送器
12 MixinItemUltimateLappack 父模组终极镐之背包
13 MixinItemVajra 父模组金刚杵
14 MixinPacketHandler 父模组网络包处理
15 MixinKeyboard 键盘(服务端侧)

这 15 个全部读取配置文件 里的 ElectricPresets / ArmorPresets / additional tweaks 数值来改写父模组行为。

条件 Mixin(1,GraviSuiteNeoMixins.java:39-41)

if (!loadedMods.contains("dreamcraft")) mixins.add("MixinGraviSuite_Recipes");

装了 DreamCraft 就跳过 MixinGraviSuite_Recipes——它负责摘除父模组的基础配方,DreamCraft 自带同类配方,重复处理会冲突。

仅客户端 Mixin(8,GraviSuiteNeoMixins.java:43-52)

判定条件是 FMLCommonHandler.instance().getSide().isClient(),不是 IMixinConfigPlugin:

# Mixin 作用
1 MixinBlockRelocatorPortal 传送器基座 GUI
2 MixinClientProxy 客户端初始化
3 MixinClientTickHandler 客户端 tick
4 MixinGuiHandler 父模组 GUI 扩展(含等离子炮 GUI ID 5)
5 MixinGuiRelocatorDisplay 传送器显示
6 MixinItemSimpleItems itemSimpleItem(纳米机器人等)
7 MixinKeyboardClient 按键 → 发包到服务端
8 MixinRenderPlasmaBall 等离子球渲染

MixinBlockRelocatorPortal 与 MixinItemSimpleItems 虽在客户端分支里,但名字看不出纯客户端用途——它们跟着 side 判断走。

MixinGraviSuite_General 的 6 处注入

理解本 mod 加载机制的关键(mixins/MixinGraviSuite_General.java):

行 注解 作用
41-44 @Overwrite 替换 GraviSuite.addLog,改用 log4j LOGGER.info(日志名仍是 GraviSuite)
46-53 @Inject @ PUTSTATIC logWrench:Z 用父模组的 Configuration 调 Properties.init(config)——见配置文件
55-79 @ModifyArgs ×2 把 ElectricPresets.UltimateLappack / AdvLapPack 的 maxCharge、tier、transferLimit 回写进父模组物品构造器实参(args.set(3/4/5))
81-100 @Redirect NO-OP 吞掉父模组对 sonicLauncher 的 GameRegistry.registerItem,避免与本 mod 撞名
102-105 @ModifyConstant 把 EntityPlasmaBall.class 换成 EntityPlasmaBallMKII.class——等离子球借此拿到实体 ID
107-119 @Inject 给父模组工具 NBT 补 toolXP(double 0.0)与 toolMode(int 0)

:98-100 的 NO-OP @Redirect 是「抢占物品注册名」的标准手法:让父模组注册失败,从而由本 mod 独占 sonicLauncher 这个名字。

已知注意点

  • 两份 JSON 的 minVersion 不一致(0.8.5-GTNH vs 0.8.3-GTNH),实际生效的是 late 那份。
  • @ModifyArgs 硬编码父模组物品构造器的第 3/4/5 个实参位置(args.set(3, ...) 等)。父模组一旦改构造器签名,这三处会静默错位。
  • MixinGraviSuite_General 的 @Inject 依赖父模组私有字段名 logWrench 与字段类型 Z(boolean),父模组改名即断。