写实群系

基本信息

属性 值
基类 rwg.biomes.realistic.RealisticBiomeBase(src/main/java/rwg/biomes/realistic/RealisticBiomeBase.java)
实例容器 RealisticBiomeBase 的 47 个 public static 字段(RealisticBiomeBase.java:67-140)
ID 分配 静态初始化顺序即 ID 顺序:biomeID = nextBiomeID++,写入 biomeList[256](RealisticBiomeBase.java:155-157)
群系索引表 private static final RealisticBiomeBase[] biomeList = new RealisticBiomeBase[256](RealisticBiomeBase.java:64)
查询入口 RealisticBiomeBase.getBiome(int id)(RealisticBiomeBase.java:165-167)
选择算法 ChunkManagerRealistic.getBiomeDataAt(int, int, float)(rwg/world/ChunkManagerRealistic.java:205)
子类数量 48 个文件(src/main/java/rwg/biomes/realistic/ 下按 coast / desert / forest / land / ocean / red / savanna 分包),其中 47 个被实例化为静态字段

功能

「写实群系」才是 RWG 真正决定地形的单位。每个实例持有四个引用 (RealisticBiomeBase.java:144-148):

字段 含义 来源
biomeID 0–255 的运行时索引 RealisticBiomeBase.java:155
subID 子类型编号 构造参数 sub
baseBiome 对应的基础群系(决定草色/刷怪) 构造参数 biome
beachBiome 该群系过渡到海岸时使用的写实群系 构造参数 coast
riverBiome 河岸使用的基础群系 构造参数 river

两参数构造器 RealisticBiomeBase(int sub, BiomeGenBase biome) 会默认填入 beachBiome = coastIce、riverBiome = RWGBiomes.baseRiverTemperate (RealisticBiomeBase.java:150-152)。四参数构造器可逐个指定(RealisticBiomeBase.java:154-163)。

选择算法

getBiomeDataAt 先用一条气候噪声 b 把世界切成气候带,再用一条独立的噪声 h 在各带内部做群系细分(ChunkManagerRealistic.java:225-270):

b = biomecell.noise((x + 4000) / 1200, z / 1200, 1) * 0.5 + 0.5      // 气候带
h = biomecell.noise(x / 450, z / 450, 1) * 0.5 + 0.5                 // 带内细分
h *= <该带列表长度>;  return <该带列表>.get((int) h)
条件(ChunkManagerRealistic.java) 选中的列表
s > 0.975f(s 为 /140 尺度噪声,仅当 smallEnabled) biomes_small(235-240)
b < 0.25f(wetEnabled)/ b < 0.33f(未启用) biomes_snow(241-245)
b < 0.50f / b < 0.66f biomes_cold(246-251)
b < 0.75f / b < 1f biomes_hot(252-257)
其余且 wetEnabled biomes_wet(258-263)
其余且未启用 wetEnabled biomes_hot(264-269)

两个开关由列表长度决定(ChunkManagerRealistic.java:123-131): wetEnabled = biomes_wetLength > 0;smallEnabled = biomes_smallLength > 1。 因为原生列表中 biomes_wet 为空,wetEnabled 只有在装了支持湿地的第三方群系时才会为 true。

结果按坐标缓存在 biomeDataMap,超过 4096 条时整体清空(ChunkManagerRealistic.java:272-277)。

数值

47 个写实群系实例

分组 字段(RealisticBiomeBase.java 行号)
测试用 test(67)、river(68)、ocean(70)、coast(71)
极地 polar(74)
雪地 snowHills(77)、snowRivers(78)、snowLakes(79)、redwoodSnow(80)
松林 tundraHills(83)、tundraPlains(84)、taigaHills(85)、taigaPlains(86)
森林 redwood(89)、darkRedwood(90)、darkRedwoodPlains(91)、woodhills(92)、woodmountains(93)
稀树草原 duneValleyForest(96)、savanna(97)、savannaForest(98)、savannaDunes(99)、stoneMountains(100)、stoneMountainsCactus(101)、hotForest(102)、hotRedwood(103)、canyonForest(104)、mesaPlains(105)
沙漠 desert(108)、desertMountains(109)、duneValley(110)、oasis(111)
红岩区 redDesertMountains(114)、redDesertOasis(115)、canyon(116)、mesa(117)
丛林 rainForestHigh(124)、jungleHills(125)、jungleCanyon(126)、redwoodJungle(127)
海岸 coastIce(130)、coastColdSlope(132)、coastColdCliff(133)、coastDunes(134)、coastMangrove(136)、coastOasis(137)
海洋 islandTropical(140)

源码中的 SWAMP(119 行)与 TROPICAL(121 行)分组只有注释标题,没有任何字段。

原生选择列表

列表 条目数 去重后 行号
biomes_snow 5 5 ChunkManagerRealistic.java:71-75
biomes_cold 11 9 77-88(woodhills、woodmountains 各被 add 两次)
biomes_hot 18 18 90-107
biomes_wet 0 0 仅由 Support.biomes_wet 填充(112)
biomes_small 0 0 仅由 Support.biomes_small 填充(113)
biomes_test 0 0 仅由 Support.biomes_test 填充(114)

合计原生可选 32 个,第三方联动最多再补 76 个(见第三方群系联动)。

源码中可核实的未接线实例

以下 12 个群系会被实例化、占用一个 biomeID 并进入 biomeList,但既未加入任何选择列表, 源码中也没有按字段名引用(grep -rn "RealisticBiomeBase.<name>" src/main/java/ 零匹配):

test、river、coast、coastColdSlope、coastColdCliff、coastMangrove、coastOasis、 islandTropical、rainForestHigh、jungleHills、jungleCanyon、redwoodJungle

(ocean 的 2 处引用位于 ChunkManagerRealistic.java:212、217 的注释块内。)

另有 RealisticBiomeIslandTundra(rwg/biomes/realistic/ocean/RealisticBiomeIslandTundra.java) 是本 mod 唯一写了类却从未实例化的写实群系:RealisticBiomeBase 的静态字段里没有对应项, 因此它不占用 biomeID、不会进入 biomeList,是完全不可达的代码。

其中 islandTropical 值得单独一提:它是本仓库中唯一重写了 rMapGen 的群系,会调用 MapVolcano.build(...)(rwg/biomes/realistic/ocean/RealisticBiomeIslandTropical.java:71), 但由于它无法被 getBiomeDataAt 选中,该调用在本仓库内没有可达路径。 同理 rwg/map/MapAncientRuins.java 与 rwg/map/old/ 下的 MapGenAncientVillage、MapGenSmallRiver 均无任何调用点。

交互

无玩家直接交互。玩家只能通过世界类型选择间接影响群系分布。

相关条目