跳至主要內容

什麼是寶藏檔案?

寶藏檔案確定 BetterStructures 箱子的戰利品表。它們通常被分配給生成器,但也可以在單個建築設定級別設定。

這些戰利品表非常強大,但需要了解一些基本的統計概念。

統計學概念​

在這裡閱讀這些概念,頁面的其餘部分假設你已經理解了它們!

加權機率

BetterStructures 和 EliteMobs(同一作者的另一個外掛)都在其戰利品系統中使用加權機率的概念。這是為了解決一個簡單的問題:如何設定從可能無限的物品列表中選擇一個物品的機率?

加權機率為每個物品分配權重。100 個物品的權重都為 1 時,每個物品被選中的機率是 1%。再新增一個權重為 1 的物品,101 個物品的機率就都變為約 0.99%。若最後一個物品的權重改為 2,總權重變為 102,它的機率就是 2/102,約 1.96%。若最後一個物品的權重改為 100,總權重變為 200,它佔總權重的一半,被選中的機率就是 50%。

如你所見,當你可能有數百個要隨機化的東西時,這個方法非常好用。

高斯分佈

高斯分佈是一個鐘形的數學函數。

你可能會想知道這與戰利品系統有什麼關係。BetterStructures 在設定箱子中的戰利品時需要決定的一件事是箱子中出現多少戰利品。數量應該一致地在某個特定數字附近,但最好不要太可預測,以免開箱變得不那麼刺激。

為了實現這種半隨機效果,使用高斯分佈來隨機化選擇多少物品。一旦確定了數量,加權機率就會從稀有度表中隨機選擇一個元素,同時考慮權重。

那麼高斯分佈是如何運作的呢?

幸運的是,你不必擔心背後的數學原理,可以專注於修改它的兩個設定:均值和標準差。

均值

mean 設定用來決定戰利品嘗試次數的高斯抽樣中心。實作會無條件進位,將負值限制為零,再增加一次嘗試。因此,均值為 5 並不代表實際放入的物品堆平均恰好為 5。

標準差

standardDeviation 控制初始抽樣的分散程度。取整前,約 68% 的高斯值落在均值上下一個標準差內,約 95% 落在兩個標準差內。均值為 5、標準差為 1 時,約 68% 的原始結果在 4 到 6 之間。調整標準差會改變這種分散程度。

這些是機率,不是嚴格的最小值或最大值。最終放入的物品堆數還取決於戰利品條目是否有效,以及物品欄是否有空槽位。

預設均值為 4,預設標準差為 3。


實現細節

了解寶藏系統的內部運作方式可以幫助你更有效地設定它:

最少嘗試次數

自訂稀有度列表非空時,戰利品嘗試次數為 max(ceil(gaussian(mean, standardDeviation)), 0) + 1。額外的一次嘗試表示設定的均值不是最終物品堆數的平均值。至少會嘗試一次,但物品表無效或為空、物品建立失敗或箱子填充事件遭取消時,箱子仍可能為空。

隨機槽位放置

物品放在箱子內的隨機槽位中,而不是從第一個槽位開始依序填入。每堆物品都會放進隨機選出的空槽位,既有內容絕不會被覆寫。容器沒有空槽位時就停止抽取;已經滿的容器不會得到任何戰利品,無論是自訂還是原版戰利品。

錯誤處理

如果物品材料在你的 Minecraft 版本中不存在(例如,在較新版本中使用較舊的設定,其中物品已重新命名),該物品將被靜默跳過而不會導致錯誤。無法解析為真實 minecraft: 附魔鍵的附魔條目同樣會被靜默略過;而以不存在材料為鍵的 procedurallyGeneratedItemSettings 區塊則會記錄一則指名該檔案的警告。

缺少或無效的 amount 會產生警告。讀取到的最小值會提高到至少 1,最大值會提高到至少等於最小值。未指定數量會變為 1,5-2 會變為固定數量 5。格式錯誤的範圍可能保留已成功解析的最小值。請修正檔案,不要依賴這種修補。

稀有度和物品都應使用有限的正權重。權重缺漏、為零、為負或不是數字的稀有度會被忽略。權重缺漏、為負或不是數字的物品條目會被捨棄;非數字和負值會記錄一則指名該檔案的警告。權重為 0 的物品會留在表中,但永遠不會被選中。若某個稀有度中所有物品的權重都是 0,抽到該稀有度時不會加入任何物品。選擇失敗的警告在外掛保持載入期間,每個警告類別只出現一次,而不是每個檔案一次。不要預期所有錯誤權重都會觸發警告。


特殊格式

寶藏檔案有一種特殊格式,如下所示:

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

這是精簡範例。隨附的寶藏檔案包含更大的物品表和附魔設定,部分預設的均值和標準差也不同。例如,木桶食物表的均值為 1,標準差為 0.7。

isEnabled

鍵值預設值
isEnabledBooleantrue

此欄位會儲存,但目前寶藏載入器和戰利品抽取邏輯不會用它停用表。僅設為 false 不會停止戰利品生成。請停用對應的建築或生成器;木桶則可使用木桶戰利品開關。


mean

鍵值預設值
meanDouble4

設定 mean。在這裡閱讀相關詳細資訊。


standardDeviation

鍵值預設值
standardDeviationDouble3

設定 standardDeviation。在這裡閱讀相關詳細資訊。


vanillaTreasure

鍵值預設值
vanillaTreasureString無,隨附的 vanilla_* 檔案除外

