什么是宝藏文件?
宝藏文件决定了 BetterStructures 箱子的战利品表。它们通常分配给生成器,但也可以在单个建筑配置级别设置。
这些战利品表非常强大,但也需要了解一些基本的统计概念才能理解。
在这里阅读这些概念,页面的其余部分假设你已经理解它们!
加权概率
BetterStructures 和 EliteMobs(同一作者的另一个插件)都在其战利品系统中使用加权概率的概念。这是为了解决一个简单的问题:如何设置从可能无限的物品列表中选择某个物品的概率?
加权概率通过给每个物品一个权重来解决这个问题。如果你有 100 个物品,每个权重为 1,那么它们都有相同的概率——1%——被选中。如果你再添加一个物品使总数达到 101 个,并给最后一个物品权重 1,所有物品仍然有相同的概率——约 0.99%——被选中。如果你给最后一个物品权重 2,它被选中的概率会增加——新的总权重是 102,最后一个元素的权重为 2,100/102 = 约 0.98%,所以 0.98%+0.98% = 1.96% 的被选中概率。如果你给最后一个物品权重 100,新权重为 200,由于你的新物品占了一半的权重,你的新物品有 50% 的被选中概率。
如你所见,当你可能有数百个需要随机选择的物品时,这个方法非常有用。
高斯分布
高斯分布是一个钟形的数学函数。

