Minecraft-1.16.2-資料包開發學習#1
學習方法
首先,資料包是JAVA版Minecraft且是1.13版本之後才有的,如果是基岩版或者版本過老,可能不會支援資料包。
主要通過Minecraft Wiki學習(文章內容很多地方都會引用Wiki的原文,我就不一一註明了),藉助一些教學視訊進行輔助。
當然,最重要的還是應該應用於遊戲中,多實踐才是關鍵。
大概看了一下,在開始學習之前應該學會JSON的相關知識,很簡單,有面向物件程式設計基礎的話一看就會。
先從框架來說
資料包下的根目錄有一個資料夾data
,兩個檔案pack.mcmeta
,pack.png
,這裡詳細說一下兩個檔案,data
資料夾將會作為重點單獨介紹。
pack.mcmeta
這個檔案相當於資料包的標識,有了這個檔案,這個檔案包才能被Minecraft識別為資料包。
其中的內容為JSON格式。
例如1.16.4原版的資料包中,pack.mcmeta檔案的內容如下:
注意,根據JSON規範(http://www.json.org, RFC 4627, RFC 7159),JSON是不支援註釋的,但是為了學習做筆記方便,仍然按照C/C++中的註釋方法做一些註釋。如果想要直接用我的程式碼,請將所有註釋刪除後再使用。
{ "pack"/*存放資料包資訊*/: { "pack_format":6, //資料包版本,可以是任何數字,但是其實有標準,後面會說明。 "description":"The default data for Minecraft" //一段原始JSON文字。在資料包列表下,游標移動到對應的資料包時會顯示此處填寫的描述。 } }
pack_format的標準
如果資料包用於1.17快照,則 pack_format應該為7。如果資料包用於1.16.2版本,則 pack_format應該設為6。如果資料包用於1.15~1.16.1,則 pack_format應該為5。如果資料包用於1.13~1.14,則 pack_format應該為4。
pack.png
是一個png格式的圖片,儘量是正方形的圖片,用於給你的資料包一個好看的圖示。
資料包的測試
在存檔的datapacks
資料夾下放入資料包,將修改之後的資料包儲存後,在遊戲中輸入/reload
,即可重新載入資料包(有的資料包需要啟動遊戲才能重新載入完成)。
建議使用VScode,這樣可以載入資料夾的文字編輯器,方便管理和修改各種檔案。特別是安裝“Datapack Helper Plus”,“datapack-helper”,“mcfunction”等等外掛之後,編輯起來十分方便。
在遊戲中輸入/datapack list
檢視遊戲載入好的資料包。
data資料夾
以上內容都是很基本的東西,包括建立一個空的資料包,還有如何給資料包新增描述資訊。
當然,僅僅依靠上面的東西是絕對不夠的。重頭戲就是data,這是才是資料包實現功能的核心。
data
資料夾下可以建立資料夾,在這裡建立的資料夾的名稱將會作為名稱空間的名稱。
原版Minecraft使用的名稱空間為Minecraft
,這意味著只有當資料包需要覆蓋現有的Minecraft資料或將內容新增到原版標籤時才應使用此名稱空間。
實現打殭屍掉鑽石
小測試,我希望打殭屍掉落的鑽石而不是腐肉。具體操作如下:
在data
資料夾下建立新的資料夾,並命名為Minecraft
,進入這個新建立的資料夾。
打怪掉落屬於戰利品表的內容,所以在Minecraft
資料夾下建立新的資料夾,並命名為loot_tables
,進入這個新建立的資料夾。
注意:中文Wiki上的內容需要更新,按照上面的說法,直接在
loot_tables
資料夾下建立json檔案就可以了,但是在1.16.2版本上並不能實現。
使用解壓軟體開啟minecraft客戶端核心的jar包,進入\data\minecraft\loot_tables\
發現下面還有資料夾,分別為blocks
,chests
,entities
,gameplay
。先不管其他的內容,我們可以在entities
下找到殭屍的檔案zombie.json
。
這說明我們資料包的loot_tables
資料夾下也應該建立命名相同的資料夾。
在loot_tables
資料夾下建立新的資料夾,並命名為entities
進入這個新建立的資料夾。
建立json檔案,檔案全稱為zombie.json
,這樣就可以覆蓋原版的內容了。
稍微修改原版zombie.json的內容,並儲存即可。
{
"type": "minecraft:entity",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"functions": [
{
"function": "minecraft:set_count",
"count": {
"min": 0.0,
"max": 2.0,
"type": "minecraft:uniform"
}
},
{
"function": "minecraft:looting_enchant",
"count": {
"min": 0.0,
"max": 1.0
}
}
],
"name": "minecraft:rotten_flesh"//將這一行修改為 "name": "minecraft:diamond" 就可以讓殭屍掉鑽石啦。
}
]
},
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:iron_ingot"
},
{
"type": "minecraft:item",
"name": "minecraft:carrot"
},
{
"type": "minecraft:item",
"name": "minecraft:potato"
}
],
"conditions": [
{
"condition": "minecraft:killed_by_player"
},
{
"condition": "minecraft:random_chance_with_looting",
"chance": 0.025,
"looting_multiplier": 0.01
}
]
}
]
}
至於更加詳細的內容修改,比如物品掉落的概率什麼的,之後慢慢細談。現在就是直觀的感受一下資料包對原版內容的修改。
當然,資料包的製作肯定要考慮遊戲的平衡性,打殭屍掉鑽石什麼的太不合理了,這樣很容易讓遊戲失去樂趣,在製作資料包的時候一定要注意這一點。