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。这是可确证的写法不一致;本条目不推断其运行时后果。 |
相关条目