特征生成器
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 项之内(见
群系配置属性)。