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

§2 數(shù)據(jù)包
數(shù)據(jù)包 (datapacks) 可用于覆蓋或添加新的函數(shù)、進度、戰(zhàn)利品表、戰(zhàn)利品表謂詞、物品修飾器、配方、結構、標簽、維度、維度類型和自定義世界生成。數(shù)據(jù)包文件夾位于?.minecraft/saves/世界名稱/datapacks
,其下方子文件夾或?zip
?文件即為一個數(shù)據(jù)包。
安裝數(shù)據(jù)包:單人游戲中,對于新創(chuàng)建的世界,在創(chuàng)建時點擊創(chuàng)建新的世界->世界預設->數(shù)據(jù)包
,將數(shù)據(jù)包拖入并選擇至右側即可。對于已生成的世界,選擇你需要安裝數(shù)據(jù)包的世界,點擊編輯->打開世界文件夾->打開文件夾 datapacks
,并將數(shù)據(jù)包?.zip
?文件或文件夾放入其中。多人游戲中,打開服務器文件夾->worlds->datapacks
文件夾,并將數(shù)據(jù)包?.zip
?文件或文件夾放入其中。數(shù)據(jù)包放置好后,在首次生成該世界/重新進入該世界/下次服務器啟動時會啟用該數(shù)據(jù)包。管理員也可以輸入?/reload
?來加載數(shù)據(jù)包,但這不適用維度和自定義世界生成。
原版數(shù)據(jù)包是 Minecraft 自帶的一個默認開啟的數(shù)據(jù)包,其?data
?文件夾位于?.minecraft/versions/版本號/版本號.jar/data
,其中包含的原版進度、戰(zhàn)利品表、配方、結構和標簽等內(nèi)容,是制作數(shù)據(jù)包的文件樣板。注意原版的維度和自定義世界生成不在該路徑,可從此處下載這些內(nèi)容。
對于創(chuàng)建世界時添加的數(shù)據(jù)包,可以在數(shù)據(jù)包選擇頁面調(diào)整加載次序。其它情形添加的數(shù)據(jù)包優(yōu)先級最高,即最后加載。同時加入的數(shù)據(jù)包優(yōu)先級則和文件名順序相關。數(shù)據(jù)包的優(yōu)先級順序儲存在文件?level.dat
?中,可以通過?/datapack
?命令查看或修改。在游戲中通過命令?/datapack
?可以禁用/啟用數(shù)據(jù)包,最后啟用的優(yōu)先級最高。由于數(shù)據(jù)包加載順序不定,因此在制作數(shù)據(jù)包的過程中,盡量不要依賴數(shù)據(jù)包的加載順序。原版數(shù)據(jù)包的優(yōu)先級一般是最低的。
使用?/datapack list
?命令顯示數(shù)據(jù)包名稱時,原版數(shù)據(jù)包為?[vanilla]
,玩家自定義的數(shù)據(jù)包為?[file/數(shù)據(jù)包名稱]
。
文件夾結構
由于命名空間ID的命名要求,data
?下所有文件和文件夾可使用的字符為?_-.abcdefghijklmnopqrstuvwxyz0123456789
,不可使用大寫字母、空格或中文,所有文本文件使用?UTF-8
?編碼。為了便于傳播,發(fā)布時可將所有內(nèi)容壓縮為一個?zip
?文件。壓縮和解壓的時候,注意文件層次,應當打開?zip
?文件就可以看到數(shù)據(jù)包的?pack.mcmeta
。穩(wěn)妥的做法是?打開文件夾->全選->右鍵->發(fā)送到->壓縮文件夾
?或?打開文件夾->全選->7-Zip->添加到 "文件夾名.zip"
。文件夾格式的數(shù)據(jù)包若有錯誤文件仍可以加載,但?zip
?格式的會無法加載。
§2.1 元信息和圖標
Minecraft 通過文件?pack.mcmeta
?來識別數(shù)據(jù)包,因此該文件是不可或缺的。例如:
其中數(shù)據(jù)包描述為單個字符串或一個原始JSON文本。創(chuàng)建新的世界時,它會顯示在數(shù)據(jù)包菜單中數(shù)據(jù)包名稱下方。在數(shù)據(jù)包列表下,光標移動到對應的數(shù)據(jù)包時會顯示此處填寫的描述。
1.16版本原版數(shù)據(jù)包里的?pack.mcmeta
?文件為
數(shù)據(jù)包可以包含一個?pack.png
,它是正方形的圖片,用于創(chuàng)建新的世界時在數(shù)據(jù)包菜單中顯示。
§2.2 命名空間
命名空間 (namespace) 為玩家自定義的、可操作的空間。使用獨立的命名空間也有利于解決和他人的沖突。數(shù)據(jù)包下可以有多個命名空間,如果不同數(shù)據(jù)包中有相同的命名空間,則其中相同的文件名內(nèi)容會根據(jù)加載先后順序被覆蓋。特別地,原版內(nèi)容被保存在?minecraft
?命名空間,想要修改和替換原版的內(nèi)容只需在你的數(shù)據(jù)包內(nèi)建立?minecraft
?命名空間和相應的同名文件并修改即可。
標簽文件,即?tags
?中的文件內(nèi)容默認追加而不是覆蓋。因此標簽文件是解決數(shù)據(jù)包沖突和聯(lián)動的有力工具。

