跳到正文
烈焰甘蔗Wiki

Firestone(余烬石)晶洞

[!WARNING] 已订正(1.7.10 树) 原条目多处取自 mc-1.12.2:类名 GeneratorFirestone 与 EnumOreMagic 在 1.7.10 中都不存在;通篇使用 BlockPos / Biome, 而 1.7.10 用 (int x, int y, int z)。

关键差异:1.7.10 监听的是 DecorateBiomeEvent.Post(装饰事件), 不是矿石事件;余烬石方块是 BlockOre + EnumOre.FIRESTONE 序号, 不是 railcraft:ore_magic#0。 证据:worldgen/FirestoneGenerator.java:28-48、worldgen/WorldGenFirestone.java:24-56。

基本信息

属性 值
结构类型 下界熔岩池余烬石矿
事件入口类 FirestoneGenerator(监听 DecorateBiomeEvent.Post)
形态生成类 WorldGenFirestone
事件类型 EVENT_TYPE(EnumHelper.addEnum 自定义 TerrainGen.EventType)
矿石方块 BlockOre.getBlock() + metadata EnumOre.FIRESTONE.ordinal()
注册名 矿石为单一注册名 + metadata 变体

触发条件(FirestoneGenerator.java:32-48)

  1. TerrainGen.decorate(world, rand, worldX, worldZ, EVENT_TYPE) 必须通过。
  2. BiomeDictionary.isBiomeOfType(biome, BiomeDictionary.Type.NETHER)。
  3. rand.nextDouble() <= 0.1(10%)。
  4. 区块内随机取 x、z。
  5. 调用 firestone.generate(world, rand, x, y, z)。
条件 要求
事件 DecorateBiomeEvent.Post(不是 OreGenEvent)
群系类型 NETHER
随机几率 10%

生成规则(WorldGenFirestone.generate(),WorldGenFirestone.java:34-55)

for (int yy = y; yy > y - 6; yy--) {            // 1. 起点向下 6 格必须全是熔岩
    if (!world.blockExists(x, yy, z)) return false;
    Block block = WorldPlugin.getBlock(world, x, yy, z);
    if (block != Blocks.lava && block != Blocks.flowing_lava) return false;
}
int yy = y - 6;                                  // 2. 从 y-6 继续向下穿过熔岩层
while (yy > 1) {
    if (!world.blockExists(x, yy, z)) return false;
    Block block = WorldPlugin.getBlock(world, x, yy, z);
    if (block != Blocks.lava && block != Blocks.flowing_lava) break;
    yy--;
}
Block block = WorldPlugin.getBlock(world, x, yy, z);   // 3. 熔岩池底部
if (block.isReplaceableOreGen(world, x, yy, z, Blocks.netherrack))
    return world.setBlock(x, yy, z, firestone, firestoneMeta, 2);   // 4. 放在地狱石上
return false;
步骤 条件
1 起点 y 向下 6 格(y 到 y-5)必须全是 Blocks.lava / Blocks.flowing_lava
2 从 y-6 继续向下穿过熔岩,直到 yy <= 1 或遇到非熔岩方块
3 停下的那一格若 isReplaceableOreGen(..., Blocks.netherrack) 为真则生成
4 在该格放置 BlockOre + EnumOre.FIRESTONE 序号

生成高度

原条目称「主生成位置 Y = 31」「Y = 31 + random(0~15)」。 1.7.10 的 FirestoneGenerator 中没有硬编码的 31 或 Y 随机范围, 起点 y 的来源在本次审计中无法核实,已删除该数字。 可以确定的只有:搜索上限为 yy > 1,即 Y ≥ 2。

相关条目

浏览全部模组