特征生成器

rtg/world/gen/feature/ 下共 40 个类。RTG 的「特征」分两层: WorldGen* 特征生成器(产出具体结构)与 Deco* 装饰器(由群系按概率摆放)。

feature 管前者,world/biome/deco/ 管后者,两者在 世界生成管线 里是装饰阶段的两个来源。

特征类(40:23 个 WorldGen* + 17 个树类)

feature/ 根目录 18 个类全部是 WorldGen*;feature/tree/ 22 个里 只有 5 个是 WorldGen*(WorldGenTreesRTG / WorldGenForestRTG / WorldGenMegaJungleRTG / WorldGenTreeACDarkwood / WorldGenTreeRTGShrubCustom), 其余 17 个是 TreeRTG*(16)与 HLPalmTreeRTG(1)。

分组 数量
WorldGen* 特征生成器 23
TreeRTG* / HLPalmTreeRTG 树类 17
合计(= feature/ 下 .java 总数) 40

通用特征(18,即 feature/ 根目录全部)

类 产出
WorldGenBlob 不规则团块(矿脉、补丁)
WorldGenBlock 放置指定方块
WorldGenCacti 仙人掌
WorldGenClay 黏土层
WorldGenFlowersRTG 花丛
WorldGenGrass 草
WorldGenIceSpike 冰刺
WorldGenJungleCacti 丛林仙人掌
WorldGenJungleCane 丛林甘蔗
WorldGenLog 原木
WorldGenMinableRTG ⚠️ 死代码:可挖掘矿脉的 RTG 变体,但全仓库只在自身文件里出现(类声明 + 3 个构造器),从不被实例化。RTG 因此确实不生成任何矿脉
WorldGenPlantBlock 植物方块
WorldGenPond 水塘
WorldGenShrubRTG 灌木
WorldGenVines 藤蔓
WorldGenVolcano 火山
WorldGenWaterGrass 水生草
WorldGenWildWheat 野生小麦

树(22)

feature/tree/ 下:

分组 数量 类
RTG 自有树种 16 TreeRTG(基类)、TreeRTGAcaciaAbyssinica、TreeRTGAcaciaBucheri、TreeRTGBetulaPapyrifera、TreeRTGCeibaPentandra、TreeRTGCeibaRosea、TreeRTGCocosNucifera、TreeRTGCupressusSempervirens、TreeRTGPiceaPungens、TreeRTGPiceaSitchensis、TreeRTGPinusMonticola、TreeRTGPinusNigra、TreeRTGPinusPonderosa、TreeRTGQuercusRobur、TreeRTGRhizophoraMucronata、TreeRTGSalixMyrtilloides
原版树(3) 3 WorldGenTreesRTG、WorldGenForestRTG、WorldGenMegaJungleRTG
宿主 mod 树 2 WorldGenTreeACDarkwood(AbyssalCraft)、HLPalmTreeRTG(Highlands)
RTG 自定义灌木 1 WorldGenTreeRTGShrubCustom

16 + 3 + 2 + 1 = 22,与 feature/tree/ 的文件数一致。

TreeRTG* 的学名是 RTG 给树种起的拉丁双名(属+种), 用来区分原版 4 种树无法表达的形态差异。

装饰器 Deco(39 个 Deco* 类)

rtg/world/biome/deco/ 下共 39 个 Deco*.java,分三个子目录,性质不同:

子目录 数量 说明
deco/(根) 26 真正的装饰器,含 1 个 DecoBase 基类 → 25 个装饰器
deco/collection/ 8 装饰器组合,含 1 个 DecoCollectionBase → 7 个组合
deco/helper/ 5 DecoHelper*,概率/边界辅助类,不是装饰器

DecoBase 与 DecoCollectionBase 都不是 abstract(是普通 public class); 「非抽象」这个说法对全部 39 个都成立,因此 37 只是「39 减去两个 Base」的减法结果, 并不代表 37 个装饰器。

装饰器(根目录 25 个):

类别 数量 类
基础 1 DecoBaseBiomeDecorations
树 / 倒木 / 灌木 3 DecoTree、DecoShrub、DecoFallenTree
宿主 mod 专用 4 DecoEBTree、DecoEBRockSpire(Enhanced Biomes)、DecoHLTree(Highlands)、DecoAbyssalCraftTree(AbyssalCraft)
植被 8 DecoGrass、DecoDoubleGrass、DecoGrassDoubleTallgrass、DecoLargeFernDoubleTallgrass、DecoFlowersRTG、DecoCactus、DecoMushrooms、DecoPumpkin
水生 4 DecoPond、DecoReed、DecoJungleLilypadVines、DecoJungleGrassVines
丛林攀爬 1 DecoJungleCacti
陆地杂项 4 DecoBoulder、DecoDeadBush、DecoCobwebs、DecoDesertWell

1 + 3 + 4 + 8 + 4 + 1 + 4 = 25,与 deco/ 根目录 26 个文件减去 DecoBase 一致。

注意两套添加 API:addDeco(...) 加单个装饰器(上面 25 个走这条), addDecoCollection(...)(RealisticBiomeBase.java:844)加组合。 所以各群系页「装饰数」列只统计 addDeco(,不含 collection。

参数实例

以 RealisticBiomeVanillaIcePlains 为例,下列数值逐字读自源码, 不是「看起来合理」的估计:

DecoBoulder decoBoulder = new DecoBoulder();
decoBoulder.checkRiver      = true;
decoBoulder.minRiver        = 0.87f;    // 河道强度低于 0.87 才放
decoBoulder.boulderBlock    = Blocks.cobblestone;
decoBoulder.chance          = 16;       // 1/16 几率
decoBoulder.maxY            = 95;
decoBoulder.strengthFactor  = 5f;

DecoFallenTree decoFallenTree = new DecoFallenTree();
decoFallenTree.logCondition        = LogCondition.NOISE_GREATER_AND_RANDOM_CHANCE;
decoFallenTree.logConditionChance  = 24;
decoFallenTree.logBlock            = Blocks.log;
decoFallenTree.logMeta             = (byte) 1;   // 白桦?
decoFallenTree.leavesBlock         = Blocks.leaves;
decoFallenTree.leavesMeta          = (byte) -1;  // -1 = 任意 meta
decoFallenTree.minSize             = 1;
decoFallenTree.maxSize             = 5;

addDeco(decoFallenTree, this.config._boolean(BiomeConfigVanillaIcePlains.decorationLogsId)) 的第二个参数是该装饰的群系级开关——这类 decoration*Id 常量定义在各自的 BiomeConfig* 子类里,不在基类的 16 项之内(见 群系配置属性)。

相关条目