設定在自訂戰利品之外使用的選用原版戰利品表。使用 Bukkit 的 LootTables 列舉值,例如 BURIED_TREASURE、SHIPWRECK_TREASURE、SIMPLE_DUNGEON,不區分大小寫。原版抽取在自訂戰利品之後進行,使用剩餘空槽位。未設定時只使用自訂戰利品;無效名稱會產生警告並停用原版部分。

隨附的原版寶藏檔案在缺少此鍵時,會預設使用對應的戰利品表:vanilla_bastion_treasure.yml 使用 BASTION_TREASURE,vanilla_buried_treasure.yml 使用 BURIED_TREASURE,vanilla_end_city_treasure.yml 使用 END_CITY_TREASURE,vanilla_fishing_treasure.yml 使用 FISHING_TREASURE,vanilla_shipwreck_treasure.yml 使用 SHIPWRECK_TREASURE。其他檔案都需要明確設定此欄位;光靠 vanilla_* 檔名並不會選擇戰利品表。


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 的映射。這些就是稀有度!


稀有度​

稀有度沒有固定名稱。你可以新增或移除它們,並隨意自訂,只要你使用相同的格式。

請注意,使這些稀有度表或多或少稀有的是戰利品表的 weight!

預設情況下:

  • common 的預設 weight 為 60
  • rare 的預設 weight 為 30
  • epic 的預設 weight 為 10

使普通物品掉落的可能性是史詩物品的 6 倍。你可以在這裡閱讀更多關於 weight 的資訊!

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


稀有度物品​

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

這些物品有以下設定:

鍵值預設值
amount最小至最大 Integer可變
materialMaterial可變
procedurallyGenerateEnchantmentsBoolean可變
weightDouble可變

amount​


設定掉落數量。可以用範圍 amount: MIN-MAX 或固定值 amount: VALUE 表示。範例:

  • 可變數量:amount: 1-5(掉落 1 到 5 個物品)
  • 固定數量:amount: 3(總是掉落正好 3 個)

material​

使用 Spigot API 名稱設定可能掉落的物品材料。


serialized 的特殊處理​

/bs lootify 使用 Bukkit 物品序列化寫入 serialized 映射,保留手持物品的資料。請用指令產生,不要手動建構。每個條目只使用一種物品來源:material、serialized 或 mmoitem。若同時存在有效的 material,它優先於序列化物品或 MMOItems 物品。程序化附魔只適用於材料條目。


mmoitem​

從 MMOItems 外掛設定自訂物品。這是 material 欄位的替代方案,用於使用自訂物品而非原版 Minecraft 材料。

格式為:mmoitem: TYPE@ITEMNAME

範例:

- amount: 1-1
mmoitem: SWORD@Excalibur
weight: 1.0

需要 MMOItems。欄位名稱也接受 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

如你所見,此檔案列出了材料類型,接著是附魔,然後是最小和最大等級及機率。

此部分接受 Bukkit 材料及註冊在 minecraft: 命名空間下的附魔,其他附魔命名空間會被略過。需要保留其他外掛提供的物品時,請使用序列化物品條目。

若寶藏檔案沒有 procedurallyGeneratedItemSettings 區塊,BetterStructures 會將其預設附魔表寫入該檔案。已有此區塊的檔案只會使用其中列出的條目。

至於附魔設定:

鍵值預設值
minlevelInteger可變
maxlevelInteger可變
chanceChance可變

minlevel​

設定最小附魔等級。應至少為 1,且不大於 maxlevel。


maxlevel​

設定最大附魔等級,隨機抽取包含此值。外掛不會將其限制在原版附魔上限內,而是繞過 Bukkit 的等級限制新增附魔。無效數字或顛倒的範圍可能導致載入或物品建立失敗。


chance​

設定附魔被應用的機率,作為 0.0(從不)到 1.0(總是)之間的小數值。例如,值為 0.2 表示 20% 的機會。這使用簡單的機率檢查,而不是像物品選擇系統那樣的加權機率。


疑難排解

物品不出現在箱子中

  • 確認建築和生成器已啟用,並參照有效的寶藏檔案。即使 schematic 設定了覆寫項目,生成器仍需要有效的寶藏表
  • 檢查控制台是否有關於無效材料或物品的警告
  • 如果使用自訂物品,確保 MMOItems 已安裝
  • 材料必須使用精確的 Spigot API 名稱

附魔未被應用

  • 在物品上設定 procedurallyGenerateEnchantments: true
  • 驗證附魔名稱與 Minecraft 的命名空間鍵匹配
  • 檢查最小/最大等級是否在該附魔的有效範圍內
  • 記住 chance 值是機率(0.2 = 20%),不是保證

自訂外掛附魔不起作用

只有註冊在原版 minecraft: 命名空間下的附魔會被讀取。procedurallyGeneratedItemSettings 區塊中的其他項目都會被略過且不發出警告,因此某個自訂附魔靜靜地什麼都沒做,是預期中的症狀而非錯誤。請向附魔外掛的作者確認相容性。

出現空箱子

最小值適用於戰利品嘗試次數,不保證成功放入物品。如果你看到空箱子,請驗證:

  • 箱子是由 BetterStructures 填充的(不是其他外掛)
  • 你的寶藏檔案中的所有物品都是有效的(檢查控制台警告)
  • 寶藏檔案確實被載入了(檢查啟動日誌)