We are currently performing an upgrade to our software. This upgrade will bring MediaWiki from version 1.31 to 1.33. While the upgrade is being performed on your wiki it will be in read-only mode. For more information check here.

教程/製作資料包

出自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的格式引用。

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