什么是宝藏文件?
宝藏文件决定了BetterStructures箱子的战利品表。它们通常被分配给[生成器](../Better Structures/creating_generators.md#treasurefilename),但它们也可以在[个别构建配置](../Better Structures/creating_structures.md#treasurefile)的级别上设置。
这些战利品表非常强大,但也需要了解一些基本的统计学概念才能理解。
在这里阅读那些概念,本页的其余部分假设您理解它们!
加权概率
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。标准差有助于确定这个数字在不同箱子之间可以变化多少。
小标准差(例如,1):这意味着大多数箱子将有非常接近平均值的物品数,如4、5或6个物品。这是一种更可预测的体验。例如,如果一个箱子的标准差为1,你可以期望几乎所有箱子都有4到6个物品。
中等标准差(例如,2):这里有更多的变化。箱子可能有3到7个物品。虽然5个物品仍然很常见,但找到稍多一点或稍少一点的箱子并不少见。所以,标准差为2,你可能会偶尔发现一个只有3个物品的箱子,或者如果你幸运的话,一个有7个物品的箱子。
大标准差(例如,3或更多):现在事情变得真正令人惊讶!箱子可能有少至2个物品或多至8个或更多。这意味着你可能找到一个只有几个物品的箱子,但也有机会找到一个装满好东西的箱子。例如,标准差为3,箱子可能有2到8个物品,使每个箱子的打开都是一个令人兴奋的赌博。
默认平均值为4,默认标准差为3。
实现详情
理解宝藏系统在内部如何工作可以帮助你更有效地配置它:
保证最少物品
该系统保证至少一个物品将始终出现在箱子中,即使高斯分布计算将导致零个物品。这可以防止玩家找到完全空的箱子。
随机位置放置
物品被放置在箱子内的随机位置,而不是按顺序从第一个位置填充。这创建了更自然外观的战利品分布,感觉不那么人为。
错误处理
如果物品材料在你的Minecraft版本中不存在(例如,在较新的版本中使用较早的配置,其中物品被重命名),该物品将被静默跳过,而不会导致错误。无效的附魔将在控制台中显示一次警告,然后在后续发生时被抑制,以避免日志泛滥。
特殊格式
宝藏文件有一个看起来像这样的特殊格式:
isEnabled: true
mean: 4.0
standardDeviation: 3.0
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
| Key | Values | Default |
|---|---|---|
isEnabled | 布尔值 | true |
mean
| Key | Values | Default |
|---|---|---|
mean | 双精度浮点数 | 4 |
设置mean。在这里阅读有关该内容的详情。
standardDeviation
| Key | Values | Default |
|---|---|---|
standardDeviation | 双精度浮点数 | 3 |
设置standardDeviation。在这里阅读有关该内容的详情。
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
稀有度没有固定的名称。你可以添加或删除它们,并根据需要自定义它们,只要你使用相同的格式。
注意,使这些稀有度表更或更少稀有的是战利品表的weight!
默认情况下:
common的默认weight为60rare的默认weight为30epic的默认weight为10
使普通物品的掉落几率是史诗物品的6倍。你可以在这里阅读更多关于weight的信息!
除了权重,每个稀有度表都有自己的items列表。
rarity items
稀有度物品是一个映射列表,它列出了稀有度表拥有的所有物品。
这些物品具有以下设置:
| Key | Values | Default |
|---|---|---|
amount | min-max 整数 | variable |
material | 材料 | variable |
procedurallyGenerateEnchantments | 布尔值 | variable |
weight | 双精度浮点数 | variable |
amount
设置掉落数量。这可以表示为范围amount: MIN-MAX或单个值amount: VALUE来表示固定数量。示例:
- 可变数量:
amount: 1-5(掉落1到5个物品) - 固定数量:
amount: 3(总是掉落3个物品)
material
使用Spigot API名称设置物品的材料以可能掉落。
特殊情况 - serialized
使用lootify命令时,lootify不会提供材料,而是提供一个serialized设置。这是由插件自动生成的,不应手动生成。它的格式不可人工阅读。
mmoitem
从MMOItems插件设置自定义物品。这是使用自定义物品而不是原版Minecraft材料的material字段的替代品。
格式是:mmoitem: TYPE@ITEMNAME例如:yml- amount: 1-1 mmoitem: SWORD@Excalibur weight: 1.0注意:这需要安装MMOItems插件。如果MMOItems不可用或指定的物品不存在,条目将被跳过并在控制台日志中显示警告。
info
用于向物品条目添加注释或注解的可选字段。该字段完全被插件忽略,仅用于管理文档目的。使用它来提醒自己为什么某些物品以特定方式配置。
例子:yml- amount: 1-1 material: DIAMOND_SWORD weight: 1.0 info: "完成地下城的稀有掉落"***
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
正如你所看到的,这个文件列出了材料类型,然后是附魔,然后是最小和最大级别和一个机会。
请注意,你不能在这些设置中添加其他插件的自定义材料,并且你可能无法添加其他插件的自定义附魔,除非它们的作者明确说他们已经使他们的系统兼容。
关于附魔设置:
| Key | Values | Default |
|---|---|---|
minlevel | 整数 | variable |
maxlevel | 整数 | variable |
chance | 机会 | variable |
minlevel
设置最小附魔级别。
maxlevel
设置最大附魔级别。
chance
设置应用附魔的概率,作为0.0(从不)到1.0(总是)之间的十进制值。例如,值为0.2意味着20%的机会。这使用简单的概率检查,而不是像物品选择系统那样的加权概率。
故障排除
物品未出现在箱子中
- 验证宝藏文件是否有
isEnabled: true - 检查控制台是否有关于无效材料或物品的警告
- 如果使用自定义物品,请确保安装了MMOItems
- 材料必须使用精确的Spigot API名称
附魔未应用
- 在物品上设置
procedurallyGenerateEnchantments: true - 验证附魔名称与Minecraft的命名空间键匹配
- 检查最小/最大级别是否在该附魔的有效范围内
- 记住
chance值是概率(0.2 = 20%),不是保证
自定义插件附魔不工作
只有明确支持BetterStructures集成的自定义附魔才会工作。咨询附魔插件的作者有关兼容性。无效的附魔将在控制台中显示警告,建议这种可能性。
空箱子出现
这不应该发生,因为系统保证至少有一个物品。如果你看到空箱子,请验证:
- 箱子由BetterStructures填充(不是其他插件)
- 你的宝藏文件中的所有物品都有效(检查控制台警告)
- 宝藏文件实际上被加载了(检查启动日志)