Minecraft Wiki

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

了解更多

Minecraft Wiki
Advertisement

Template:Translation:未知參數。

Information icon
此特性為Java版獨有。

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

入門

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

什麼不該做

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

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

建立資料包

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

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

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

打開datapacks 資料夾後,建立一個資料夾並打開。資料夾名即是資料包名,由您決定,但不能含有中文漢字!

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

建立MCMETA檔案

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

注意

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

如果您使用的作業系統是Windows且無法查看檔案擴展名,不妨試試轉到檔案資源管理器的「查看」選單,並選中「檔案擴展名」的核取方塊。

FileExtensions

文字編輯器

理論上使用任何文字編輯器都可以。推薦使用Notepad++或Visual Studio Code。Notepad++是開源且免費的文字編輯器,支持多種編程語言的語法高亮,包括JSON文字,這是pack.mcmeta及資料包中大多數檔案使用的格式。您可以從Notepad++官網下載Notepad++。Visual Studio Code(簡稱VSCode)也是常用的代碼編輯器,可以在擴展商店免費下載有關Minecraft資料包的擴展。如果沒有中文,可以在擴展商店搜尋「中文」或「Chinese」以下載中文語言包。

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

pack.mcmeta的內容

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

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

 pack_format是您資料包可適配的版本,4代表適配版本為1.13、1.14、1.15  description可以使用字串或原始JSON文字。當您將滑鼠懸停在/datapack list輸出的資料包名時,這段內容將會顯示出來。

注意

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

測試您的資料包

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

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

故障排除

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

命名

在資料包資料夾中建立一個名為 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的格式引用。

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

{
	"pools": [{
		"rolls": 1,
		"entries": [{
			"type": "item",
			"name": "minecraft:leather",
			"weight": 1,
			"functions": [{
				"function": "set_count",
				"count": {
					"min": 0,
					"max": 2
				}
			}, {
				"function": "looting_enchant",
				"count": {
					"min": 0,
					"max": 1
				}
			}]
		}]
	}, {
		"rolls": 1,
		"entries": [{
			"type": "item",
			"name": "minecraft:beef",
			"weight": 1,
			"functions": [{
				"function": "set_count",
				"count": {
					"min": 1,
					"max": 3
				}
			}, {
				"function": "furnace_smelt",
				"conditions": [{
					"condition": "entity_properties",
					"entity": "this",
					"properties": {
						"on_fire": true
					}
				}]
			}, {
				"function": "looting_enchant",
				"count": {
					"min": 0,
					"max": 1
				}
			}]
		}]
	}]
}

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

結構

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

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

進度

主條目:進度

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

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

配方

主條目:配方

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

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

有序配方

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

{
	"type": "crafting_shaped",
	"pattern": ["123", "231", "312"],
	"key": {
		"1": {
			"item": "<item ID>"
		},
		"2": {
			"item": "<item ID>"
		},
		"3": {
			"item": "<item ID>"
		}
	},
	"result": {
		"item": "<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"
	}
}

無序配方

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

{
	"type": "crafting_shapeless",
	"ingredients": [{
			"item": "<item ID>"
		}, {
			"item": "<item ID>"
		},
		[{
			"item": "<item ID>"
		}, {
			"item": "<item ID>"
		}]
	],
	"result": {
		"item": "<item ID>",
		"count": 5
	}
}

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

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

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

標籤

主條目:標籤

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

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

另見

Advertisement