Igloo

基本信息

属性 值
结构注册名 "Temple"(MapGenStructureIO.registerStructure,VillageNames.java:196)
主类 astrotibs.villagenames.igloo.VNMapGenIgloo
组件库 VNComponentIglooPieces(39 150 字节,igloo/VNComponentIglooPieces.java)
世界生成器 IglooGeneratorIWG(igloo/IglooGeneratorIWG.java)
注册条件 GeneralConfig.addIgloos == true
作用维度 仅主世界(dimensionId == 0)

功能

Igloo(雪屋)是 1.9 雪地生物群系结构的移植版(README.md 注明"Mod versions 1.7.10 and 1.8.9 have Igloos")。

⚠️ 注册名与实际结构不符:结构被注册为 "Temple"(VillageNames.java:196),而 VNMapGenIgloo.func_143025_a()(1.7.10 中返回结构 id 的方法)同样返回 "Temple"(igloo/VNMapGenIgloo.java:53-56)。源码中大量注释显示这是为复用原版 Temple 结构的注册表位置而做的妥协。这会使 Igloo 在结构注册表中与原版丛林神庙共用条目,实际表现需在游戏内验证。

生成条件

VNMapGenIgloo.canSpawnStructureAtCoords 的判定链(igloo/VNMapGenIgloo.java:60-115):

1. 群系白名单

private static List biomelist = Arrays.asList(new BiomeGenBase[] {BiomeGenBase.icePlains, BiomeGenBase.coldTaiga});

(igloo/VNMapGenIgloo.java:21)

即仅冰原(icePlains)与冷针叶林(coldTaiga)两种群系生成,按引用相等(biomegenbase == biomegenbase1)精确匹配。

此外 Start 构造中还会通过 BiomeDictionary 检查群系标签以确定 isSnowy(igloo/VNMapGenIgloo.java:143-146)。

2. 距离约束

参数 值 来源
maxDistanceBetweenScatteredFeatures 32 igloo/VNMapGenIgloo.java:31
minDistanceBetweenScatteredFeatures 8 igloo/VNMapGenIgloo.java:33

这两个字段都是 static(:28、:30),且可通过 Map 构造器的 "distance" 键被地形生成配置覆盖(:40-52),覆盖时以 minDistance + 1 为下限。

3. 散布算法

按 1.9 雪屋的散布特征算法计算候选区块(igloo/VNMapGenIgloo.java:70-110):负坐标经 chunkX -= maxDistance - 1 归一化后,取 chunkX / 32,以 worldIn.setRandomSeed(i1, j1, **14357617**) 取随机数(固定种子 14357617),再叠加 random.nextInt(32 - 8) 偏移。源码中这些行保留了原版 1.7.10 雪屋 MapGenScatteredFeature 的原始代码并加注释(未启用),说明算法是从雪屋复制而来。

世界生成

IglooGeneratorIWG.generate 的条件(igloo/IglooGeneratorIWG.java:21-25)与 Ocean Monument 完全一致:

条件 要求
维度 dimensionId == 0
地图特性 isMapFeaturesEnabled()
坐标 VNMapGenIgloo.canSpawnStructureAtCoords(world, chunkX, chunkZ)

同样以 TerrainGen.getModdedMapGen(..., CUSTOM) 获取地形生成系统中的实例(:30,注释注明 "Fixed for version 3.0.2"),同样以 chunkOffset = 2 遍历 4×4 周边区块(:33-35),同样把 generateStructuresInChunk 包在空 catch 中(:40-42)。

相关条目