本站文本内容除另有声明外,均在知识共享 署名-非商业性使用-相同方式共享 3.0 协议下提供。(详情…本站文本内容除另有声明外,均在知识共享 署名-非商业性使用-相同方式共享 3.0 协议下提供。(详情…中文Minecraft Wiki是完全公开的。请勇于扩充与修正内容!中文Minecraft Wiki是完全公开的。请勇于扩充与修正内容!Minecraft中文Wiki微博正在更新!或许有兴趣去看看Minecraft中文Wiki微博正在更新!或许有兴趣去看看想与其他用户进行编辑上的沟通?社区专页正是为此创建的。想与其他用户进行编辑上的沟通?社区专页正是为此创建的。翻译或创建页面之前,不妨看看译名标准化Wiki条例页面。翻译或创建页面之前,不妨看看译名标准化Wiki条例页面。需要管理员的协助?在管理员告示板留言也许可以帮到您。需要管理员的协助?在管理员告示板留言也许可以帮到您。

教程/製作資料包

出自 Minecraft Wiki
前往: 導覽搜尋
Information icon.svg
此特性為Java版獨有。

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

入門[編輯 | 編輯原始碼]

資料包允許玩家添加及修改函數戰利品表、世界結構進度合成標籤

什麼不該做[編輯 | 編輯原始碼]

在製作資料包之前,有些事情是您不應該做的。這是「不應該做的事」的列表:

  • 做任何違反MojangMinecraft使用條款的事情。
  • 發布Minecraft或其修改版本,允許玩家在沒有從Mojang購買Minecraft的情況下玩遊戲。
  • 以任何方式發布反編譯的Minecraft源代碼。

創建資料包[編輯 | 編輯原始碼]

要創建資料包,請首先找到世界資料夾中的datapacks資料夾。

要查找世界資料夾,請在遊戲目錄中找到saves資料夾,預設情況下為.minecraft

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

打開datapacks 資料夾後,創建一個資料夾並打開。資料夾名即是資料包名,由您決定。

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

創建MCMETA文件[編輯 | 編輯原始碼]

參見:資料包§pack.mcmeta

在您剛剛創建的資料夾里新建一個名為 pack.mcmeta 的純文本文件。

注意

重命名時,請確保文件擴展名為.mcmeta而非.txt換句話說,刪除舊的擴展名。 您可能會收到警告:更改文件擴展名可能會導致文件無法使用。 但是這實際上表明你已正確重命名pack.mcmeta文件。

如果您使用的操作系統是Windows且無法查看文件擴展名,不妨試試轉到文件資源管理器的「查看」菜單,並選中「文件擴展名」的複選框。

FileExtensions.png

文本編輯器[編輯 | 編輯原始碼]

使用任何文本編輯器都可以,但推薦使用Notepad++。它是開源且免費的文本編輯器,支持多種編程語言的語法高亮,包括JSON文本,這是pack.mcmeta及資料包中大多數文件使用的格式。您可以從[1]下載Notepad++。

注意:大多數文本編輯器都不會將mcmeta擴展名識別為JSON文本。 因此,您需要手動配置編輯器。

pack.mcmeta的內容[編輯 | 編輯原始碼]

用文本編輯器打開pack.mcmeta,複製或鍵入以下內容:

{
  "pack": {
    "pack_format": 1,
    "description": "Tutorial Data Pack"
  }
}


 pack_format可以是任何數字,因為它目前沒有被使用。但建議設為1以免未來會使用該數值。

 description可以使用字符串或原始JSON文本。當您將鼠標懸停在/datapack list輸出的資料包名時,這段內容將會顯示出來。

注意

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

測試您的資料包[編輯 | 編輯原始碼]

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

當你的資料包出現時,你要準備好繼續前進。

故障排除[編輯 | 編輯原始碼]

如果列表中沒有您的包,請確保pack.mcmeta 是正確的。看看有沒有缺少花括號{}、逗號,、冒號:,雙引號",方括號[]。雙引號和雙引號配對,左括號和對應的右括號配對。

命名[編輯 | 編輯原始碼]

參見:命名空間ID

在資料包資料夾中創建一個名為 data的資料夾,和pack.mcmeta在一個資料夾里。在data資料夾中,您必須創建另一個資料夾作為命名空間。

合法字符[編輯 | 編輯原始碼]

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

0123456789 數字

abcdefghijklmnopqrstuvwxyz 小寫字母

_ 下劃線

- 連字號(減號)

/ 正斜槓(不能用於命名空間)

. 句號(不能用於命名空間)

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

命名空間[編輯 | 編輯原始碼]

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

例如,如果有兩個資料包為Minecraft分別添加了一個新的小遊戲機制,並且兩者都有一個名為start函數。 如果沒有命名空間,這兩個函數會衝突,小遊戲也會遭到破壞。 但如果它們具有minigame_oneminigame_two兩個不同的命名空間,則函數名變為minigame_one:startminigame_two:start,衝突解除。

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

添加新內容時,請一定使用您自己的命名空間。僅當需要覆蓋其他東西,或是追加標籤的時候,才使用其他命名空間。

例如,Minecraft使用minecraft命名空間,這意味着只有當資料包需要覆蓋現有的Minecraft數據或將內容添加到原版標籤時才應使用此命名空間。

函數[編輯 | 編輯原始碼]

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

在命名空間資料夾中新建functions 資料夾以創建一個新的函數。然後,在functions(或其子資料夾)中新建函數文件 函数名.mcfunction。在遊戲中,函數以命名空間ID的格式引用。

戰利品表[編輯 | 編輯原始碼]

當一個生物死亡時,Minecraft 根據戰利品表決定其掉落物。當首次開啟自然生成的容器(例如儲物箱)時,Minecraft 也根據戰利品表生成其中的戰利品

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

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

 1 {
 2 	"pools": [{
 3 		"rolls": 1,
 4 		"entries": [{
 5 			"type": "item",
 6 			"name": "minecraft:leather",
 7 			"weight": 1,
 8 			"functions": [{
 9 				"function": "set_count",
10 				"count": {
11 					"min": 0,
12 					"max": 2
13 				}
14 			}, {
15 				"function": "looting_enchant",
16 				"count": {
17 					"min": 0,
18 					"max": 1
19 				}
20 			}]
21 		}]
22 	}, {
23 		"rolls": 1,
24 		"entries": [{
25 			"type": "item",
26 			"name": "minecraft:beef",
27 			"weight": 1,
28 			"functions": [{
29 				"function": "set_count",
30 				"count": {
31 					"min": 1,
32 					"max": 3
33 				}
34 			}, {
35 				"function": "furnace_smelt",
36 				"conditions": [{
37 					"condition": "entity_properties",
38 					"entity": "this",
39 					"properties": {
40 						"on_fire": true
41 					}
42 				}]
43 			}, {
44 				"function": "looting_enchant",
45 				"count": {
46 					"min": 0,
47 					"max": 1
48 				}
49 			}]
50 		}]
51 	}]
52 }

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

結構[編輯 | 編輯原始碼]

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

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

進度[編輯 | 編輯原始碼]

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

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

配方[編輯 | 編輯原始碼]

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

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

有序配方[編輯 | 編輯原始碼]

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

 1 {
 2 	"type": "crafting_shaped",
 3 	"pattern": ["123", "231", "312"],
 4 	"key": {
 5 		"1": {
 6 			"item": "<item ID>"
 7 		},
 8 		"2": {
 9 			"item": "<item ID>"
10 		},
11 		"3": {
12 			"item": "<item ID>"
13 		}
14 	},
15 	"result": {
16 		"item": "<item ID>",
17 		"count": 5
18 	}
19 }

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

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

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

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

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

 1 {
 2 	"type": "crafting_shaped",
 3 	"pattern": ["TTT", "#X#", "#R#"],
 4 	"key": {
 5 		"R": {
 6 			"item": "minecraft:redstone"
 7 		},
 8 		"#": {
 9 			"item": "minecraft:cobblestone"
10 		},
11 		"T": {
12 			"tag": "minecraft:planks"
13 		},
14 		"X": {
15 			"item": "minecraft:iron_ingot"
16 		}
17 	},
18 	"result": {
19 		"item": "minecraft:piston"
20 	}
21 }

無序配方[編輯 | 編輯原始碼]

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

 1 {
 2 	"type": "crafting_shapeless",
 3 	"ingredients": [{
 4 			"item": "<item ID>"
 5 		}, {
 6 			"item": "<item ID>"
 7 		},
 8 		[{
 9 			"item": "<item ID>"
10 		}, {
11 			"item": "<item ID>"
12 		}]
13 	],
14 	"result": {
15 		"item": "<item ID>",
16 		"count": 5
17 	}
18 }

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

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

 1 {
 2 	"type": "crafting_shapeless",
 3 	"ingredients": [{
 4 			"item": "minecraft:gunpowder"
 5 		},
 6 		{
 7 			"item": "minecraft:blaze_powder"
 8 		},
 9 		[{
10 				"item": "minecraft:coal"
11 			},
12 			{
13 				"item": "minecraft:charcoal"
14 			}
15 		]
16 	],
17 	"result": {
18 		"item": "minecraft:fire_charge",
19 		"count": 3
20 	}
21 }

標籤[編輯 | 編輯原始碼]

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

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

另見[編輯 | 編輯原始碼]