Minecraft Wiki

除另有声明,转载时均必须注明出处若簡繁轉換出錯,請以遊戲內為準请勇于扩充与修正内容有兴趣逛逛我们的微博沟通交流,欢迎到社区专页需要协助,请在告示板留言

了解更多

Minecraft Wiki
Advertisement
Information icon
此特性為Java版獨有。

本教學介紹如何製作資料包

入門[]

資料包允許玩家加入及修改函數戰利品表、世界結構進度合成標籤維度述詞等Minecraft遊戲內容。

禁止事項[]

在製作或發布資料包時,你不應該:

  • 發布Minecraft版本或修改版,使得未從Mojang購買Minecraft的玩家可以獲得它。
  • 以任何方式發布反編譯的Minecraft源代碼。

建立資料包[]

要建立資料包,請首先找到世界資料夾中的datapacks資料夾。要查找世界資料夾,請在遊戲目錄(預設情況下為.minecraft)中找到saves資料夾。

  • 單人遊戲中,你可以選中你的世界,點擊「編輯」,然後點擊「打開世界資料夾」。
  • 伺服器上,你可以打開其根目錄(server.properties所在的位置),然後打開world資料夾。

打開datapacks資料夾後,建立一個資料夾並打開。資料夾名即是資料包名,可以任取,但不能含有漢字

打開新資料夾後要做的第一件事是建立pack.mcmeta檔案。這樣Minecraft才能識別該資料包。

建立pack.mcmeta檔案[]

在剛剛建立的資料夾裡新建一個名為pack.mcmeta的純文字檔案。

注意

重新命名時,請確保檔案擴展名為.mcmeta而非.txt。也即,你可能要變更其擴展名。你可能會收到警告:如果改變檔案擴展名,可能會導致檔案不可用。這表明,你已正確重新命名pack.mcmeta檔案。

如果你使用的是Microsoft Windows操作系統並且看不到檔案擴展名,對於Windows 11,可以在檔案資源管理器的「查看」→「顯示」選單中找到「檔案擴展名」選項並開啟;對於Windows 8、Windows 8.1或Windows 10,可以透過轉到其中的「查看」選單並勾選「檔案擴展名」核取方塊來啟用它。

FileExtensions

對於其他Windows版本,可以取消勾選「資料夾選項」中的「隱藏已知檔案類型的擴展名」選項。

FolderOpinoinShowFoldersextension

在資料夾選項中設定顯示檔案擴展名

理論上任何文字編輯器都可以編輯pack.mcmeta,但建議文字編輯器支持JSON。JSON是mcmeta檔案和資料包中大多數其他檔案使用的格式。大多數文字編輯器不會將mcmeta擴展名識別為JSON文字。因此,你需要手動配置編輯器。

在你選擇的文字編輯器中打開pack.mcmeta並粘貼或鍵入以下內容:

{
  "pack": {
    "pack_format": X,
    "description": "教程数据包"
  }
}

對於pack.mcmeta,可在資料包的描述和名稱中使用「§」符號(Minecraft格式化代碼)。

你應該根據你的Minecraft版本替換“pack_format”後面的X

“pack_format”需為:

 description可以使用字串或原始JSON文字。當你將滑鼠懸停在/datapack list列出的資料包名或進入建立世界的資料包介面時,這段內容將會顯示。

注意

這個檔案是用JSON編寫的!本教學沒有詳細介紹JSON格式,但要注意,不要忘記引號、冒號、圓括號和方括號。缺少任意一個都可能導致你的資料包無法正常工作!你可以使用JSON驗證器檢查你的檔案,例如JSONLint

測試你的資料包[]

如果你建立了pack.mcmeta,嘗試在遊戲中測試它。打開Minecraft,進入世界或輸入/reload(如果你已經進入了世界),然後輸入/datapack list。此時應該出現兩條資訊:第一條是[vanilla],第二條應該是[file/(你的数据包的名称)]。當你將滑鼠懸停在資料包名稱上時,你應該會看到資料包的描述,即你在pack.mcmeta description中所寫的內容。

故障排除[]

如果列表中沒有你的包,請確保pack.mcmeta的語法正確且已儲存。看看有沒有缺少大括號{}、逗號,、冒號:,雙引號"",方括號[]。請記住,對於每個左大括號、雙引號或方括號,必須有一個右大括號、雙引號或方括號與之配對。

命名[]

在資料包資料夾中建立一個名為data的資料夾,與pack.mcmeta在同一個資料夾下。在data資料夾中,須建立至少一個資料夾作為命名空間。

