教學/製作資料包
本教學介紹如何製作資料包。
入門[edit | edit source]
資料包允許玩家加入及修改函數、戰利品表、世界結構、進度、合成、標籤、維度和述詞。
什麼不該做[edit | edit source]
在製作資料包之前,有些事情是您不應該做的。這是「不應該做的事」的列表:
- 發佈允許玩家在沒有從Mojang購買Minecraft的情況下遊玩的Minecraft版本或修改版。
- 以任何方式發佈反編譯的Minecraft原始碼。
建立資料包[edit | edit source]
要建立資料包,請首先找到世界資料夾中的datapacks
資料夾。
要查找世界資料夾,請在遊戲目錄中找到saves
資料夾,預設情況下為.minecraft。
- 在單人遊戲中,您可以選擇您的世界,點擊「編輯」,然後點擊「打開世界資料夾」。
- 在伺服器上,您可以打開其根目錄(server.properties所在的位置),然後打開
world
資料夾.。
打開datapacks
資料夾後,建立一個資料夾並打開。資料夾名即是資料包名,由您決定,但不能含有漢字!
打開新資料夾後要做的第一件事是建立pack.mcmeta
檔案。這樣 Minecraft 才能識別該資料包。
建立MCMETA檔案[edit | edit source]
在您剛剛建立的資料夾裡新建一個名為 pack.mcmeta 的純文本檔案。
- 注意
重新命名時,請確保檔案擴展名為.mcmeta
而非.txt
。換句話說,刪除舊的擴展名。您可能會收到警告:如果改變檔案擴展名,可能會導致檔案不可用。但是這實際上表明你已正確重新命名pack.mcmeta
檔案。
如果您使用的是Microsoft Windows並且看不到檔案擴展名,對於Windows 10,可以透過轉到「檔案資源管理器」的「查看」選單並選中「檔案擴展名」複選框來打開它們。對於Windows 10以下的Windows,可以取消選中資料夾設定中的「隱藏擴展名」。

