BiomeProviderRTG

基本信息

属性 值
类名 sedridor.forgeamidst.BiomeProviderRTG
文件 src/main/java/sedridor/forgeamidst/BiomeProviderRTG.java
行数 166
启用版本 Minecraft 1.7.10

功能

RTG 生物群系桥。RTG 使用自研的噪声系统(OpenSimplex + SimplexCellular) 而非原版 GenLayer,因此本类单独复刻了一套「按区块采样生物群系」的能力, 让 Map 在 RTG 世界下也能画出正确的生物群系。

硬编码的采样参数

字段 值 说明
sampleSize 8 采样步长(方块)
sampleArraySize 21 采样数组边长(构造器内赋值)
biomeData int[sampleArraySize * sampleArraySize] = int[441] 采样结果
weightedBiomes float[BiomeGenBase.getBiomeGenArray().length] 权重数组
storage new TimedHashMap(60000) LRU 容量 60000
baseBiomesList new BiomeGenBase[256] 基础群系表

⚠️ 21 × 21 = 441 是 int 数组元素数,不是地图分辨率的说法; 采样是以 8 方块为步长的稀疏网格(8 × 8 方块 = 1 区块)。

⚠️ storage 的 60000 是缓存条目上限(约 937 个区块), 无过期时间配置项。

构造器的 RTG 耦合

this.cmr = (RTGBiomeProvider) this.worldObj.getWorldChunkManager();
this.simplex = new OpenSimplexNoise(seed);
this.cell = new SimplexCellularNoise(seed);

⚠️ (RTGBiomeProvider) 强转 getWorldChunkManager() —— 即在 RTG 缺席时必然 ClassCastException。

⚠️ 但本类直接 import 了 RTG 的类 (RTGBiomeProvider、OpenSimplexNoise、SimplexCellularNoise、 RealisticBiomePatcher、BiomeAnalyzer、ChunkLandscape、 PlaneLocation、TimedHashMap)。

这与 after:RTG 软依赖形成矛盾:

层面 RTG
FML 依赖声明 after:RTG(软)
编译期 import 直接依赖(硬)
运行期 强转 getWorldChunkManager()

即:编译必须要有 RTG,但 FML 层声明为软依赖。 只有当 RTG 存在时才会走到本类,所以不构成启动崩溃; 但「装 ForgeAmidst 不装 RTG 就能跑」的说法仅在不触发本类时成立。

provideInts(int cx, int cy, int width, int height)

主入口:landscape(cmr, cx * 16, cy * 16) 取地形样本, 再对 i = 0..255 逐像素填充。

⚠️ cx * 16 把区块坐标换算为方块坐标(16 = 1 区块边长)。 与 MapWorld 的伪世界方案共用同一坐标基准。

⚠️ 逐像素处理包在 try 里(源码 try { 出现在 for (i = 0; i < 256; i++) 内), 说明存在逐点容错。

实现要点

  • analyzer.xyinverted() 提供采样坐标翻转数组。
  • setWeightings() 在构造末尾调用,初始化 weightedBiomes。
  • RealisticBiomePatcher biomePatcher 用于按 RTG 规则修正群系边界。

关联