Village Generator

基本信息

属性 值
主结构类 MapGenVillageVN.Start,注册名 "MapGenVillageVN"(VillageNames.java:206)
核心生成逻辑 astrotibs.villagenames.village.StructureVillageVN(village/StructureVillageVN.java)
群系建筑类 village/biomestructures/ 下 7 个文件(平原/沙漠/针叶林/热带草原/雪原/丛林/沼泽)
建筑蓝图 village/biomestructures/BlueprintData.java
建筑处理器 StructureCreationHandlers.*_Handler
开关 VillageGeneratorConfigHandler.newVillageGenerator,默认 true(config/village/VillageGeneratorConfigHandler.java:593)
作用维度 主世界(village generator 配置分类独立于通用配置)

功能

本 mod 包含一套完全替换原版村庄生成的系统。源码对其定位的说明是:"Use replacement village generation system. You may need to deactivate village generation from other mods. All other settings in this section require this to be true."(config/village/VillageGeneratorConfigHandler.java:593)

即:该开关关闭后,village generator 分类下的其余全部设置都不生效;且可能需要手动关闭其他 mod 的村庄生成。

注册规模

启用时一次性注册大量结构组件(VillageNames.java:202-480):

类别 数量 注册方式
群系建筑 234 registerVillageComponentBuilding(...)(VillageNames.java:636)
杂项 / 村庄中心 26 MapGenStructureIO.func_143031_a(...)
主结构 1 MapGenStructureIO.registerStructure(MapGenVillageVN.Start.class, "MapGenVillageVN")

按群系分布的 233 座群系建筑

(grep -oE 'registerVillageComponentBuilding\((Plains|Desert|Taiga|Savanna|Snowy|Jungle|Swamp)Structures' VillageNames.java 的逐项统计)

群系 建筑数 类文件
热带草原 Savanna 36 SavannaStructures.java
丛林 Jungle 38 JungleStructures.java
平原 Plains 37 PlainsStructures.java
沙漠 Desert 32 DesertStructures.java
雪原 Snowy 31 SnowyStructures.java
沼泽 Swamp 31 SwampStructures.java
针叶林 Taiga 28 TaigaStructures.java

234 与 233 的差值 = 1 座额外的 SignPost 建筑(VillageNames.java:479,registerVillageComponentBuilding(SignPost.class, "VNPSgnPst", ...)),不属于任何群系。

26 个杂项 / 村庄中心组件

包括路径、火炬装饰与各群系"中心点"(VillageNames.java:208-231),例如:

缩写 内容
VNPath 村庄道路(Path)
VNDecTor 装饰火炬
VNPlF01 / VNPlMP1 / VNPlMP2 / VNPlMP3 平原喷泉 / 平原水井 / 平原市场 / 中央树
VNDeMP1–VNDeMP3 沙漠喷泉与建筑 / 沙漠水井 / 沙漠市场
VNSaMP1–VNSaMP4 热带草原市场 / 喷泉 / 双水井 / 单水井
VNSnMP1 雪原冰柱

建筑蓝图机制

BlueprintData 为装饰类建筑提供坐标化的方块替换(village/biomestructures/BlueprintData.java)。坐标为建筑局部坐标系 (upos, vpos, wpos),每条记录含目标 Block、meta 与一个 fillFlag(BlueprintData.java:19-22)。

fillFlag 的语义(源码注释,BlueprintData.java:35-37):

值 行为
0 普通方块替换(不额外处理)
1 同时填充该方块下方
2 同时清空该方块上方空间

无 fillFlag 的构造器重载默认填 0(BlueprintData.java:48-49)。

村庄尺寸与间距

VillageGeneratorConfigHandler 暴露以下参数(config/village/VillageGeneratorConfigHandler.java:19-29):

字段 含义
newVillageSizeMaximum / newVillageSizeMinimum / newVillageSizeMode 村庄最大/最小尺寸与模式
newVillageSizeNormalOrder 常规尺寸阶数
newVillageSpacingMedian 村庄间距中位数
newVillageSpacingSpread 村庄间距浮动
spawnBiomesNames 可生成村庄的群系列表
noVillagesRadius 无村庄半径

⚠️ 无法核实:上述各参数的具体默认值。VillageGeneratorConfigHandler.java 中仅有字段声明(:19-29),实际 config.get(...) 赋值语句位于本文件更靠后的位置,本次未逐条读取其数值,故不给出具体数字。已核查范围:该文件全部字段声明与 newVillageGenerator 的默认值(:593,为 true)。

旧版村庄建筑的取舍

StructureVillageVN 支持按群系停用原版村庄建筑。源码注释:"This class gives me better control over deactivating legacy buildings"(village/StructureVillageVN.java:78-81)。

原版 9 种村庄组件均以 PieceWeight 形式加入权重表(village/StructureVillageVN.java:244-308),其 House4Garden、Church、House1、WoodHut、Hall、Field1、Field2、House2、House3 的类路径常量定义于 Reference.java 的 House4Garden_CLASS 等字段。

停用逻辑按配置项 Component Village Types 的字符串匹配(village/StructureVillageVN.java:341-364):当配置值既非 any 也非 all、且不包含当前群系标识(或为空串)时,该组件被跳过。配置中查不到的组件会回退到非 mod 默认值表再判定一次(:345-353)。

村庄内容配置

除建筑外,生成器还可通过配置控制村庄内的功能性方块(config/village/VillageGeneratorConfigHandler.java:532-557):

字段 含义
allowTaigaTroughs 针叶林水槽
allowVillageBrewingStands 村庄酿造台
allowVillageBeds 村庄床
fillTroughsWithWater 水槽注水
restrictTaigaTroughs 限制针叶林水槽
replaceAnvils 替换铁砧

源码中另有 12 个 decor* 装饰开关(config/village/VillageGeneratorConfigHandler.java:537-553)被整段注释掉,按"注释代码不算注册"的判定原则,不作为有效配置收录。

相关条目