文本編輯器[edit | edit source]
理論上使用任何文本編輯器都可以。建議所選的文本編輯器支持JSON,JSON是mcmeta
檔案和資料包中大多數其他檔案使用的格式。請注意,大多數文本編輯器不會將mcmeta
擴展名識別為JSON文本。因此,您需要手動配置編輯器。
pack.mcmeta
的內容[edit | edit source]
用文本編輯器打開pack.mcmeta
,複製或鍵入以下內容:
{
"pack": {
"pack_format": 6,
"description": "教程数据包"
}
}
對於pack.mcmeta
,可在資料包的描述和名稱中使用「§」符號(Minecraft格式化代碼)。
如果資料包用於1.17快照,則 pack_format應該為7。如果資料包用於1.16.2~1.16.5版本,則 pack_format應該設為6。如果資料包用於1.15~1.16.1,則 pack_format應該為5。如果資料包用於1.13~1.14,則 pack_format應該為4。 description可以使用字串或原始JSON文本。當您將游標懸停在/datapack list
輸出的資料包名或進入建立世界的資料包介面時,這段內容將會顯示出來。
- 注意
這個檔案是用JSON編寫的!本教學現在沒有詳細介紹格式,但要注意,不要忘記引號、冒號、圓括號和方括號。缺少任意一個都可能導致您的資料包無法正常工作!您可以使用JSON驗證器檢查您的檔案,例如 JSONLint。
測試您的資料包[edit | edit source]
如果你建立了pack.mcmeta
,嘗試在遊戲中測試它!打開Minecraft,進入世界或輸入/reload
(如果你已經進入了世界),然後輸入/datapack list
。此時應該出現兩條資訊:第一條是[vanilla]
,第二條應該是[file/(您的数据包的名称)]
。當你將游標懸停在資料包名稱上時,你應該會看到資料包的描述,內容就像你在pack.mcmeta
的 description中所寫的那樣。
當你的資料包出現時,你要準備好繼續前進。
故障排除[edit | edit source]
如果列表中沒有您的包,請確保pack.mcmeta
的語法正確且已保存。看看有沒有缺少大括號{}
、逗號,
、冒號:
,雙引號""
,方括號[]
。請記住,對於每個左大括號、雙引號或方括號,必須有一個右大括號、雙引號或方括號與之配對。
命名[edit | edit source]
- 參見:命名空間ID
在資料包資料夾中建立一個名為 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
。
合法字元[edit | edit source]
資料包中的命名空間、路徑、資料夾名和檔案名應僅包含以下符號:
0123456789
數字abcdefghijklmnopqrstuvwxyz
小寫字母_
下劃線-
連字號(減號)/
正斜槓(不能用於命名空間).
句號(不能用於命名空間)
首選命名格式為以下劃線隔開的小寫字母單詞(lower_case_with_underscores
),稱為蛇形命名法(lower snake case)。
命名空間[edit | edit source]
遊戲中的大多數對象都有一個命名空間(namespace),以防止潛在的內容衝突或無意的覆蓋。
例如,如果有兩個資料包為Minecraft分別加入了一個新的小遊戲機制,並且兩者都有名為start
的函數。如果沒有命名空間,這兩個函數就會衝突,小遊戲也會被破壞。但如果它們分別有minigame_one
和minigame_two
兩個不同的命名空間,則函數名分別為minigame_one:start
和minigame_two:start
,就不發生衝突了。
大多數情況下Minecraft需要ID的存在,例如 /function
指令,路徑和命名空間缺一不可。如果命名空間未指定,則預設其為minecraft
。
新增內容時,請一定使用您自己的命名空間。僅當需要覆蓋其他東西,或是追加標籤的時候,才使用其他命名空間。
例如,Minecraft使用minecraft
命名空間,這意味着只有當資料包需要覆蓋現有的Minecraft數據或將內容加入到原版標籤時才應使用此命名空間。
函數[edit | edit source]
- 參見:教學/指令方塊
函數是一系列順次執行的指令。
要建立新函數,應在命名空間資料夾中新建functions
資料夾。然後,在functions
(或其子資料夾)中新建函數檔案函数名.mcfunction
。這就是你的函數檔案。你的函數會被遊戲命名為(命名空间):(函数名称)
或者當位於子資料夾時為(命名空间):(子文件夹1)/(子文件夹2)/…/(名称)
。
戰利品表[edit | edit source]
當一個生物死亡時,Minecraft根據戰利品表決定其掉落物。當首次開啟自然生成的容器(例如儲物箱)時,Minecraft也根據戰利品表生成其中的戰利品。可以透過/loot
指令調用它們。
在命名空間資料夾中新建loot_tables
資料夾以建立一個新的戰利品表。然後,在loot_tables
(或其子資料夾)中新建戰利品表檔案战利品表名.json
。在遊戲中,戰利品表以命名空間ID的格式引用。
作為參考,這裏給出牛的戰利品表的一個樣例:
1 {
2 "type": "minecraft:entity",
3 "pools": [
4 {
5 "rolls": 1,
6 "entries": [
7 {
8 "type": "minecraft:item",
9 "functions": [
10 {
11 "function": "minecraft:set_count",
12 "count": {
13 "min": 0,
14 "max": 2,
15 "type": "minecraft:uniform"
16 }
17 },
18 {
19 "function": "minecraft:looting_enchant",
20 "count": {
21 "min": 0,
22 "max": 1
23 }
24 }
25 ],
26 "name": "minecraft:leather"
27 }
28 ]
29 },
30 {
31 "rolls": 1,
32 "entries": [
33 {
34 "type": "minecraft:item",
35 "functions": [
36 {
37 "function": "minecraft:set_count",
38 "count": {
39 "min": 1,
40 "max": 3,
41 "type": "minecraft:uniform"
42 }
43 },
44 {
45 "function": "minecraft:furnace_smelt",
46 "conditions": [
47 {
48 "condition": "minecraft:entity_properties",
49 "predicate": {
50 "flags": {
51 "is_on_fire": true
52 }
53 },
54 "entity": "this"
55 }
56 ]
57 },
58 {
59 "function": "minecraft:looting_enchant",
60 "count": {
61 "min": 0,
62 "max": 1
63 }
64 }
65 ],
66 "name": "minecraft:beef"
67 }
68 ]
69 }
70 ]
71 }
如果您想要查找原版戰利品表,或是學習其中標籤的具體含義,請參見戰利品表。
結構[edit | edit source]
結構可以用於結構方塊或拼圖方塊,也可以覆蓋Minecraft中原版結構的外觀。結構以NBT格式存儲,您可以使用結構方塊建立NBT檔案。MCEdit之類的第三方軟件也可以導出NBT檔案。
在命名空間資料夾中建立structures
資料夾以向資料包加入一個新的結構。然後,把你的NBT結構檔案放在structures
資料夾(或它的子資料夾)之下。在遊戲中,結構以命名空間ID的格式引用。
進度[edit | edit source]
玩家透過完成進度來獲得獎勵。
在命名空間資料夾中建立advancements
資料夾以建立一個新的進度。然後,在這個資料夾(或它的子資料夾)之下新建進度檔案 进度名.json
。在遊戲中,進度以命名空間ID的格式引用。
配方[edit | edit source]
在命名空間資料夾中建立recipes
資料夾以建立一個新的配方。然後,在這個資料夾(或它的子資料夾)之下新建配方檔案 配方名.json
。在遊戲中,配方以命名空間ID的格式引用。
有序配方[edit | edit source]
第一種常見的配方類型是有序配方。
{
"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": "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"
}
}
無序配方[edit | edit source]
無序配方是另一種常見的配方類型。
{
"type": "crafting_shapeless",
"ingredients": [
{
"item": "(物品命名空间ID)"
},
{
"item": "(物品命名空间ID)"
},
[
{
"item": "(物品命名空间ID)"
},
{
"item": "(物品命名空间ID)"
}
]
],
"result": {
"item": "(物品命名空间ID)",
"count": 5
}
}
由"type": "crafting_shapeless"
可以看出,這是一個無序配方。
無序配方沒有pattern
。ingredients
是一個列表,列出合成所需的原料。原料可以以任何形狀排列在合成網格中。ingredients
中如果出現列表,則表明該列表中的任何一種物品都可以使用,如下面火焰彈配方中,煤和木炭都可以使用。
以下是火焰彈的原版合成配方,供參考:
1 {
2 "type": "minecraft:crafting_shapeless",
3 "ingredients": [
4 {
5 "item": "minecraft:gunpowder"
6 },
7 {
8 "item": "minecraft:blaze_powder"
9 },
10 [
11 {
12 "item": "minecraft:coal"
13 },
14 {
15 "item": "minecraft:charcoal"
16 }
17 ]
18 ],
19 "result": {
20 "item": "minecraft:fire_charge",
21 "count": 3
22 }
23 }
熔煉配方[edit | edit source]
也可自訂熔煉配方。
{
"type": "smelting",
"ingredient": {
"item": "(物品命名空间ID)"
},
"result": "(物品命名空间ID)",
"experience": 0.35,
"cookingtime": 200
}
這是一個熔煉配方的大致示例。ingredient
用於指定你要熔煉的物品。result
將指定熔煉產品。在experience
中,你可以選擇熔煉所獲得的經驗值,在cookingtime
中,你可以選擇該物品熔煉所需的時間,在本例中為10秒(200刻=10秒)。
這是預設的鑽石礦熔煉配方:
{
"type": "smelting",
"ingredient": {
"item": "minecraft:diamond_ore"
},
"result": "minecraft:diamond",
"experience": 1,
"cookingtime": 200
}
標籤[edit | edit source]
標籤用來對方塊、物品、實體和函數分組。minecraft:tick
函數標籤用來表示函數每遊戲刻都執行,minecraft:load
函數標籤則用來表示函數在每次世界載入(或重新載入)的時候都執行。
在命名空間資料夾之下新建tags
資料夾以建立新的標籤。在這個資料夾之下,新建資料夾blocks
、items
和functions
。然後,在任意一個資料夾(或它們的子資料夾)之下新建標籤檔案标签名.json
。在遊戲中,標籤以命名空間ID的格式引用。
述詞[edit | edit source]
述詞(Predicate)是技術性JSON檔案, 相當於戰利品表、/execute if predicate
指令或谓词
目標選擇器參數。
在命名空間資料夾之下新建predicates
資料夾以建立新的述詞。然後,在這個資料夾(或它的子資料夾)之下新建標籤檔案谓词名.json
。在遊戲中,標籤以命名空間ID的格式引用。
維度[edit | edit source]
維度(Dimension)是JSON檔案,用於指定一個世界包含的所有維度。
維度的特殊之處在於它們只在minecraft
命名空間中工作。在minecraft
命名空間資料夾中建立一個維度資料夾以建立新的維度,然後建立一個名為维度名.json
的檔案。建議將維度檔案放在與你的命名空間同名的單獨資料夾中:
minecraft:(命名空间)/维度名.json
。
自訂維度在遊戲中可使用/execute in minecraft:维度名
訪問。
參見[edit | edit source]
組件 | |
---|---|
其他 |
新手教學 |
| ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
常規 |
| ||||||||||||
存儲方案 | |||||||||||||
農場 |
| ||||||||||||
附魔與熔煉 | |||||||||||||
破壞方塊 | |||||||||||||
紅石 |
| ||||||||||||
伺服器 |
| ||||||||||||
原創 |
| ||||||||||||
技術性 |
| ||||||||||||
過時教學 |