資料包中的條目以命名空间:路径作為命名空間ID。相應的檔案將位於data/命名空间/(数据类型)/路径.(后缀)。請注意,路徑中的/字元將轉換為目錄分隔符。

例如:

  • ID為dummy:foo_proof/bar物品標籤將定位到data/dummy/tags/item/foo_proof/bar.json
  • ID為foo:handler/bar_call函數將定位到data/foo/functions/handler/bar_call.mcfunction

合法字元[]

資料包中的命名空間、路徑、資料夾名和檔案名應僅包含以下符號:

  • 0123456789 數字
  • abcdefghijklmnopqrstuvwxyz 小寫字母
  • _ 下劃線
  • - 連字號(減號)
  • / 正斜槓(不能用於命名空間)
  • . 句號(不能用於命名空間)

首選命名格式為以下劃線隔開的小寫字母單詞(lower_case_with_underscores),稱為蛇形命名法(lower snake case)。

命名空間[]

遊戲中的大多數對象都有一個命名空間(namespace),以防止潛在的內容衝突或無意的覆蓋。

例如,如果有兩個資料包為Minecraft分別加入了一個新的小遊戲機制,並且兩者都有名為start函數。如果沒有命名空間,這兩個函數就會衝突,小遊戲也會被破壞。但如果它們分別有game_1game_2兩個不同的命名空間,則函數名分別為game_1:startgame_2:start,就不會衝突了。

大多數情況下Minecraft的命名空間ID需要命名空間的存在,如/function指令,路徑和命名空間缺一不可。若命名空間未指定,則預設其為minecraft

新增內容時,請一定使用你自己的命名空間。僅當需要覆蓋其他東西,或追加標籤的時候,才使用其他命名空間。例如,遊戲本體使用minecraft命名空間。僅當資料包需要覆蓋原版資料,或將內容加入到原版標籤時才會使用此命名空間。

函數[]

主條目:Java版函數

函數是一系列順次執行的指令

要建立新函數,應在命名空间資料夾中新建functions資料夾。然後,在functions(或其子資料夾)中新建函數檔案(函数名).mcfunction,這就是你的函數檔案。你的函數會被遊戲命名為(命名空间):(函数名称),或者當位於子資料夾時為(命名空间):(子文件夹1)/(子文件夹2)/…/(名称)

一行指令需要單獨出現在一行,行首可以有若干空格或縮進。在函數檔案中,指令不以/開頭

作為分隔,你可以留下空白行。你也可以使用#在行首以引起一段單行注釋。#必須在一行的最前面,其前面不應有空格。

在實際執行函數時,空白行、注釋均會被忽略。

在遊戲規則sendCommandFeedBack為true且每次以玩家的身份執行函數(玩家主動執行或透過/execute)時,均會返回一行「已從函數 'example:test' 執行 x 個指令」。

戰利品表[]

主條目:戰利品表

當一個生物死亡時,Minecraft根據戰利品表決定其掉落物。當首次開啟自然生成的容器(例如儲物箱)時,Minecraft也根據戰利品表生成其中的戰利品。可以透過/loot指令調用它們。

在命名空間資料夾中新建loot_tables資料夾以建立一個新的戰利品表。然後,在loot_tables(或其子資料夾)中新建戰利品表檔案战利品表名.json。在遊戲中,戰利品表以命名空間ID的格式引用。

作為參考,這裡給出的戰利品表的一個樣例:

{
  "type": "minecraft:entity",
  "pools": [
    {
      "rolls": 1.0,
      "bonus_rolls": 0.0,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "type": "minecraft:uniform",
                "min": 0.0,
                "max": 2.0
              },
              "add": false
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "type": "minecraft:uniform",
                "min": 0.0,
                "max": 1.0
              }
            }
          ],
          "name": "minecraft:leather"
        }
      ]
    },
    {
      "rolls": 1.0,
      "bonus_rolls": 0.0,
      "entries": [
        {
          "type": "minecraft:item",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "type": "minecraft:uniform",
                "min": 1.0,
                "max": 3.0
              },
              "add": false
            },
            {
              "function": "minecraft:furnace_smelt",
              "conditions": [
                {
                  "condition": "minecraft:entity_properties",
                  "predicate": {
                    "flags": {
                      "is_on_fire": true
                    }
                  },
                  "entity": "this"
                }
              ]
            },
            {
              "function": "minecraft:looting_enchant",
              "count": {
                "type": "minecraft:uniform",
                "min": 0.0,
                "max": 1.0
              }
            }
          ],
          "name": "minecraft:beef"
        }
      ]
    }
  ]
}

