跳到主要内容

什么是宝藏文件?

宝藏文件决定了 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

默认值
isEnabledBooleantrue

mean

默认值
meanDouble4

设置 mean(均值)。在这里阅读相关详情。


standardDeviation

默认值
standardDeviationDouble3

设置 standardDeviation(标准差)。在这里阅读相关详情。


vanillaTreasure

默认值
vanillaTreasureString

设置一个可选的原版 Minecraft 战利品表与自定义战利品一起使用。这使用 Bukkit 的 LootTables 枚举值(例如 BURIED_TREASURESHIPWRECK_TREASURESIMPLE_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 配置键下有一个包含 commonrare 的映射。这些就是 rarities(稀有度)!


rarities

稀有度没有固定的名称。你可以添加或删除它们,并根据需要进行自定义,只要使用相同的格式即可。

请注意,使这些稀有度表更稀有或更常见的是战利品表的 weight(权重)!

默认情况下:

  • common 的默认 weight 为 60
  • rare 的默认 weight 为 30
  • epic 的默认 weight 为 10

使普通物品的掉落概率是史诗物品的 6 倍。你可以在这里阅读更多关于 weight 的信息!

除了权重之外,每个稀有度表都有自己的 items 列表。


rarity items

稀有度物品是一个映射列表,列出了稀有度表拥有的所有物品。

这些物品有以下设置:

默认值
amount最小-最大 Integer可变
materialMaterial可变
procedurallyGenerateEnchantmentsBoolean可变
weightDouble可变

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

如你所见,此文件列出了材料类型,后跟附魔,然后是最小和最大等级以及概率。

请注意,你不能在这些设置中添加来自其他插件的自定义材料,而且除非其作者明确表示已使其系统兼容,否则你可能无法添加来自其他插件的自定义附魔。

至于附魔设置:

默认值
minlevelInteger可变
maxlevelInteger可变
chanceChance可变

minlevel

设置最小附魔等级。


maxlevel

设置最大附魔等级。


chance

设置附魔被应用的概率,作为 0.0(永不)到 1.0(总是)之间的小数值。例如,值 0.2 表示 20% 的概率。这使用简单的概率检查,而不是像物品选择系统那样的加权概率。


故障排除

物品未出现在箱子中

  • 验证宝藏文件中 isEnabled: true
  • 检查控制台是否有关于无效材料或物品的警告
  • 如果使用自定义物品,确保已安装 MMOItems
  • 材料必须使用精确的 Spigot API 名称

附魔未应用

  • 在物品上设置 procedurallyGenerateEnchantments: true
  • 验证附魔名称匹配 Minecraft 的命名空间键
  • 检查最小/最大等级是否在该附魔的有效范围内
  • 记住 chance 值是概率(0.2 = 20%),不是保证

自定义插件附魔不工作

只有明确支持 BetterStructures 集成的自定义附魔才能工作。请与附魔插件的作者确认兼容性。无效的附魔将在控制台中显示警告并提示此可能性。

出现空箱子

这不应该发生,因为系统保证至少一个物品。如果你看到空箱子,请验证:

  • 箱子正在被 BetterStructures 填充(不是其他插件)
  • 宝藏文件中的所有物品都是有效的(检查控制台警告)
  • 宝藏文件确实被加载了(检查启动日志)