我的世界 : 教程/制作數(shù)據(jù)包

入門
數(shù)據(jù)包允許玩家添加及修改函數(shù)、戰(zhàn)利品表、世界結(jié)構(gòu)、進度、合成、標簽、維度和謂詞。
什么不該做
在制作數(shù)據(jù)包之前,有些事情是您不應(yīng)該做的。這是“不應(yīng)該做的事”的列表:
發(fā)布允許玩家在沒有從Mojang購買Minecraft的情況下游玩的Minecraft版本或修改版。
以任何方式發(fā)布反編譯的Minecraft源代碼。
創(chuàng)建數(shù)據(jù)包
要創(chuàng)建數(shù)據(jù)包,請首先找到世界文件夾中的datapacks
文件夾。
要查找世界文件夾,請在游戲目錄中找到saves
文件夾,默認情況下為.minecraft。
在單人游戲中,您可以選擇您的世界,點擊“編輯”,然后點擊“打開世界文件夾”。
在服務(wù)器上,您可以打開其根目錄(server.properties所在的位置),然后打開
world
文件夾.。
打開datapacks
?文件夾后,創(chuàng)建一個文件夾并打開。文件夾名即是數(shù)據(jù)包名,由您決定,但不能含有漢字!
打開新文件夾后要做的第一件事是創(chuàng)建pack.mcmeta
文件。這樣 Minecraft 才能識別該數(shù)據(jù)包。
創(chuàng)建MCMETA文件
參見:https://minecraft.fandom.com/zh/wiki/%E6%95%B0%E6%8D%AE%E5%8C%85#pack.mcmeta
在您剛剛創(chuàng)建的文件夾里新建一個名為?pack.mcmeta?的純文本文件。
注意
重命名時,請確保文件擴展名為.mcmeta
而非.txt
。換句話說,刪除舊的擴展名。您可能會收到警告:如果改變文件擴展名,可能會導(dǎo)致文件不可用。但是這實際上表明你已正確重命名pack.mcmeta
文件。
如果您使用的是Microsoft Windows并且看不到文件擴展名,對于Windows 10,可以通過轉(zhuǎn)到“文件資源管理器”的“查看”菜單并選中“文件擴展名”復(fù)選框來打開它們。

對于除Windows 10以外的Windows版本,可以取消選中文件夾選項中的“隱藏已知文件類型的擴展名”選項。

文本編輯器
理論上使用任何文本編輯器都可以。建議所選的文本編輯器支持JSON,JSON是mcmeta
文件和數(shù)據(jù)包中大多數(shù)其他文件使用的格式。請注意,大多數(shù)文本編輯器不會將mcmeta
擴展名識別為JSON文本。因此,您需要手動配置編輯器。
pack.mcmeta
在你選擇的文本編輯器中打開pack.mcmeta
并復(fù)制或鍵入以下內(nèi)容:

?"pack": {
? ?"pack_format": X,
? ?"description": "教程數(shù)據(jù)包"
?}
}