你可能想知道这与战利品系统有什么关系。BetterStructures 在设置箱子战利品时需要决定的一件事是箱子里出现多少战利品。数量应该始终在某个特定数字附近,但最好不要太可预测,以使开箱更加令人兴奋。
为了实现这种半随机效果,使用高斯分布来随机化选择多少物品。一旦确定了这个数量,加权概率就会从稀有度表中随机选择一个元素并考虑权重。
那么高斯分布是如何工作的?
幸运的是,你不必担心其背后的数学原理,只需关注修改它的两个设置:均值和标准差。
均值
简单地说,mean(均值)设置了高斯曲线的中间值,这意味着它设置了箱子中最可能出现的物品数量。基本上,如果你希望箱子通常有 5 个物品,就将均值设置为 5。
标准差
假设箱子中的平均物品数是 5。standard deviation(标准差)帮助决定这个数字从一个箱子到另一个箱子可以变化多少。
小 Standard Deviation(例如 1):这意味着大多数箱子的物品数量非常接近平均值,如 4、5 或 6 个物品。这是更可预测的体验。例如,如果箱子的标准差为 1,你可以预期几乎所有箱子都有 4 到 6 个物品。
中等 Standard Deviation(例如 2):这里有更多变化。箱子可能有 3 到 7 个物品。虽然 5 个物品仍然很常见,但发现更多或更少物品的箱子也不罕见。因此,标准差为 2 时,你可能偶尔会发现只有 3 个物品的箱子,或者如果你运气好,一个有 7 个物品的箱子。
大 Standard Deviation(例如 3 或更大):现在事情变得非常惊喜!箱子可能只有 2 个物品或多达 8 个或更多。这意味着你可能会发现只有几个物品的箱子,但也有机会发现满是好东西的箱子。例如,标准差为 3 时,箱子可以有 2 到 8 个物品,使每次开箱都是令人兴奋的赌博。
默认均值为 4,默认标准差为 3。
实现细节
了解宝藏系统的内部工作原理可以帮助你更有效地配置它:
保证最少物品
系统保证箱子中始终至少出现一个物品,即使高斯分布计算结果为零。这防止玩家发现完全空的箱子。
随机槽位放置
物品被放置在箱子内的随机槽位中,而不是从第一个槽位开始顺序填充。这创造了更自然的战利品分布,感觉不那么人工化。
错误处理
如果物品材料在你的 Minecraft 版本中不存在(例如,在物品被重命名的新版本上使用旧配置),该物品将被静默跳过而不会导致错误。无效的附魔将在控制台中显示一次警告,然后在后续出现时被抑制以避免日志泛滥。
特殊格式
宝藏文件有一个特殊格式,如下所示:
isEnabled: true
mean: 4.0
standardDeviation: 3.0
vanillaTreasure: BURIED_TREASURE
items:
common:
weight: 60
items:
- amount: 1-1
material: STONE_PICKAXE
procedurallyGenerateEnchantments: true
weight: 1.0
- amount: 1-1
material: STONE_SHOVEL
procedurallyGenerateEnchantments: true
weight: 1.0
rare:
weight: 30
items:
- amount: 1-1
material: ANVIL
weight: 6.0
- amount: 1-6
material: BEETROOT
weight: 6.0
epic:
weight: 10
items:
- amount: 2-10
material: DIAMOND
weight: 1.0
- amount: 1-1
material: DIAMOND_AXE
weight: 6.0
procedurallyGeneratedItemSettings:
golden_sword:
bane_of_arthropods:
minlevel: 1
maxlevel: 5
chance: 0.2
looting:
minlevel: 1
maxlevel: 3
chance: 0.2
注意:这是一个非常精简的版本。完整的默认宝藏配置导出为 YAML 时大约有 2599 行,因为它涵盖了广泛的战利品表和所有可能的附魔组合。
isEnabled
| 键 | 值 | 默认值 |
|---|---|---|
isEnabled | Boolean | true |
mean
| 键 | 值 | 默认值 |
|---|---|---|
mean | Double | 4 |
设置 mean(均值)。在这里阅读相关详情。
standardDeviation
| 键 | 值 | 默认值 |
|---|---|---|
standardDeviation | Double | 3 |
设置 standardDeviation(标准差)。在这里阅读相关详情。
vanillaTreasure
| 键 | 值 | 默认值 |
|---|---|---|
vanillaTreasure | String | 无 |
设置一个可选的原版 Minecraft 战利品表与自定义战利品一起使用。这使用 Bukkit 的 LootTables 枚举值(例如 BURIED_TREASURE、SHIPWRECK_TREASURE、SIMPLE_DUNGEON)。设置后,原版战利品表将与 items 部分中定义的任何自定义物品一起进行掷骰。如果未设置,则只使用自定义战利品。
items
这里变得有些复杂,因为管理员可以设置许多选项。让我们放大之前的配置文件示例。
items:
common:
weight: 60
items:
- amount: 1-1
material: STONE_PICKAXE
procedurallyGenerateEnchantments: true
weight: 1.0
- amount: 1-1
material: STONE_SHOVEL
procedurallyGenerateEnchantments: true
weight: 1.0
rare:
weight: 30
items:
- amount: 1-1
material: ANVIL
weight: 6.0
- amount: 1-6
material: BEETROOT
weight: 6.0
在这里,你可以看到 items 配置键下有一个包含 common 和 rare 的映射。这些就是 rarities(稀有度)!
rarities
稀有度没有固定的名称。你可以添加或删除它们,并根据需要进行自定义,只要使用相同的格式即可。
请注意,使这些稀有度表更稀有或更常见的是战利品表的 weight(权重)!
默认情况下:
common的默认weight为 60rare的默认weight为 30epic的默认weight为 10
使普通物品的掉落概率是史诗物品的 6 倍。你可以在这里阅读更多关于 weight 的信息!
除了权重之外,每个稀有度表都有自己的 items 列表。
rarity items
稀有度物品是一个映射列表,列出了稀有度表拥有的所有物品。
这些物品有以下设置:
| 键 | 值 | 默认值 |
|---|---|---|
amount | 最小-最大 Integer | 可变 |
material | Material | 可变 |
procedurallyGenerateEnchantments | Boolean | 可变 |
weight | Double | 可变 |
amount
设置掉落数量。可以表示为范围 amount: MIN-MAX 或单个值 amount: VALUE 表示固定数量。示例:
- 可变数量:
amount: 1-5(掉落 1 到 5 个物品) - 固定数量:
amount: 3(始终掉落正好 3 个)
material
使用 Spigot API 名称设置可能掉落物品的材料。
特殊情况 - serialized
使用 lootify 命令时,lootify 会提供 serialized 设置而不是材料。这是由插件自动生成的,不应手动生成。它的格式对人类不可读。
mmoitem
设置来自 MMOItems 插件的自定义物品。这是 material 字段的替代方案,用于使用自定义物品而不是原版 Minecraft 材料。
格式为:mmoitem: TYPE@ITEMNAME
示例:
- amount: 1-1
mmoitem: SWORD@Excalibur
weight: 1.0
注意:这需要安装 MMOItems 插件。如果 MMOItems 不可用或指定的物品不存在,该条目将被跳过并在控制台日志中显示警告。
info
用于向物品条目添加备注或注释的可选字段。此字段被插件完全忽略,仅用于管理文档目的。使用它来提醒自己某些物品为何以特定方式配置。
示例:
- amount: 1-1
material: DIAMOND_SWORD
weight: 1.0
info: "Rare drop for completing the dungeon"
weight
设置加权概率的权重。更多信息请点击这里。
procedurallyGenerateEnchantments
设置物品是否应根据 procedurallyGeneratedItemSettings 中的设置程序化生成。请注意,根据设置,这可能导致物品生成时没有附魔。
procedurallyGeneratedItemSettings
让我们再看看我们的配置文件示例:
procedurallyGeneratedItemSettings:
golden_sword:
bane_of_arthropods:
minlevel: 1
maxlevel: 5
chance: 0.2
looting:
minlevel: 1
maxlevel: 3
chance: 0.2
如你所见,此文件列出了材料类型,后跟附魔,然后是最小和最大等级以及概率。
请注意,你不能在这些设置中添加来自其他插件的自定义材料,而且除非其作者明确表示已使其系统兼容,否则你可能无法添加来自其他插件的自定义附魔。
至于附魔设置:
| 键 | 值 | 默认值 |
|---|---|---|
minlevel | Integer | 可变 |
maxlevel | Integer | 可变 |
chance | Chance | 可变 |
minlevel
设置最小附魔等级。
maxlevel
设置最大附魔等级。
chance
设置附魔被应用的概率,作为 0.0(永不)到 1.0(总是)之间的小数值。例如,值 0.2 表示 20% 的概率。这使用简单的概率检查,而不是像物品选择系统那样的加权概率。
故障排除
物品未出现在箱子中
- 验证宝藏文件中
isEnabled: true - 检查控制台是否有关于无效材料或物品的警告
- 如果使用自定义物品,确保已安装 MMOItems
- 材料必须使用精确的 Spigot API 名称
附魔未应用
- 在物品上设置
procedurallyGenerateEnchantments: true - 验证附魔名称匹配 Minecraft 的命名空间键
- 检查最小/最大等级是否在该附魔的有效范围内
- 记住
chance值是概率(0.2 = 20%),不是保证
自定义插件附魔不工作
只有明确支持 BetterStructures 集成的自定义附魔才能工作。请与附魔插件的作者确认兼容性。无效的附魔将在控制台中显示警告并提示此可能性。
出现空箱子
这不应该发生,因为系统保证至少一个物品。如果你看到空箱子,请验证:
- 箱子正在被 BetterStructures 填充(不是其他插件)
- 宝藏文件中的所有物品都是有效的(检查控制台警告)
- 宝藏文件确实被加载了(检查启动日志)