如果你想要查找原版戰利品表,或是學習其中標籤的具體含義,請參見戰利品表

結構[]

結構可以用於結構方塊拼圖方塊,也可以覆蓋Minecraft中原版結構的外觀。結構以NBT格式儲存,你可以使用結構方塊建立NBT檔案。MCEdit之類的第三方軟件也可以匯出NBT檔案。

在命名空間資料夾中建立structures資料夾以向資料包加入一個新的結構。然後,把你的NBT結構檔案放在structures資料夾(或它的子資料夾)之下。在遊戲中,結構以命名空間ID的格式引用。

進度[]

主條目:進度

玩家透過完成進度來獲得獎勵。

在命名空間資料夾中建立advancements資料夾以建立一個新的進度。然後,在這個資料夾(或它的子資料夾)之下新建進度檔案 进度名.json。在遊戲中,進度以命名空間ID的格式引用。

{
    "parent": "namespace:example/advancement/root",
    "display": {
        "icon": {
            "item": "minecraft:wooden_sword"
        },
        "title": "First blood",
        "description": "to kill a monster.",
        "announce_to_chat": true,
        "show_toast": true,
        "frame": "task"
    },
    "criteria": {
        "first_kill_monster":{
            "trigger":"player_killed_entity",
            "conditions": {
                "entity":{
                    "type":"#namespace:target",
                    "nbt": "{Tags:[\"change\"]}"
                }
            }
        }
    }
}

parent鍵是可選的,它提供了該進度的上游進度,當該進度是根進度時無需此鍵。

display鍵是可選的,它描述了該進度在進度介面(Esc點擊进度按鈕打開,或直接在遊戲中按下L打開)的顯示方法。不填寫將不會顯示在進度介面。

criteria鍵是必需的,它描述了該進度可能需要達成的條件。

除此之外,還有可選鍵requirementsrewards

配方[]

主條目:配方

玩家根據配方合成熔煉物品。

在命名空間資料夾中建立recipes資料夾以建立一個新的配方。然後,在這個資料夾(或它的子資料夾)之下新建配方檔案 配方名.json。在遊戲中,配方以命名空間ID的格式引用。

有序配方[]

第一種常見的配方類型是有序配方。

    {
        "type": "minecraft:crafting_shaped",
        "pattern": [
            "123",
            "231",
            "312"
        ],
        "key": {
            "1": {
                "item": "(物品命名空间ID)"
            },
            "2": {
                "item": "(物品命名空间ID)"
            },
            "3": {
                "item": "(物品命名空间ID)"
            }
        },
        "result": {
            "item": "(物品命名空间ID)",
            "count": 5
        }
    }

"type": "crafting_shaped"可以看出,這是一個有序配方。

pattern 是一個列表,描述了配方的形狀,最多包含3個字串。一個字串表示一橫行,每個字串最多含有3個字元,一個字元表示合成網格中的一個格子。字串不必非得是3個,每個字串也不一定要3個字元,但是每個字串中的字元個數必須是相等的。空格表示空格子。

key 是一個對象,規定了pattern中的字元所代表的物品。可以用item 後接物品ID,也可以用tag後接資料包標籤。

result 是一個對象,其中item規定了最終合成的是何種物品。count是一次合成成品的數量。

以下是活塞的原版合成配方,供參考:

{
  "type": "minecraft:crafting_shaped",
  "pattern": [
    "TTT",
    "#X#",
    "#R#"
  ],
  "key": {
    "R": {
      "item": "minecraft:redstone"
    },
    "#": {
      "item": "minecraft:cobblestone"
    },
    "T": {
      "tag": "minecraft:planks"
    },
    "X": {
      "item": "minecraft:iron_ingot"
    }
  },
  "result": {
    "item": "minecraft:piston"
  }
}

無序配方[]

無序配方是另一種常見的配方類型。

    {
        "type": "crafting_shapeless",
        "ingredients": [
            {
                "item": "(物品命名空间ID)"
            },
            {
                "item": "(物品命名空间ID)"
            },
            [
                {
                    "item": "(物品命名空间ID)"
                },
                {
                    "item": "(物品命名空间ID)"
                }
            ]
        ],
        "result": {
            "item": "(物品命名空间ID)",
            "count": 5
        }
    }

"type": "crafting_shapeless"可以看出,這是一個無序配方。

