ForgeAmidst
基本信息
| 属性 | 值 |
|---|---|
| 类名 | sedridor.forgeamidst.ForgeAmidst |
| 文件 | src/main/java/sedridor/forgeamidst/ForgeAmidst.java |
| modid | forgeamidst |
| 启用版本 | Minecraft 1.7.10 |
⚠️ modid ≠ 分类名
分类名是 amidstgtnh,而真实 modid 是 forgeamidst —— 两者完全无关。
仓库名带 GTNH 后缀只是因为这是 GTNH 维护分支。
modid 的两个独立来源互相印证:
| 来源 | 值 |
|---|---|
@Mod(modid = "forgeamidst", …)(ForgeAmidst.java:44) |
forgeamidst |
gradle.properties:9 modId = forgeamidst |
forgeamidst |
资源域 assets/forgeamidst/biome |
forgeamidst |
@Mod 声明
@Mod(
modid = "forgeamidst",
name = "ForgeAmidst",
version = "1.7.10-1.4-beta",
dependencies = "after:climatecontrol;after:RTG")
public class ForgeAmidst {
| 字段 | 值 | 备注 |
|---|---|---|
modid |
forgeamidst |
|
name |
ForgeAmidst |
⚠️ 与 gradle.properties 的 modName = ForgeAmidst-GTNH 不一致 |
version |
1.7.10-1.4-beta |
⚠️ 字面量,非占位符 |
dependencies |
after:climatecontrol;after:RTG |
两条都是软顺序依赖 |
⚠️ dependencies 用的是 after:(软),不是 required-after:。
即缺 ClimateControl 或 RTG 不会导致启动失败 ——
只是走不到兼容分支(见 BiomeProviderRTG)。
README 也说「Intended to be used together with ClimateControl and RTG…
However, Amidst also works on RWG」。
⚠️ version 是源码字面量 1.7.10-1.4-beta,
这在本仓属于少数派 —— 对比 UniMixins 那边几乎全是占位符。
但 mcmod.info 里的 ${modVersion} 仍是占位符(见该条目)。
@Mod.Instance 与静态状态
@Mod.Instance("forgeamidst")
private static ForgeAmidst instance;
持有大量静态字段:客户端 mc、MinecraftServer server、World world、
GenLayer biomeGen、GenLayer biomeIndexLayer、long seed、
Object climatecontrol、Object dimensionManager,
以及两个布尔 climateControlFound / rtgFound。
⚠️ climatecontrol 声明为 Object 而非具体类型 ——
即编译期不依赖 ClimateControl,靠运行期 getModInstance("climatecontrol") 反射取。
这与 after: 软依赖一致。
生命周期(4 个 @Mod.EventHandler)
| 阶段 | 处理 |
|---|---|
preInit |
取客户端 Minecraft 实例;`mcDataDir = 事件配置目录的父目录 |
init |
注册 EVENT_BUS + TERRAIN_GEN_BUS;探测 climatecontrol / RTG;注册 TickHandler 及其快捷键 |
serverStarting |
event.registerServerCommand(new CommandAmidst()) |
serverAboutToStart |
若 server != null:停服、清空 DimensionManager 第 0 维、通知 ClimateControl / RTG serverStopped |
实现要点
init中 同时注册MinecraftForge.EVENT_BUS和MinecraftForge.TERRAIN_GEN_BUS—— 后者用于地形生成相关挂钩。- 环境探测:
Loader.isModLoaded("climatecontrol")→getModInstance("climatecontrol");Loader.isModLoaded("RTG")→ 只置rtgFound = true(不取实例)。 ⚠️ 两者探测方式不同:ClimateControl 取实例并catch (NoClassDefFoundError), RTG 只记布尔。 preInit里mcDataDir取的是getModConfigurationDirectory().getParentFile(), 即游戏根目录(因为config/的父级),不是config/本身。
关联
- CorePlugin - coremod 加载插件(与本类分离)
- Transformer - ASM 注入
- TickHandler -
F6快捷键 - CommandAmidst -
/amidst命令 - MapWorld - 伪世界
- BiomeProviderRTG - RTG 兼容
- Climate Control - 软依赖(已登记未成文)
- Realistic Terrain Generation - 软依赖(已登记未成文)