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-GTNHvs0.8.3-GTNH),实际生效的是 late 那份。 @ModifyArgs硬编码父模组物品构造器的第 3/4/5 个实参位置(args.set(3, ...)等)。父模组一旦改构造器签名,这三处会静默错位。MixinGraviSuite_General的@Inject依赖父模组私有字段名logWrench与字段类型Z(boolean),父模组改名即断。