随机武器战利品 Random Weapon Chest Content

本 mod 世界生成的唯一内容生成器:向原版 6 类结构的箱子注入随机等级 Tinkers’ 武器。本条目讲算法,具体的箱子类别见各条目。

  • 模块:WorldGen(脉冲 WorldGen)
  • Pulse 描述:This module takes care of additional awesome dungeon loot.
  • 注册类:worldgen/IguanaWorldGen.java
  • 本类:worldgen/RandomWeaponChestContent.java → net.minecraft.item.ItemStack
  • 事件:FMLInitializationEvent(@Handler init)

注册位置

IguanaWorldGen.init 用 ChestGenHooks.addItem(category, new RandomWeaponChestContent(...)) 向 Forge 的战利品系统注入 6 条规则:

ChestGenHooks.addItem(ChestGenHooks.BONUS_CHEST,
        new RandomWeaponChestContent(0, 1, 10, 0, 0, HarvestLevels._1_flint, 3));

源码注释把这次注入分成两类意图:

注释 对应
// add some a starting weapon to bonus chests! 奖励箱(BONUS_CHEST)——给一把起手武器
// awesome dungeon loot! 其余 5 类地牢结构

本 mod 不生成任何新结构、不放置任何方块——它只往已存在的原版结构里注入战利品条目。验证:

$ grep -rn "IWorldGenerator\|WorldGenerator\|Structure\|biome" src/main/java
(无任何 WorldGenerator / 结构生成实现)

worldgen 包只有 2 个文件:IguanaWorldGen.java(37 行,6 次 ChestGenHooks.addItem)与 RandomWeaponChestContent.java(继承 ItemStack 的战利品条目)。

本 mod 的全部战利品注入(8 条,跨 2 个模块)

RandomWeaponChestContent 本身只有 6 条用法,但整个 mod 一共向 7 个不同的结构注入 8 条战利品条目:

# 结构 注入模块 内容 权重 条目
1 村庄铁匠铺 MobHeads WeightedRandomChestContent:神秘道具 meta 0 1 FMLPostInitializationEvent
2 要塞图书馆 MobHeads WeightedRandomChestContent:神秘道具 meta 3 1 FMLPostInitializationEvent
3 奖励箱 WorldGen 本类 10 FMLInitializationEvent
4 地牢箱 WorldGen 本类 2 同上
5 废弃矿井走廊 WorldGen 本类 2 同上
6 沙漠金字塔 WorldGen 本类 2 同上
7 丛林神庙 WorldGen 本类 2 同上
8 要塞图书馆 WorldGen 本类 2 同上

要塞图书馆被两个模块各注入一次,因此它有 2 条战利品条目。

此外 Tweaks 模块还会移除奖励箱中的 4 种原版工具并加入 2~4 把固定构造的 Tinkers’ 工具,详见 奖励箱战利品。

7 个构造参数

RandomWeaponChestContent(minM, maxM, rarity, minD, maxD, harvestLevel, quality)

参数 含义 说明
minM 最小 metadata 伤害值下界
maxM 最大 metadata 伤害值上界
rarity 稀有度权重 在该箱子类别的总权重中的占比
minD 最小等级 工具等级(ToolLevel)下界
maxD 最大等级 工具等级上界
harvestLevel 挖掘等级 用 HarvestLevels._N_xxx 常量,见 挖掘等级系统
quality 品质 传给 ToolCore 的品质值

6 条规则一览

结构箱子 稀有度权重 工具等级范围 metadata 范围 挖掘等级 品质
奖励箱 10 0 ~ 0 0 ~ 1 _1_flint(1 燧石) 3
地牢箱 2 1 ~ 2 0 ~ 0 _5_diamond(5 钻石) 4
废弃矿井走廊 2 0 ~ 0 0 ~ 0 _2_copper(2 铜) 2
沙漠金字塔 2 0 ~ 2 0 ~ 0 _5_diamond(5 钻石) 3
丛林神庙 2 1 ~ 1 0 ~ 0 _5_diamond(5 钻石) 3
要塞图书馆 2 2 ~ 2 0 ~ 0 _5_diamond(5 钻石) 4

对应的 ChestGenHooks 常量:

ChestGenHooks.BONUS_CHEST
ChestGenHooks.DUNGEON_CHEST
ChestGenHooks.MINESHAFT_CORRIDOR
ChestGenHooks.PYRAMID_DESERT_CHEST
ChestGenHooks.PYRAMID_JUNGLE_CHEST
ChestGenHooks.STRONGHOLD_LIBRARY

6 条规则全部是 new RandomWeaponChestContent(...),没有第二种内容类型。

设计意图

稀有度权重的对比很有说明性:

  • 奖励箱权重 10,是其余(2)的 5 倍——确保玩家前期开箱大概率能拿到起手武器(等级固定 0、挖掘等级仅燧石级、品质 3)。rarity 越大越常见。
  • 地牢箱 / 丛林神庙 / 要塞图书馆的工具等级分别是「1~2」「1~1」「2~2」——越难到达的结构给越高级的武器。
  • 要塞图书馆是唯一带 metadata 范围 2~2 的(minD = 2, maxD = 2),即固定 2 级工具,是全部 6 条中等级最高的一档。
  • 废弃矿井走廊给的是最弱配置(等级 0、镐级、品质 2)——因为废弃矿井是最容易到达的结构。

品质(quality)的分布:奖励箱 3,地牢箱/要塞 4,废弃矿井 2,沙漠/丛林 3。

重要前提

注入的武器使用本 mod 重平衡后的材料等级与数值,因此必须与 挖掘等级系统 和 材料重平衡 一同理解。若整合包关闭了 HarvestLevelTweaks 模块,地牢箱里会出现「挖掘等级 5 但材料被重映射到别的等级」的错配工具。