MapWorldRTG

基本信息

属性 值
类名 sedridor.forgeamidst.MapWorldRTG
文件 src/main/java/sedridor/forgeamidst/MapWorldRTG.java
行数 48
继承 extends net.minecraft.world.WorldServer
启用版本 Minecraft 1.7.10

功能

MapWorld 的 RTG 专用变体。RTG(Realistic Terrain Generation) 不走原版 GenLayer 管线,而是自带地形生成器, 因此需要单独的伪世界来适配。

关键差异:条件式 setWorld

if (!worldType.getWorldTypeName().equals("RTG") || ForgeAmidst.getWorld() == null) {
    ForgeAmidst.setWorld((World) this);
    ForgeAmidst.biomeGen = ForgeAmidst.getInstance().getGenLayers(0);
    ForgeAmidst.biomeIndexLayer = ForgeAmidst.getInstance().getGenLayers(1);
}

⚠️ 与 MapWorld 的核心区别:本类有条件地占用全局 world, 而 MapWorld 无条件占用。

条件 是否 setWorld
worldType ≠ "RTG" 是
worldType == "RTG" 且 getWorld() == null 是
worldType == "RTG" 且 getWorld() != null 否(保持原 world)

即:在 RTG 模式下优先保留已存在的 world, 避免 RTG 伪世界把原版伪世界顶掉。

⚠️ 条件里的字符串 "RTG" 是硬编码字面量比较 worldType.getWorldTypeName(),不是枚举比较。 WorldType 枚举里没有 RTG 项 —— RTG 通过自定义 WorldType (名字为 "RTG")注入。所以这里必须用字符串比。

updateGenLayers(GenLayerRiverMixWrapper)

被 Transformer 以 ASM 注入调用。 CorePlugin 的 TransformerExclusions 排除了 sedridor.forgeamidst, 所以本类自身不会被自己的 transformer 重复改写。

注入方先调 climateControl.DimensionManager.riverLayerWrapper(int) 拿到 GenLayerRiverMixWrapper,再传给本方法。

构造器其余部分

与 MapWorld 相同:

参数 值
saveHandler new MapWorldSaveHandler()
世界名 "ForgeAmidst"
dimensionId 0

同样有 System.out.println("MapWorld: " + seed + …) 的调试输出 (注意打印前缀是 "MapWorld: " 而非 "MapWorldRTG: " —— 反编译残留)。

⚠️ RTG 是软依赖

ForgeAmidst 的 dependencies 是 after:climatecontrol;after:RTG(软), rtgFound 仅由 Loader.isModLoaded("RTG") 置位。

即没装 RTG 也能启动,MapWorldRTG 只是永远不被选中。 它不 import RTG 的任何类,因此编译期无依赖。

关联