對于pack.mcmeta
,可在數(shù)據(jù)包的描述和名稱中使用“§”符號(Minecraft格式化代碼)。
pack_format
你應(yīng)該根據(jù)你的Minecraft版本替換“pack_format”
后面的X
。
“pack_format”
需為:
17w43a至17w47b為??
3
1.13(17w48a)至1.14.4(19w46b)為??
4
1.15(1.15-pre1)至1.16.1(1.16.2-pre3)為??
5
1.16.2(1.16.2-rc1)至1.16.5(20w45a)為??
6
1.17(20w46a)至1.17.1(1.18-exp7)為??
7
1.18(21w37a)至1.18.1(22w07a)為??
8
1.18.2(1.18.2-pre1至1.18.2-rc1)為??
9
1.19(22w11a)及以上為??
10
?description可以使用字符串或原始JSON文本。當您將鼠標懸停在/datapack?list
輸出的數(shù)據(jù)包名或進入創(chuàng)建世界的數(shù)據(jù)包界面時,這段內(nèi)容將會顯示出來。
注意
這個文件是用JSON編寫的!本教程現(xiàn)在沒有詳細介紹格式,但要注意,不要忘記引號、冒號、圓括號和方括號。缺少任意一個都可能導(dǎo)致您的數(shù)據(jù)包無法正常工作!您可以使用JSON驗證器檢查您的文件,例如?JSONLint。
測試您的數(shù)據(jù)包
如果你創(chuàng)建了pack.mcmeta
,嘗試在游戲中測試它!打開Minecraft,進入世界或輸入/reload
(如果你已經(jīng)進入了世界),然后輸入/datapack?list
。此時應(yīng)該出現(xiàn)兩條信息:第一條是[vanilla]
,第二條應(yīng)該是[file/(您的數(shù)據(jù)包的名稱)]
。當你將鼠標懸停在數(shù)據(jù)包名稱上時,你應(yīng)該會看到數(shù)據(jù)包的描述,內(nèi)容就像你在pack.mcmeta
的?description中所寫的那樣。
當你的數(shù)據(jù)包出現(xiàn)時,你要準備好繼續(xù)前進。
故障排除
如果列表中沒有您的包,請確保pack.mcmeta
的語法正確且已保存??纯从袥]有缺少大括號{}
、逗號,
、冒號:
,雙引號""
,方括號[]
。請記住,對于每個左大括號、雙引號或方括號,必須有一個右大括號、雙引號或方括號與之配對。
命名
參見:https://minecraft.fandom.com/zh/wiki/%E5%91%BD%E5%90%8D%E7%A9%BA%E9%97%B4ID
在數(shù)據(jù)包文件夾中創(chuàng)建一個名為?data
的文件夾,和pack.mcmeta
在一個文件夾里。在data
文件夾中,您必須創(chuàng)建一個或多個文件夾作為命名空間。
數(shù)據(jù)包中的條目以命名空間:路徑
作為命名空間ID。相應(yīng)的文件將位于data/命名空間/(數(shù)據(jù)類型)/路徑.(后綴)
。請注意,路徑中的/
字符將轉(zhuǎn)換為目錄分隔符。
例如:
ID為
dummy:foo_proof/bar
的物品標簽將定位到data/dummy/tags/item/foo_proof/bar.json
。ID為
foo:handler/bar_call
的函數(shù)將定位到data/foo/functions/handler/bar_call.mcfunction
。
合法字符
數(shù)據(jù)包中的命名空間、路徑、文件夾名和文件名應(yīng)僅包含以下符號:
0123456789
?數(shù)字abcdefghijklmnopqrstuvwxyz
?小寫字母_
?下劃線-
?連字號(減號)/
?正斜杠(不能用于命名空間).
?句號(不能用于命名空間)
首選命名格式為以下劃線隔開的小寫字母單詞(lower_case_with_underscores
),稱為蛇形命名法(lower snake case)。
命名空間
游戲中的大多數(shù)對象都有一個命名空間(namespace),以防止?jié)撛诘膬?nèi)容沖突或無意的覆蓋。
例如,如果有兩個數(shù)據(jù)包為Minecraft分別添加了一個新的小游戲機制,并且兩者都有名為start
的函數(shù)。如果沒有命名空間,這兩個函數(shù)就會沖突,小游戲也會被破壞。但如果它們分別有minigame_one
和minigame_two
兩個不同的命名空間,則函數(shù)名分別為minigame_one:start
和minigame_two:start
,就不發(fā)生沖突了。
大多數(shù)情況下Minecraft需要ID的存在,例如?/function
?命令,路徑和命名空間缺一不可。如果命名空間未指定,則默認其為minecraft
。
添加新內(nèi)容時,請一定使用您自己的命名空間。僅當需要覆蓋其他東西,或是追加標簽的時候,才使用其他命名空間。
例如,Minecraft使用minecraft
命名空間,這意味著只有當數(shù)據(jù)包需要覆蓋現(xiàn)有的Minecraft數(shù)據(jù)或?qū)?nèi)容添加到原版標簽時才應(yīng)使用此命名空間。
函數(shù)
主條目:https://minecraft.fandom.com/zh/wiki/Java%E7%89%88%E5%87%BD%E6%95%B0
參見:https://minecraft.fandom.com/zh/wiki/%E6%95%99%E7%A8%8B/%E5%91%BD%E4%BB%A4%E6%96%B9%E5%9D%97
函數(shù)是一系列順次執(zhí)行的命令。
要創(chuàng)建新函數(shù),應(yīng)在命名空間文件夾中新建functions
文件夾。然后,在functions
(或其子文件夾)中新建函數(shù)文件函數(shù)名.mcfunction
。這就是你的函數(shù)文件。你的函數(shù)會被游戲命名為(命名空間):(函數(shù)名稱)
或者當位于子文件夾時為(命名空間):(子文件夾1)/(子文件夾2)/…/(名稱)
。
戰(zhàn)利品表
主條目:https://minecraft.fandom.com/zh/wiki/%E6%88%98%E5%88%A9%E5%93%81%E8%A1%A8
當一個生物死亡時,Minecraft根據(jù)戰(zhàn)利品表決定其掉落物。當首次開啟自然生成的容器(例如箱子)時,Minecraft也根據(jù)戰(zhàn)利品表生成其中的戰(zhàn)利品??梢酝ㄟ^/loot
命令調(diào)用它們。
在命名空間文件夾中新建loot_tables
文件夾以創(chuàng)建一個新的戰(zhàn)利品表。然后,在loot_tables
(或其子文件夾)中新建戰(zhàn)利品表文件戰(zhàn)利品表名.json
。在游戲中,戰(zhàn)利品表以命名空間ID的格式引用。
作為參考,這里給出牛的戰(zhàn)利品表的一個樣例:

