跳至主要内容

什麼是寶藏檔案?

寶藏檔案確定 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

KeyValuesDefault
isEnabledBooleantrue

mean

KeyValuesDefault
meanDouble4

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


standardDeviation

KeyValuesDefault
standardDeviationDouble3

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


vanillaTreasure

KeyValuesDefault
vanillaTreasureStringnone

設定一個可選的原版 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

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

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

預設情況下:

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

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

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


rarity items

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

這些物品有以下設定:

KeyValuesDefault
amountmin-max Integervariable
materialMaterialvariable
procedurallyGenerateEnchantmentsBooleanvariable
weightDoublevariable

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

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

請注意,你無法在這些設定中新增其他外掛的自訂材料,而且除非外掛作者明確說明他們已使其系統相容,否則你可能無法新增其他外掛的自訂附魔。

至於附魔設定:

KeyValuesDefault
minlevelIntegervariable
maxlevelIntegervariable
chanceChancevariable

minlevel

設定最小附魔等級。


maxlevel

設定最大附魔等級。


chance

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


疑難排解

物品不出現在箱子中

  • 驗證寶藏檔案有 isEnabled: true
  • 檢查控制台是否有關於無效材料或物品的警告
  • 如果使用自訂物品,確保 MMOItems 已安裝
  • 材料必須使用精確的 Spigot API 名稱

附魔未被應用

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

自訂外掛附魔不起作用

只有明確支援 BetterStructures 整合的自訂附魔才會起作用。請向附魔外掛作者諮詢相容性。無效的附魔會在控制台顯示警告並提示此可能性。

出現空箱子

由於系統保證至少一個物品,這不應該發生。如果你看到空箱子,請驗證:

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