1. 程式人生 > 實用技巧 >Minecraft-1.16.2-資料包開發學習#1

Minecraft-1.16.2-資料包開發學習#1

學習方法

首先,資料包是JAVA版Minecraft且是1.13版本之後才有的,如果是基岩版或者版本過老,可能不會支援資料包。

主要通過Minecraft Wiki學習(文章內容很多地方都會引用Wiki的原文,我就不一一註明了),藉助一些教學視訊進行輔助。

當然,最重要的還是應該應用於遊戲中,多實踐才是關鍵。

大概看了一下,在開始學習之前應該學會JSON的相關知識,很簡單,有面向物件程式設計基礎的話一看就會。


先從框架來說

資料包下的根目錄有一個資料夾data,兩個檔案pack.mcmetapack.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
        }
      ]
    }
  ]
}

至於更加詳細的內容修改,比如物品掉落的概率什麼的,之後慢慢細談。現在就是直觀的感受一下資料包對原版內容的修改。

當然,資料包的製作肯定要考慮遊戲的平衡性,打殭屍掉鑽石什麼的太不合理了,這樣很容易讓遊戲失去樂趣,在製作資料包的時候一定要注意這一點。