如果您想要查找原版戰(zhàn)利品表,或是學(xué)習(xí)其中標簽的具體含義,請參見戰(zhàn)利品表。
結(jié)構(gòu)
結(jié)構(gòu)可以用于結(jié)構(gòu)方塊或拼圖方塊,也可以覆蓋Minecraft中原版結(jié)構(gòu)的外觀。結(jié)構(gòu)以NBT格式存儲,您可以使用結(jié)構(gòu)方塊創(chuàng)建NBT文件。MCEdit之類的第三方軟件也可以導(dǎo)出NBT文件。
在命名空間文件夾中建立structures
文件夾以向數(shù)據(jù)包添加一個新的結(jié)構(gòu)。然后,把你的NBT結(jié)構(gòu)文件放在structures
文件夾(或它的子文件夾)之下。在游戲中,結(jié)構(gòu)以命名空間ID的格式引用。
進度
主條目:https://minecraft.fandom.com/zh/wiki/%E8%BF%9B%E5%BA%A6
玩家通過完成進度來獲得獎勵。
在命名空間文件夾中建立advancements
文件夾以創(chuàng)建一個新的進度。然后,在這個文件夾(或它的子文件夾)之下新建進度文件?進度名.json
。在游戲中,進度以命名空間ID的格式引用。
配方
主條目:https://minecraft.fandom.com/zh/wiki/%E9%85%8D%E6%96%B9
玩家根據(jù)配方合成、燒煉物品。
在命名空間文件夾中建立recipes
文件夾以創(chuàng)建一個新的配方。然后,在這個文件夾(或它的子文件夾)之下新建配方文件?配方名.json
。在游戲中,配方以命名空間ID的格式引用。
有序配方
參見:https://minecraft.fandom.com/zh/wiki/%E9%85%8D%E6%96%B9#minecraft:crafting_shaped
第一種常見的配方類型是有序配方。