無序配方沒有patterningredients是一個列表,列出合成所需的原料。原料可以以任何形狀排列在合成網格中。ingredients中如果出現列表,則表明該列表中的任何一種物品都可以使用,如下面火焰彈配方中,煤和木炭都可以使用。

以下是火焰彈的原版合成配方,供參考:

{
  "type": "minecraft:crafting_shapeless",
  "ingredients": [
    {
      "item": "minecraft:gunpowder"
    },
    {
      "item": "minecraft:blaze_powder"
    },
    [
      {
        "item": "minecraft:coal"
      },
      {
        "item": "minecraft:charcoal"
      }
    ]
  ],
  "result": {
    "item": "minecraft:fire_charge",
    "count": 3
  }
}

熔煉配方[]

也可自訂熔煉配方。

{
    "type": "(smelting、blasting和smoking之一,分别对应熔炉、高炉和烟熏炉的烧炼配方)",
    "category": "(配方所属的类别)",
    "ingredient": {
        "item": "(物品命名空间ID)"
    },
    "result": "(物品命名空间ID)",
    "experience": 0.35,
    "cookingtime": 200
}

這是一個熔煉配方的大致示例。

category用於指定該配方在配方手冊中所屬的類別,可選值為blocks、​foodmiscingredient用於指定你要熔煉的物品。result將指定熔煉產品。在experience中,你可以選擇熔煉所獲得的經驗值,在cookingtime中,你可以選擇該物品熔煉所需的時間,在本例中為10秒(200刻=10秒)。如果經驗值有小數部分,則表示有小數部分的機率獲得額外的1經驗值。如上例,0.35表示有35%機率獲得1經驗值,剩下65%不獲得。

這是預設的鑽石礦熔煉配方:

{
  "type": "minecraft:smelting",
  "category":"misc",
  "group": "diamond",
  "ingredient": {
    "item": "minecraft:diamond_ore"
  },
  "result": "minecraft:diamond",
  "experience": 1.0,
  "cookingtime": 200
}

標籤[]

主條目:標籤

標籤用來對方塊物品實體函數分組。minecraft:tick函數標籤用來表示函數每遊戲刻都執行,minecraft:load 函數標籤則用來表示函數在每次世界載入(或重新載入)的時候都執行。

在命名空間資料夾之下新建tags資料夾以建立新的標籤。在這個資料夾之下,新建資料夾blocksitemsfunctions。然後,在任意一個資料夾(或它們的子資料夾)之下新建標籤檔案标签名.json。在遊戲中,標籤以命名空間ID的格式引用。

述詞[]

Disambig gray  本段落介紹的是戰利品表述詞。關於資料包中的其他述詞,請見「述詞(消歧義)」。

戰利品表述詞(Predicate)是技術性JSON檔案,被用作戰利品表、指令/execute if predicatepredicate目標選擇器參數的條件。

在命名空間資料夾之下新建predicates資料夾以建立新的述詞。然後,在這個資料夾(或它的子資料夾)之下新建標籤檔案谓词名.json。在遊戲中,標籤以命名空間ID的格式引用。

生態域[]

主條目:自訂生態域

生態域(Biome)是JSON檔案,用於指定一個世界包含的所有生態域。他允許你為世界新增的生態域(註:正常世界中將不會出現新增的生態域,可以使用WorldEdit或新增維度或指令/fillbiome的方法加入)

生態域檔案儲存在資料包中的/data/(命名空间)/worldgen/biome路徑的JSON檔案中

在命名空間資料夾內建立一個名為worldgen的資料夾,再在其中建立一個名為biome的檔案,之後在其中建立一個名為群系名.json的檔案。檔案格式詳見自訂生態域

維度[]

主條目:自訂維度

維度(Dimension)是JSON檔案,用於指定一個世界包含的所有維度。

維度的特殊之處在於它們只在minecraft命名空間中工作。在minecraft命名空間資料夾中建立一個維度資料夾以建立新的維度,然後建立一個名為维度名.json的檔案。建議將維度檔案放在與你的命名空間同名的單獨資料夾中:

minecraft:(命名空间)/维度名.json

自訂維度在遊戲中可使用/execute in minecraft:维度名訪問。

維度類型[]

維度類型(Dimension Type)是JSON檔案,用於自訂一個新的維度類型。

透過它,你可以自訂在一個維度中的環境光照、高度限制等。它需要放在data/<命名空间>/dimension_type/<维度类型名称>.json中。

自訂維度可以使用自定的維度類型,調整自訂維度的type鍵即可。

參見[]

實例[]

語言

Advertisement