1.16~1.16.1 版本的維度、維度類型和世界生成文件位置為?minecraft/類型/命名空間/路徑/文件名.json
?而不是?命名空間/類型/路徑/文件名.json
。
若命名空間為?minecraft
,則可直接省略?minecraft:
。本文中我們會混用兩種寫法,注意區(qū)分。除此之外,如戰(zhàn)利品表的?type
、戰(zhàn)利品表謂詞的?condition
?等諸多情形的值也是?minecraft
?命名空間下的命名空間ID,因此此時也可以省略?minecraft:
。
§2.3 函數(shù)

Function
函數(shù) (Function) 是一系列順次執(zhí)行的命令列表,可以被命令?function?命名空間ID
?來依次執(zhí)行函數(shù)的每一條命令,還可被調(diào)用于進度JSON文件的?rewards->function
。函數(shù)每一行表示一個單獨的命令,無需?/
?開頭。執(zhí)行時會按順序依次執(zhí)行,使用?#
?開頭的行是注釋。
如果函數(shù)被另一個函數(shù)執(zhí)行,則默認無執(zhí)行者,執(zhí)行位置為出生點,除非在執(zhí)行時繼承調(diào)用它的函數(shù)的執(zhí)行者和執(zhí)行位置。如果函數(shù)被命令方塊執(zhí)行,則無執(zhí)行者,執(zhí)行位置為命令方塊位置。如果函數(shù)被玩家手動執(zhí)行,則執(zhí)行者為玩家自身,執(zhí)行位置為玩家位置。如果函數(shù)被進度獎勵,執(zhí)行者為完成進度的玩家,執(zhí)行位置為玩家位置。這些情形下的執(zhí)行者和執(zhí)行位置均可使用命令?execute
?來改變。
如果需要函數(shù)在游戲加載/每刻執(zhí)行,則需要將其加入函數(shù)標簽中。
§2.4 進度

Advancement
進度 (Advancement) 為游戲內(nèi)檢測玩家行為,觸發(fā)后完成并執(zhí)行獎勵的系統(tǒng),游戲內(nèi)按?L
?即可查看,可被用作命令?advancement
?的參數(shù),以授予或移除玩家的特定進度。
注意1.17的物品謂詞和方塊謂詞與舊版本的有差異。
沒有?parent
?的進度被稱為根進度。若其有?display
,則它定義了一個進度的選項卡。
當一個進度沒有?display
?時,或者其上游的根進度沒有?display
?時,它不會顯示在進度頁面中。解鎖配方的進度,以及我們只是用來實現(xiàn)某些效果而并非希望將其添加到進度頁面的進度,應當省略?display
?以隱藏之。
當進度需要所有的條件都達成時才能完成時,我們不需要定義?requirements
,這等價于?"requirements": [["條件 1"],["條件 2"],...,["條件 n"]]
。如果我們需要復雜的組合條件時,就需要使用該字段。requirements
?的格式為或的與(合取范式),即其列表中的每一個項(該項還是一個條件的列表)中的均至少有一個條件滿足。例如?"requirements": [["條件 a", "條件 b"],["條件 c", "條件 d"]]
?表示當?條件 a
?和?條件 b
?至少有一個滿足且?條件 c
?和?條件 d
?至少有一個滿足時,進度會完成。不過較為常見的還是所有條件只要有一個滿足即可,這時寫作?"requirements": [["條件 1","條件 2",...,"條件 n"]]
。例如下例中兩個條件?sealing_wand
,?dream_wand
?分別表示玩家獲取了相應 NBT 物品的觸發(fā)器,只要其中有一個滿足即可完成進度。
完整的觸發(fā)器和觸發(fā)器的條件請查看進度/JSON格式#觸發(fā)器列表。我們簡要列出常見的觸發(fā)器:

所有的觸發(fā)器條件均有一個可選的戰(zhàn)利品表謂詞列表?player
?字段用于要求玩家額外需要滿足的戰(zhàn)利品表謂詞。例如
獎勵中的解鎖配方一般適用于數(shù)據(jù)包添加的配方相應的解鎖進度,這樣的進度無需?display
?字段,參考配方。獎勵中的經(jīng)驗建議僅在高難度進度完成時給予,這樣的進度通常設置?frame
?為挑戰(zhàn)。獎勵中的函數(shù)的執(zhí)行者為完成進度的玩家,位置為玩家的位置。
游戲內(nèi)或函數(shù)內(nèi)使用?advancement
?命令可以手動給予或剝奪進度。進度配合獎勵函數(shù)剝奪玩家該進度,則該進度可反復觸發(fā),可用于諸如檢測玩家生物群系、飲食、放置方塊等需要循環(huán)檢測的情形。這樣的進度需要缺省?display
?字段。例如:
原版進度?如果需要修改原版的進度,只需要在數(shù)據(jù)包中添加相同路徑的相應名稱文件并修改之即可。原版的進度被劃分為5個選項卡,命名空間ID分別為?minecraft:story/*
,?minecraft:nether/*
,?minecraft:end/*
,?minecraft:adventure/*
,?minecraft:husbandry/*
。其中?minecraft:nether/all_effects
,?minecraft:adventure/hero_of_the_village
,?minecraft:adventure/arbalistic
?為隱藏進度。這些進度沒有獎勵,或只有獎勵經(jīng)驗值。
除此之外,原版獲取配方的進度命名空間ID為?minecraft:recipes/*
。
§2.5 戰(zhàn)利品表

Loot table
戰(zhàn)利品表:從入門到重新入門
戰(zhàn)利品表 (Loot table) 用于生成隨機的一些物品,可作為容器的隨機物品、實體的掉落物、方塊的掉落物、釣魚的戰(zhàn)利品、豬靈以物換物的內(nèi)容、貓和村民的禮物、進度的完成獎勵、loot
?命令的參數(shù)以給予玩家特定戰(zhàn)利品表物品等。
setblock ~ ~ ~ chest{LootTable:"cpp:chests/something"}
give @s barrel{BlockEntityTag:{LootTable:"cpp:chests/something"}}
summon bat ~ ~ ~ {DeathLootTable:"cpp:entities/something"}
loot spawn ~ ~ ~ loot cpp:something
即使沒有指定戰(zhàn)利品表種類,或指定為?minecraft:generic
,游戲也會根據(jù)實際應用的場景來決定它的類型。這意味著在相應情形無效的條件和函數(shù)不會生效,而且游戲不會報錯提示。例如在方塊戰(zhàn)利品表中檢測擊殺者。
rolls
,?bonus_rolls
, 以及在戰(zhàn)利品表、戰(zhàn)利品表謂詞和物品修飾器中的大部分數(shù)值可以有如下形式之一:
項目會根據(jù)種類的不同而擁有不同的JSON格式:
我們在設計物品時,可以將物品信息打包成一個戰(zhàn)利品表。之后我們便可以在其它戰(zhàn)利品表中使用?loot_table
?類型來方便地引用,見物品設計。alternatives
?類型在需要判斷條件時很有用,例如原版的樹葉掉落物就使用了該類型。當工具為剪刀或附有精準采集魔咒時,掉落樹葉,否則掉落樹苗。dynamic
?類型配合潛影盒可以掉落不定?id
?的物品,見物品輸出和修改玩家背包。
戰(zhàn)利品表條件?用于對戰(zhàn)利品表進行一些條件判斷。僅當條件列表?conditions
?中每一個條件都被滿足時,其同層次的隨機池/項目/函數(shù)才會被選取。戰(zhàn)利品表條件和戰(zhàn)利品表謂詞JSON對象的格式完全相同。
戰(zhàn)利品表函數(shù)?用于對戰(zhàn)利品表進行一些修改。函數(shù)列表?functions
?中每一個函數(shù)會依次應用于同層次的隨機池/項目生成的戰(zhàn)利品上,函數(shù)的不同順序可能有不同效果。戰(zhàn)利品表函數(shù)和物品修飾器JSON對象的格式完全相同。
下面這個例子是對原版牛的掉落物進行的修改。
該例子戰(zhàn)利品表表示牛死亡時
掉落?
0-(2+搶奪等級)
個皮革;掉落?
1-(3+搶奪等級)
個牛肉,著火則掉落熟牛肉;被玩家殺死時,有?
(2.5+搶奪等級)%
?幾率掉落戰(zhàn)利品表?cpp:limb_of_ridge
?的物品;被玩家殺死時,有?
(2.5+搶奪等級)%
?幾率掉落戰(zhàn)利品表?cpp:cow_head
?的物品。
戰(zhàn)利品表除上述用途外,還可用于生成隨機數(shù),見隨機數(shù);指定自定義機器的配方,見配方處理等諸多場景。
原版戰(zhàn)利品表用于決定方塊、實體的默認掉落物以及游戲的一些默認內(nèi)容。如果需要修改原版的戰(zhàn)利品表,只需要在數(shù)據(jù)包中添加相同路徑的相應名稱文件并修改之即可。原版的戰(zhàn)利品表被劃分為實體掉落物?minecraft:entities/*
, 方塊掉落物?minecraft:blocks/*
, 箱子戰(zhàn)利品表?minecraft:chests/*
和游戲內(nèi)容(釣魚、豬靈以物換物、村民禮物、貓的禮物)?minecraft:gameplay/*
。
§2.6 戰(zhàn)利品表謂詞

Predicate
【CBL|SPG】[1.16] Predicate —— 數(shù)據(jù)包的組成文件之一
戰(zhàn)利品表謂詞 (Predicate) 用于對所在情形進行條件判斷,可作為戰(zhàn)利品表的條件、命令?execute
?的條件子命令?(if|unless) predicate foo:bar
、目標選擇器參數(shù)?predicate={foo:bar}
、進度中判斷實體條件等。戰(zhàn)利品表的條件和戰(zhàn)利品表謂詞格式相同。
注意1.17和舊版本的物品謂詞和方塊謂詞有差異。
這個例子表示玩家的分數(shù)?cppChainTick
?至少為?1
?時,或者手持物具有特定標簽時通過。
戰(zhàn)利品表謂詞文件也可以為戰(zhàn)利品表謂詞JSON對象的列表。這個例子表示玩家的手持物或盔甲擁有指定標簽,且玩家不擁有?cpp:temperancer
?時通過。
§2.7 物品修飾器

Item modifier
【CBL|SPG】[1.16] Predicate —— 數(shù)據(jù)包的組成文件之一
物品修飾器 (Item modifier) 用于在命令?/item
?中對物品添加戰(zhàn)利品表函數(shù)。戰(zhàn)利品表的函數(shù)和物品修飾器格式相同,但物品修飾器不可被戰(zhàn)利品表的函數(shù)引用。
物品修飾器也可以為物品修飾器JSON對象的列表。例如下例中我們提前將需要設置的耐久存入?storage cpp:_
?的?Damage
,且已損傷的耐久不小于?25
?時將其數(shù)量-1。
例:將玩家1個副手物品移動到頭盔欄。注意引用時應當先檢測玩家頭盔欄是否為空再執(zhí)行該函數(shù)。
例:獲取函數(shù)執(zhí)行者手持物的最大耐久。
§2.8 配方

Recipe
配方 (Recipe) 為游戲內(nèi)指定工作臺合成、切石機合成、熔爐燒煉、高爐燒煉、煙熏爐燒煉、營火燒煉和鍛造臺合成的格式,一般不支持帶 NBT 標簽。
在默認情形(限制配方關閉)下,玩家總是可以使用所有的配方,且使用一個配方會使玩家自動發(fā)現(xiàn)它。因此建議為你的自定義配方添加合適的進度來獲取該配方。一旦配方被發(fā)現(xiàn),就將被加入玩家的配方書。配方只會在玩家使用與當前配方類型所匹配的方塊時顯示。例如,燒煉配方將只在熔爐的界面中顯示。當在背包中使用配方書時,只有能在玩家的?2×2
?背包合成欄內(nèi)使用的配方才會顯示。已發(fā)現(xiàn)的配方儲存在玩家?recipeBook
?的NBT中。
原版的合成、燒煉使用配方文件即可實現(xiàn),較為簡單,但是無法識別且無視配方材料的NBT(除了特殊合成配方),因此只能實現(xiàn)原版物品的合成和燒煉。同時原版模組若使用了相關物品,則相應的模組物品亦可代替原物品進行合成。想要實現(xiàn)帶NBT的合成需要藉由其它方式,見NBT合成與燒煉。
鍛造臺則會保留要升級的物品的NBT信息而只修改其id。
大部分配方中所使用的配方材料格式可以為下述幾種。
§2.8.1 有序合成
使用6羊毛+雞蛋工字形有序合成兩個羊刷怪蛋。
這里?cpp:wools
?為自定義的包含所有顏色羊毛的物品標簽。
§2.8.2 無序合成
配料可以重復。單個物品配方請使用有序合成而不是無序合成。
2沙子和紅石無序合成2紅沙。
§2.8.3 切石機配方
注意?result.count
?不能省略。
使用切石機切割橡木木板為2臺階。
§2.8.4 燒煉配方
熔爐配方的默認燒煉時間是200刻,即10秒。高爐配方和煙熏爐配方的默認燒煉時間是100刻,即5秒。營火的默認燒煉時間是100刻,即5秒,但所有的原版營火配方都將燒煉時間修改為了600刻,即30秒。
熔爐燒煉皮革裝備、腐肉、鞍為兔子皮。
§2.8.5 鍛造臺配方
使用鍛造臺使用鉆石將鐵斧升級為鉆石斧。
§2.8.6 工作臺特殊配方
工作臺有一些特殊配方由游戲內(nèi)部的代碼處理,無法通過JSON文件來修改。這些配方均涉及物品的NBT修改。當原版數(shù)據(jù)包被禁用時,你可以用它們來重新啟用你所需要的特殊合成配方。
§2.8.7 覆蓋原版配方
在數(shù)據(jù)包的pack.mcmeta
中可以指定忽略的數(shù)據(jù)包文件,例如下面就屏蔽了原版棕色蘑菇合成兔肉煲的配方,以及用于解鎖該配方的相應進度。
1.19之前的版本如果想要修改原版的合成或燒煉配方,先使用壓縮軟件打開版本?.jar
?文件,依次打開?data/minecraft/recipes
,找到相應的配方文件,然后在自己的數(shù)據(jù)包中的相同位置(必然是?minecraft
?命名空間下)放入同名文件即可覆蓋默認的配方。
將橡木臺階合成數(shù)量改為8。
將原版白色床+墨囊=黑色床的合成配方修改為任意床+墨囊=黑色床。
如果需要刪除原版配方,可使用生存無法獲得的方塊如基巖=基巖、屏障=屏障、結構空位等物品來合成。配方文件內(nèi)容為?{}
?時會被認為是錯誤文件而無法覆蓋原配方。同時,我們需要將解鎖該配方的進度觸發(fā)器設置為?minecraft:impossible
。
§2.8.8 配方獲取
一個完整的配方應當有相應的進度來使玩家獲取之,通常觸發(fā)器為玩家背包含有合成材料。也可以根據(jù)需要在函數(shù)中使用命令?recipe
?給予。
§2.9 結構

Structure Block
建筑黨也能愉快享用結構方塊-圖文并茂教會你使用結構方塊
如何使用結構方塊
結構 (Structure) 存儲了一個長方體區(qū)域的方塊和實體信息,玩家可以使用結構方塊來創(chuàng)建、保存、調(diào)用結構。結構大小一般至多為?48×48×48
,1.15及更早版本則至多為?32×32×32
。
在游戲中獲得結構方塊后,放置好所需要的方塊結構和實體,然后放置結構方塊,設置為保存模式,調(diào)整好大小,輸入名稱(命名空間ID),點保存即可(注意區(qū)分是否需要保存實體)。然后從?.minecraft/saves/世界名稱/generated/命名空間/structures/路徑/文件名.nbt
?復制到數(shù)據(jù)包內(nèi)。調(diào)用時,在結構方塊中輸入命名空間ID來加載(注意區(qū)分是否需要加載實體)。
我們也可以在函數(shù)中加載,先放置結構方塊,然后放置并清除紅石塊,最后清除結構方塊。這個技巧配合戰(zhàn)利品表和斷言,可用于隨機在世界生成結構,也可直接用于模板池。例如:
結構文件的NBT結構為:
size 結構的長寬高;
entities 結構包含的實體;
blocks 結構包含的方塊,其中 pos 指定了相對坐標,state 指定了該方塊在方塊狀態(tài)列表的編號,從0開始;
palette 方塊狀態(tài)列表,其中 Name 為方塊命名空間ID,Properties 指定該方塊的所有方塊狀態(tài)。也可以為palettes,這個列表的每一個項目都是一個方塊狀態(tài)列表,然后調(diào)用結構時會根據(jù)種子(坐標和完整度)來確定選擇哪一個列表來使用,原版的沉船就使用該方式來存儲。
通過直接編輯結構文件,我們可以繞過使用結構方塊保存的一些限制。在游戲內(nèi)保存好大致的結構后,使用NBT編輯器打開:
通過直接修改結構的
palettes
,可以將設置隨機的結構方塊狀態(tài)列表;通過直接修改結構的
size
,可以將結構設置為大于48的區(qū)域;通過修改
blocks
的pos
,我們可以指定長方體區(qū)域外位置的方塊;通過修改
entities
,我們可以刪除實體不需要保存的一些NBT,這通常包括Air, FallDistance, Fire, Motion, NoGravity, OnGround, PortalCooldown, Pos, Rotation, UUID
等,blockPos
也可以刪除。
這些技巧的使用請參考任意純方塊結構。
如果結構用于結構地物中,當結構只有部分在已加載區(qū)塊中時,系統(tǒng)會根據(jù)結構的size
來確定還有哪些部分沒有被加載。blocks
的pos
不在長方體區(qū)域內(nèi),這可能會導致生成的結構不完整。
§2.10 標簽
Tag
標簽 (Tag) 用于將多個具有相同性質的內(nèi)容放置在一起以便于調(diào)用。Minecraft 中有很多內(nèi)容都叫做標簽,注意區(qū)分它們。
由于數(shù)據(jù)包加載次序難以控制,因此?"replace": true
?的情形較為少用,一般僅用于覆蓋原版標簽。
標簽的?required
?設置為 false 時,可用于添加其他模組的相應ID。這在為數(shù)據(jù)包添加對模組的支持時很有用,例如cpp/tags/blocks/chests.json。而函數(shù)標簽則為數(shù)據(jù)包添加附屬和擴展提供了方便的接口。
標簽共包括6種,分別用于不同情形。
§2.10.1 方塊標簽

方塊標簽 (Block tag) 可以在用命令測試方塊時以?#命名空間ID
?的格式調(diào)用,只要方塊滿足了該標簽中定義的任何一個方塊,命令就會測試通過。方塊標簽還可在進度、斷言、戰(zhàn)利品表中以?"tag": "命名空間ID"
?的格式調(diào)用。調(diào)試模式(F3)下,玩家指向方塊時會顯示含有該方塊的所有方塊標簽。
原版方塊標簽被用于各種方塊屬性,我們按照功能分類并列出。我們不列出僅用于其它標簽、進度、斷言、戰(zhàn)利品表、影響生物尋路和影響方塊連接的方塊標簽。



檢測玩家頭部是否被方塊卡住。
然后執(zhí)行命令
因為命令執(zhí)行地點為實體的腳,所以我們使用?anchored eyes
?來使得局部坐標的位置變?yōu)橥婕业难劬Α?/p>
讓末影人無法拿起任何方塊。
§2.10.2 物品標簽

物品標簽 (Item tag) 在配方、進度、斷言、戰(zhàn)利品表中用?"tag": "命名空間ID"
?的格式使用。還可在創(chuàng)造模式物品欄輸入?#命名空間ID
?來搜索相應標簽物品。物品標簽命名空間ID命名空間:路徑/文件名
對應的文件為?命名空間/tags/items/路徑/文件名.json
。
原版物品標簽被用于各種物品屬性,我們按照功能分類并列出。我們不列出僅用于其它標簽、配方、進度、斷言、戰(zhàn)利品表,影響生物尋路和影響方塊連接的物品標簽。

讓紙可以作為熔爐燃料使用,每次可燒煉一個物品。
§2.10.3 函數(shù)標簽

函數(shù)標簽 (Function tag) 可以在?function
?命令中以?#命名空間ID
?的形式調(diào)用,所有在該標簽中指定的函數(shù)都會按照它們出現(xiàn)的順序執(zhí)行,不會重復執(zhí)行。函數(shù)標簽命名空間ID命名空間:路徑/文件名
對應的文件為?命名空間/tags/functions/路徑/文件名.json
。
minecraft
?命名空間中的標簽
minecraft/tags/functions/load.json
?中的函數(shù)會在加載時被執(zhí)行一次,我們常稱之為加載函數(shù)、load函數(shù)。用于初始化的函數(shù)應當添加至該標簽。minecraft/tags/functions/tick.json
?中的函數(shù)每刻會被執(zhí)行一次,我們常稱之為循環(huán)函數(shù)、主函數(shù)、tick函數(shù)。需要高頻執(zhí)行的函數(shù)應當添加至該標簽。
本文中我們有時會不加注明地使用命名空間:load
?和命名空間:tick
?表示這兩個函數(shù)標簽中的函數(shù)。
§2.10.4 實體類型標簽

實體類型標簽 (Entity type tag) 標簽可以在實體選擇器參數(shù)?type
?以及戰(zhàn)利品表條件中以?#命名空間ID
?的形式調(diào)用,只要實體滿足了該標簽中定義的任何一個類型,就會被選中。實體類型標簽命名空間ID命名空間:路徑/文件名
對應的文件為?命名空間/tags/entity_types/路徑/文件名.json
。
原版實體類型標簽被用于各種實體屬性,我們在此列出。

§2.10.5 流體標簽

流體標簽 (Fluid tag) 標簽很少使用,修改后會影響空氣、水和熔巖的性質,其命名空間ID命名空間:路徑/文件名
對應的文件為?命名空間/tags/fluids/路徑/文件名.json
。
流體和流體對應的方塊是不同的,例如?flowing_water
?不是一個合法的方塊,但流體可以為
原版流體標簽?minecraft:water
?和?minecraft:lava
?用來決定何種流體具有類似水和熔巖的性質,具體見標簽#流體,我們在此省略。
§2.10.6 游戲事件標簽

游戲事件標簽 (Game event tag) 標簽目前僅用于指定影響潛聲傳感器的事件,其命名空間ID命名空間:路徑/文件名
對應的文件為?命名空間/tags/game_events/路徑/文件名.json
。
原版游戲事件標簽?minecraft:vibrations
?用于決定哪些事件會被潛聲傳感器檢測到,minecraft:ignore_vibrations_stepping_carefully
?用于決定哪些事件在玩家潛行時不會被潛聲傳感器檢測到,具體見標簽#游戲事件。
§2.11 維度和維度類型
維度和維度類型用于自定義維度。維度和自定義世界生成無法通過命令?/reload
?在游戲內(nèi)更新。

Custom dimension
維度 (Dimension) 規(guī)定了維度的生成方式和生物群系。
噪聲型維度的的地形由噪聲設置?generator.settings
?確定,生物群系由?generator.biome_source
?的不同可分為五種情形,其中類型為?multi_noise
?時,游戲會生成四維柏林噪聲圖,然后對每個坐標選擇噪聲最接近的生物群系。其中生物群系的?offset
?會影響計算接近程度,從而影響該生物群系的大小,offset
?越大,該生物群系越難被選中。
超平坦型維度僅需指定方塊層的分布、生物群系和使用的結構參數(shù)即可。如果生成要塞,則要塞由原點向外逐個生成在一系列的環(huán)上,直到總數(shù)達到?count
。其中第?i
?個環(huán)的要塞數(shù)量為?spread × (i+1) × (i+2)/6
?向下取整,第?i
?個環(huán)到原點的平均距離為?distance × (6i-2)
?個區(qū)塊。
調(diào)試世界維度僅用于調(diào)試世界,沒有其它可選的設置。
原版的維度包括
§2.11.2 維度類型

維度類型
Dimension type
維度類型 (Dimension type) 規(guī)定維度的一些與地形無關的信息。
可用的維度類型
這些是 Minecraft 內(nèi)部已生成的維度類型命名空間ID,可直接使用。已省略 minecraft:。
§2.11.3 實例
定義好新的維度之后,我們還需要為其設計傳送方式。簡單的可以使用物品觸發(fā),見右鍵交互。更常見的則是使用多方塊結構為傳送檢測方式。
定義一個新的維度,其中僅有繁花森林生物群系。使用高花擺放成八邊形并在中間放置白色羊毛激活傳送門。
檢測傳送門是否完整。檢測玩家位置來傳送。
§2.11.4 自定義世界
自定義世界是一種世界類型,它用自定的特性取代了世界的普通地形。創(chuàng)建世界時,點擊更多選項->導入世界->選擇JSON文件
即可。這種方式還可以用來創(chuàng)建額外的維度而不借助于數(shù)據(jù)包,但是默認只能使用命令?/execute in?維度名稱
?進入額外的維度。
§2.12 自定義世界生成
Custom world generation
自定義世界生成 (Custom world generation) 允許數(shù)據(jù)包改變世界的生成方式,這需要和維度配合使用。本節(jié)中列出的很多JSON內(nèi)容的作用仍然需要測試。點此可下載原版所有的?worldgen
?內(nèi)容?(slicedlime?提供)。注意原版的維度和維度類型并不保存在原版數(shù)據(jù)包中。
§2.12.1 噪聲設置

噪聲設置
Noise settings
噪聲設置 (noise_settings) 用于設置維度生成的噪聲。噪聲設置文件為JSON文件,格式可參考Noise Settings – Official Minecraft Wiki。噪聲設置的命名空間ID命名空間:路徑/文件名
對應的文件為?命名空間/worldgen?/noise_settings/路徑/文件名.json
。
當維度的高度或最低高度發(fā)生改變時,再次進入該維度會導致區(qū)塊 (regions
?文件夾下文件)重新生成,但實體 (entities
?文件夾下文件)會保留。
可用的噪聲設置
這些是 Minecraft 內(nèi)部已生成的噪聲設置命名空間ID,可直接使用。

§2.12.2 生物群系

生物群系
Biome/JSON format
生物群系 (Biome) 規(guī)定了生物群系的特性,可用于維度JSON文件的相應參數(shù)。
可用的生物群系
這些是 Minecraft 內(nèi)部已生成的生物群系命名空間ID,可直接使用。



§2.12.3 地形雕刻器

地形雕刻器
Carvers
地形雕刻器 (Carver) 用來在地形中雕刻出空氣或液體的區(qū)域,被調(diào)用于生物群系JSON文件的?carvers
。
可用的地形雕刻器
這些是 Minecraft 內(nèi)部已生成的地形雕刻器命名空間ID,可直接使用。

§2.12.4 地表生成器

地表生成器
Configured surface builder
地表生成器 (Surface builder) 用來刻畫地面的起伏和構成地形的默認方塊,被調(diào)用于生物群系JSON文件中的?surface_builder
。
可用的地表生成器
這些是 Minecraft 內(nèi)部已生成的地表生成器命名空間ID,可直接使用。

§2.12.5 地物

地物
Configured feature
地物 (Feature) 是指樹、花、礦石等,被調(diào)用于生物群系JSON文件的?features
?中。
上述JSON格式中的
均勻分布的整數(shù)可以為一個JSON對象或一個非負整數(shù)。
可用的地物
這些是 Minecraft 內(nèi)部已生成的地物命名空間ID,可直接使用。已省略?minecraft:
。






裝飾物
可用的裝飾物
這些是 Minecraft 內(nèi)部已生成的裝飾物命名空間ID,可直接使用。已省略?minecraft:
。

§2.12.6 結構地物

結構地物
Configured structure feature
結構地物 (Structure feature) 指定特定類型的結構以及結構的參數(shù),被調(diào)用于生物群系JSON文件的?starts
。
可用的結構地物
這些是 Minecraft 內(nèi)部已生成的結構地物命名空間ID,可直接使用。已省略?minecraft:
。

§2.12.8 模板池

模板池
Jigsaw pools
拼圖方塊與模板池教程
模板池 (Template pool) 使用結構文件來生成結構,其中結構包含的拼圖方塊會工作以生成更復雜的結構。拼圖方塊是一個允許游戲使用較小模板生成結構的拼接方塊:
name
?名稱,該拼圖方塊的標記。pool
?目標池,指的是拼圖方塊將要使用的模板池。target
?目標,與該拼圖方塊連接的另一拼圖方塊的?name
。joint
?連接類型,rollable
?(默認值) 或?aligned
。當拼圖方塊朝上或朝下時才有,其中?aligned
?指拼接的結構位置固定,rollable
?指的是拼接的結構可隨機旋轉。final_state
?轉變?yōu)椋褐傅氖瞧磮D方塊在整個功能被放置后會轉變的方塊。默認為?minecraft:air
。層數(shù),
0~7
?之間,指生成完之后拼接的結構繼續(xù)生成的嵌套層數(shù)。保留拼圖方塊,與其拼接的結構生成完之后其包含的拼圖方塊保留還是轉變?yōu)?
final_state
?指定方塊。
拼圖方塊目前僅用于生成掠奪者前哨站、村莊和堡壘遺跡類型的結構地物。這些結構的生成開始于包含拼圖方塊的模板。每個拼圖方塊都使用下列流程來生成另一個模板:
在目標池內(nèi)隨機選擇一個模板。
在該模板的拼圖方塊,至少存在1個模板含有目標拼圖方塊。如果有多個方塊符合條件,那么會隨機選擇其中的一個。
這會使兩個拼圖方塊連接使得第2個拼圖方塊朝向第1個拼圖方塊并與之相鄰。
最后,兩個拼圖方塊會被替換為對應的“轉變方塊”設置的方塊。
初始模板和附加模板里的拼圖方塊都會重復上述流程,直到?jīng)]有剩余的拼圖方塊或者結構足夠大為止。使用結構方塊加載結構不能復現(xiàn)上述過程。
§2.12.9 處理器列表

處理器列表
Processor lists
處理器列表 (Processor list) 用于指定拼圖方塊生成結構之后拼圖方塊本身的處理方式。
可用的處理器列表
這些是 Minecraft 內(nèi)部已生成的處理器列表命名空間ID,可直接使用。已省略?minecraft:
。
