跳到正文
烈焰甘蔗Wiki

WorldGenPamSalt(盐矿脉生成)

事实基准:harvestcraft-1.3.14-GTNH.jar(MC 1.7.10 / Forge 10.13.4.1614)CFR 0.152 反编译源码。

基本信息

属性 值 来源
类 com.pam.harvestcraft.WorldGenPamSalt WorldGenPamSalt.java:15
实现 IWorldGenerator(直接注册,不经中间生成器) WorldGenPamSalt.java:16
注册条件 BlockRegistry.enablesaltGeneration,默认 true HarvestCraft.java:117-119
注册权重 1(本模组 4 个生成器里唯一权重非 0 的) HarvestCraft.java:118
产出方块 BlockRegistry.pamSalt WorldGenPamSalt.java:26
使用的原版类 net.minecraft.world.gen.feature.WorldGenMinable WorldGenPamSalt.java:13

维度分派

switch (world.field_73011_w.field_76574_g) {
    case 0: { this.GenerateOverworld(random, chunkX * 16, chunkZ * 16, world); }
}

(WorldGenPamSalt.java:18-22)

  • 只有 case 0 一个分支,因此不存在缺失 break 的落穿问题(无后续 case 可落穿)。
  • field_73011_w / field_76574_g 为 SRG 名,本机无 MCP 映射表 → 未解析;语义佐证:同 世界生成器注册总表。
  • 下界、末地、Aroma1997 维度、暮色森林都不生成盐。

矿脉参数

GenerateOverworld(WorldGenPamSalt.java:25-27):

this.addOreSpawn(BlockRegistry.pamSalt, world, random, x, z, 4, 6, BlockRegistry.saltRarity, 0, 128);
参数 形参 值 说明
1 block BlockRegistry.pamSalt 生成的方块
2–3 blockXPos / blockZPos chunkX*16 / chunkZ*16 区块原点
4 minVeinSize 4 最小矿脉大小
5 maxVeinSize 6 最大矿脉大小(见下方"实际达不到")
6 chancesToSpawn BlockRegistry.saltRarity 每区块尝试次数,默认 30
7 minY 0 最低高度
8 maxY 128 最高高度(不含)

addOreSpawn(WorldGenPamSalt.java:29-37)的实际行为:

WorldGenMinable minable = new WorldGenMinable(block, minVeinSize + random.nextInt(maxVeinSize - minVeinSize), Blocks.field_150348_b);
for (int i = 0; i < chancesToSpawn; ++i) {
    int posX = blockXPos + random.nextInt(16);
    int posY = minY + random.nextInt(maxY - minY);
    int posZ = blockZPos + random.nextInt(16);
    minable.func_76484_a(world, random, posX, posY, posZ);
}
项 实际值
每区块尝试次数 saltRarity,默认 30(BlockRegistry.java:339,salt 分类)
每次尝试的 X chunkX*16 + rand.nextInt(16)(区块内 0…15,正确)
每次尝试的 Z 同上,区块内 0…15
每次尝试的 Y 0 + rand.nextInt(128) → 0…127
矿脉大小 4 + rand.nextInt(6 - 4) = 4 + nextInt(2) → 实际只会是 4 或 5
被替换的方块 Blocks.field_150348_b(SRG 名 → 未解析)
  • func_76484_a(World, Random, int, int, int) 是 WorldGenerator.generate 的原版方法(IWorldGenerator 同样用它),在 1.7.10 中对非树生成器等价于 generate。
  • Blocks.field_150348_b 的语义佐证:它是 WorldGenMinable 构造器的第 3 个参数。本机没有 MCP 反混淆映射表,也没有原版 1.7.10 源码,因此该参数的官方名字与确切语义未解析;按 Forge/原版 WorldGenMinable(Block, int, Block) 这一惯用签名,位置 2 是 meta、位置 3 是"可被替换的目标方块",但这是签名推断而非已验证事实。

配置

键 分类 默认值 类型 影响
enablesaltGeneration salt true boolean 是否注册本生成器(BlockRegistry.java:340)
saltRarity salt 30 int 每区块的矿脉尝试次数(BlockRegistry.java:339)

源码缺陷

位置 问题
WorldGenPamSalt.java:30 矿脉大小用 minVeinSize + random.nextInt(maxVeinSize - minVeinSize),得到 4 + nextInt(2) ∈ {4, 5},声明的 maxVeinSize = 6 永远取不到。若原意是闭区间 [4, 6],应为 nextInt(maxVeinSize - minVeinSize + 1)。
WorldGenPamSalt.java:30 第 2 个构造器实参传的是计算出的矿脉大小而非 meta。按上条推断的 (block, meta, replaceBlock) 签名,meta 位置被填入了 4 或 5。这是可确证的写法不一致;本条目不推断其运行时后果。

相关条目

浏览全部模组