什麼是寶藏檔案?
寶藏檔案決定了 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。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
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
注意:這是檔案的一個非常精簡的版本,實際檔案有 2599 行,因為它涵蓋了更多的戰利品和每一個可能的附魔。
isEnabled
| Key | Values | Default |
|---|---|---|
isEnabled | Boolean | true |
mean
| Key | Values | Default |
|---|---|---|
mean | Double | 4 |
設定 mean(平均值)。在此處閱讀相關詳細資訊。
standardDeviation
| Key | Values | Default |
|---|---|---|
standardDeviation | Double | 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(稀有度)!
rarities
稀有度沒有固定的名稱。您可以添加或刪除它們,並根據需要自訂它們,只要使用相同的格式即可。
請注意,使這些稀有度表更稀有或更不稀有的是戰利品表的 weight(權重)!
預設情況下:
common的預設weight為 60rare的預設weight為 30epic的預設weight為 10
使普通物品掉落的可能性是史詩物品的 6 倍。您可以在此處閱讀更多關於 weight 的資訊!
除了權重之外,每個稀有度表都有自己的 items 列表。
rarity items
稀有度物品是一個映射列表,列出了稀有度表擁有的所有物品。
這些物品有以下設定:
| Key | Values | Default |
|---|---|---|
amount | min-max Integer | variable |
material | Material | variable |
procedurallyGenerateEnchantments | Boolean | variable |
weight | Double | variable |
amount
設定掉落的數量。這以範圍的形式表示如下 amount: MIN-MAX。例如,要掉落 1 到 5 個物品:amount: 1-5。
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: "Rare drop for completing the dungeon"***
weight
為加權機率設定權重。更多資訊請參閱此處。
procedurallyGenerateItems
根據 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 | Integer | variable |
maxLevel | Integer | variable |
chance | Chance | variable |
minLevel
設定最小附魔等級。
maxLevel
設定最大附魔等級。
chance
設定附魔發生的機率。這不使用加權機率,只是普通的擲骰子。
故障排除
箱子中沒有出現項目
- 驗證寶藏檔案具有
isEnabled: true - 檢查控制台是否存在有關無效材料或項目的警告
- 如果使用自定義項目,請確保安裝了 MMOItems
- 材料必須使用精確的 Spigot API 名稱
附魔不應用
- 在項目上設置
procedurallyGenerateEnchantments: true - 驗證附魔名稱與 Minecraft 的命名空間密鑰匹配
- 檢查最小/最大級別是否在該附魔的有效範圍內
- 記住
chance值是概率(0.2 = 20%),不是保證
自定義插件附魔不工作
只有明確支持 BetterStructures 整合的自定義附魔才能工作。請與附魔插件的作者查詢相容性。無效的附魔將在控制台中顯示警告,建議這種可能性。
出現空箱子
這不應該發生,因為系統保證至少一個項目。如果您看到空箱子,請驗證:
- 箱子由 BetterStructures 填充(不是另一個插件)
- 寶藏檔案中的所有項目都有效(檢查控制台警告)
- 寶藏檔案確實被加載(檢查啟動日誌)