由"type": "crafting_shaped"
可以看出,這是一個有序配方。
pattern
?是一個列表,描述了配方的形狀,最多包含3個字符串。一個字符串表示一橫行,每個字符串最多含有3個字符,一個字符表示合成網(wǎng)格中的一個格子。字符串不必非得是3個,每個字符串也不一定要3個字符,但是每個字符串中的字符個數(shù)必須是相等的。空格表示空格子。
key
?是一個對象,規(guī)定了pattern
中的字符所代表的物品??梢杂?code>item?后接物品ID,也可以用tag
后接數(shù)據(jù)包標簽。
result
?是一個對象,其中item
規(guī)定了最終合成的是何種物品。count
是一次合成成品的數(shù)量。
以下是活塞的原版合成配方,供參考:

無序配方
參見:https://minecraft.fandom.com/zh/wiki/%E9%85%8D%E6%96%B9#minecraft:crafting_shapeless
無序配方是另一種常見的配方類型。
??

由"type": "crafting_shapeless"
可以看出,這是一個無序配方。
無序配方?jīng)]有pattern
。ingredients
是一個列表,列出合成所需的原料。原料可以以任何形狀排列在合成網(wǎng)格中。ingredients
中如果出現(xiàn)列表,則表明該列表中的任何一種物品都可以使用,如下面火焰彈配方中,煤和木炭都可以使用。
以下是火焰彈的原版合成配方,供參考:

也可自定義燒煉配方。

這是一個燒煉配方的大致示例。ingredient
用于指定你要燒煉的物品。result
將指定燒煉產(chǎn)品。在experience
中,你可以選擇燒煉所獲得的經(jīng)驗值,在cookingtime
中,你可以選擇該物品熔煉所需的時間,在本例中為10秒(200刻=10秒)。 如果經(jīng)驗值有小數(shù)部分,則表示有小數(shù)部分的概率獲得額外的1經(jīng)驗值。如上例,0.35表示有35%概率獲得1經(jīng)驗值,剩下65%不獲得。 這是默認的鉆石礦石燒煉配方:

主條目:https://minecraft.fandom.com/zh/wiki/%E6%A0%87%E7%AD%BE
標簽用來對方塊、物品、實體和函數(shù)分組。minecraft:tick
函數(shù)標簽用來表示函數(shù)每游戲刻都執(zhí)行,minecraft:load
?函數(shù)標簽則用來表示函數(shù)在每次世界加載(或重新加載)的時候都運行。
在命名空間文件夾之下新建tags
文件夾以創(chuàng)建新的標簽。在這個文件夾之下,新建文件夾blocks
、items
和functions
。然后,在任意一個文件夾(或它們的子文件夾)之下新建標簽文件標簽名.json
。在游戲中,標簽以命名空間ID的格式引用。
謂詞

??本段落介紹的是戰(zhàn)利品表謂詞。關(guān)于數(shù)據(jù)包中的其他謂詞,請見“謂詞(消歧義)”。
https://minecraft.fandom.com/zh/wiki/%E8%B0%93%E8%AF%8D%EF%BC%88%E6%B6%88%E6%AD%A7%E4%B9%89%EF%BC%89
戰(zhàn)利品表謂詞(Predicate)是技術(shù)性JSON文件,被用作戰(zhàn)利品表、命令/execute?if predicate
和predicate
目標選擇器參數(shù)的條件。
在命名空間文件夾之下新建predicates
文件夾以創(chuàng)建新的謂詞。然后,在這個文件夾(或它的子文件夾)之下新建標簽文件謂詞名.json
。在游戲中,標簽以命名空間ID的格式引用。
維度
主條目:https://minecraft.fandom.com/zh/wiki/%E7%BB%B4%E5%BA%A6
維度(Dimension)是JSON文件,用于指定一個世界包含的所有維度。
維度的特殊之處在于它們只在minecraft
命名空間中工作。在minecraft
命名空間文件夾中創(chuàng)建一個維度文件夾以創(chuàng)建新的維度,然后創(chuàng)建一個名為維度名.json
的文件。建議將維度文件放在與你的命名空間同名的單獨文件夾中:
minecraft:(命名空間)/維度名.json
。
自定義維度在游戲中可使用/execute in minecraft:維度名
訪問。