地形与地表

基本信息

属性 值
地形基类 rwg.terrain.TerrainBase(src/main/java/rwg/terrain/,共 19 个文件 = 1 基类 + 18 实现)
地表基类 rwg.surface.SurfaceBase(src/main/java/rwg/surface/,共 21 个文件 = 1 基类 + 20 实现,含 river/SurfaceRiverOasis)
噪声工具 src/main/java/rwg/util/ 共 11 个类(NoiseGenerator 接口 + Perlin / OpenSimplex 两套实现、CellNoise、CliffCalculator、SnowheightCalculator 等)
组合方式 每个写实群系各自持有一个 TerrainBase 与一个 SurfaceBase 字段,在构造函数里 new 出来

功能

一、地形:决定「地表有多高」

每个写实群系在构造时指定一个 TerrainBase 子类,生成器逐列调用 rNoise(perlin, cell, x, y, ocean, border, river) 求高度值,再取整写入方块数组。 RealisticBiomeBase 的默认实现直接返回常量 63f(rwg/biomes/realistic/RealisticBiomeBase.java:191-193), 所有实际群系都重写了它。

地形实现清单(src/main/java/rwg/terrain/,19 个文件):

类别 类
平原 / 高地 TerrainGrasslandFlats、TerrainHighland、TerrainHilly
丘陵 / 山地 TerrainGrasslandHills、TerrainGrasslandMountains、TerrainMountain、TerrainMountainRiver、TerrainMountainSpikes、TerrainSwampMountain
沙丘 / 沙谷 TerrainDunes、TerrainDuneValley
特殊地形 TerrainCanyon、TerrainMesa、TerrainMarsh、TerrainSwampRiver、TerrainPolar、TerrainFlatLakes
兼容辅助 TerrainSmallSupport(供第三方群系联动使用)

TerrainGrasslandHills、TerrainHighland、TerrainCanyon 等带参数的类,其高度/宽度常量直接写在各写实群系 的构造调用中,例如 new TerrainHighland(6f, 120f, 65f, 150f) (rwg/support/SupportCC.java:27)、new TerrainCanyon(true, 35f, 160f, 60f, 40f, 69f) (rwg/support/SupportBOP.java 中 canyon 条目)。

二、地表:决定「地表长什么样」

SurfaceBase 子类的 paintTerrain(...) 在方块数组上做替换,把噪声堆出的石头换成地表层。 RealisticBiomeSupport 允许一个第三方群系挂载多个 SurfaceBase(数组形式构造器, rwg/support/RealisticBiomeSupport.java:27-35),并按顺序全部执行(RealisticBiomeSupport.java:72-75)。

基类 RealisticBiomeBase.rReplace 给出了一份可直接读出的默认铺层规则 (rwg/biomes/realistic/RealisticBiomeBase.java:195-216):

  • 从 k = 255 向下扫描到 -1
  • 遇到 Blocks.air 即把 depth 置为 -1(表示已出露地表)
  • 遇到 Blocks.stone 则 depth++;depth == 0(紧贴地表的第一层石头)时:
    • k < 62 换成 Blocks.dirt
    • 否则换成 Blocks.grass
  • 0 < depth < 6 的石头换成 Blocks.dirt(即地表下最多 6 格泥土层)

数值

数值名 值 行号
基类默认地形高度 63 RealisticBiomeBase.java:192
基类默认草/土分界 Y 62(k < 62 用泥土,否则用草) RealisticBiomeBase.java:203-207
基类默认泥土层厚度 6 RealisticBiomeBase.java:208-210
地形实现类数量 18(terrain/ 19 文件 - TerrainBase) src/main/java/rwg/terrain/
地表实现类数量 20(surface/ 21 文件 - SurfaceBase) src/main/java/rwg/surface/

交互

无玩家直接交互。地形/地表类只被生成器在服务端调用,参数由各写实群系在构造时写死 (例:new SurfacePolar(Blocks.snow, Blocks.snow),rwg/biomes/realistic/land/RealisticBiomePolar.java:30)。

相关条目