- 致编者:请牢记我们的域名wiki.mcbe-dev.net!
- 致编者:欢迎加入本Wiki的官方交流QQ群或Discord服务器!
- 基岩版1.19.31现已发布!(了解更多)
- Inner Core现已支持Xbox模组联机!(了解更多)
- 如果您是第一次来到本Wiki,欢迎注册一个账户
- 点击顶部的“编辑”或“编辑源代码”按钮即可编辑当前页面
- 请知悉:在不登录时也可以编辑和新建页面,但是您当前的IP地址会记录在编辑历史中
賦命名空間識別碼
賦命名空間識別碼(Namespaced identifier)是用來指明和識別遊戲中特定物件而又能避免潛在的歧義和衝突的一種方式,其主要由命名空間(Namespace)和識別碼(Identifier,簡寫ID)兩部分組成[注 1]。通常來說,命名空間是內容的區界,識別碼相當於對應區界下此內容的名稱;有時命名空間也直接充當名稱來使用。部分遊戲內容(例如方塊、物品等)擁有數字ID,這個數字ID即數字識別碼。
格式[編輯]
賦命名空間識別碼用作普通字串來指明遊戲中的方塊、物品、實體、配方、函式等物件。
有效的賦命名空間識別碼的格式為<命名空间>:<标识符>
,其中只能使用合法字元。
合法字元[編輯]
命名空間和識別碼可以包含任何符號,斜槓「/
」和冒號「:
」除外。
斜槓「/
」在命名空間中是非法的,但在戰利品表、交易、函式和聲音中表示路徑時是可接受的[注 2]。
命名空間和識別碼的最好命名方法是小寫單詞加下劃線(snake_case
)。
輸出為字串[編輯]
遊戲通常會將賦命名空間識別碼使用字串表示。賦命名空間識別碼的字串格式為<命名空间>:<标识符>
。
例子:
命名空間 | 識別碼 | 字串表示 |
---|---|---|
minecraft |
diamond |
minecraft:diamond
|
foo |
bar.baz |
foo:bar.baz
|
從字串識別[編輯]
遊戲可以識別使用者輸入的賦命名空間識別碼字串,錯誤的字串無法正確識別為賦命名空間識別碼。
字串被正確識別的前提是必須符合合法字元的規則,在此條件下透過加入不同的符號可以變更被識別的內容:
- 在方塊或物品的賦命名空間識別碼字串後使用冒號,並在冒號後加上資料值可用於指定該賦命名空間識別碼下某個資料值的方塊或物品。例如:
minecraft:wool:3
(淺藍色羊毛)。 - 在幾何的識別碼字串後使用冒號,並在冒號後加上另一個幾何的識別碼可繼承該幾何的內容。例如:
geometry.armor:geometry.base
。
命名空間[編輯]
這不是一個新概念,但是我想我應重申一下什麼是「命名空間」。遊戲中的大多數東西都有一個命名空間,以便在我們加入了something
的同時一個遊戲模組(或地圖,或其他)也加入了something
時來區分它們兩個。當您要為某個東西命名時,例如一個戰利品表,您還需要指定這個東西所屬的命名空間。如果您不指定命名空間,我們預設它是minecraft
。這意味著something
和minecraft:something
是一回事[注 3]。
命名空間是內容的區界。它是為了防止潛在的內容衝突或無意中覆蓋了相同名稱的物件。
例如,兩個附加包裡都有一個識別碼為start
的方塊。向遊戲加入這兩個附加包,如果沒有命名空間,這兩個方塊就會發生衝突。當它們具有one
和two
兩個不同的命名空間時,則方塊將變為one:start
和two:start
,不再衝突。
minecraft
命名空間[編輯]
遊戲本身使用minecraft
命名空間。只有當專案需要覆蓋或修改現有的「minecraft」資料時,才應該使用minecraft
命名空間。
附加包元件使用<命名空间>:<组件名称>
的方式來區分,在國際版中所有含命名空間的元件均使用minecraft
命名空間,在中國版中新增的元件則使用netease
命名空間。
為了避免和附加包衝突,在Inner Core中自訂的物品、方塊和實體目前皆預設以minecraft
為命名空間。
自訂命名空間[編輯]
不同的專案或內容創作(例如附加包),命名空間應該是不同的,僅當需要覆蓋其他專案的時候,才使用與其他專案相同的命名空間。
為了防止潛在的衝突,命名空間應該儘可能的特殊。
- 避免使用一堆積字母的組合。例如,一個名為「nuclear craft」的專案不應該使用命名空間
nc
,因為太簡單了。 - 避免使用過於模糊的詞語。
battle_royale
也不能提供便於查找的資訊,不過player_name_battle_royale
會更好些。
這些不當的命名空間都會減少專案的適應程度,並在將多個專案加入到遊戲時給除錯帶來困難。
模式[編輯]
附加包一般使用一個賦命名空間識別碼(或識別碼)來定義該JSON檔案的模式,它們通常是JSON檔案中二級物件的物件名。例如方塊模式的賦命名空間識別碼是minecraft:block
,它告訴遊戲這個檔案使用的模式為方塊模式。它在JSON檔案中的關係如下:
{
"format_version": "1.17.0",
"minecraft:block": {
…
}
}
下表列出了附加包中各種檔案的模式賦命名空間識別碼(部分僅識別碼或命名空間):
賦命名空間識別碼 | 域
|
---|---|
animations
|
動畫 |
animation_controllers
|
動畫控制器 |
minecraft:attachable
|
附著物 |
minecraft:biome
|
生態域 |
minecraft:client_entity
|
實體用戶端 |
minecraft:entity
|
實體伺服器端 |
minecraft:<地物名称>_feature
|
地物 |
minecraft:feature_rules
|
地物規則 |
minecraft:fog_settings
|
迷霧 |
minecraft:item
|
物品 |
minecraft:geometry [注 4]
|
幾何 |
particle_effect
|
粒子 |
minecraft:recipe_<配方名称>
|
配方 |
render_controllers
|
繪製控制器 |
minecraft:spawn_rules
|
實體生成規則 |
minecraft:texture_set
|
紋理集 |
<命名空间> [注 5]
|
JSON UI |
minecraft:behavior_tree
|
行為樹 |
列表[編輯]
歷史[編輯]
攜帶版(Alpha) | |||||
---|---|---|---|---|---|
0.16.0 | build 1 | 加入了指令,支援字串ID,但這些ID沒有命名空間。 | |||
基岩版 | |||||
1.12.0 | 1.12.0.2 | 加入了賦命名空間識別碼和minecraft 前綴以支援透過附加包加入自訂物品。 |
參見[編輯]
注釋[編輯]
- ↑ 附加包中一般簡稱賦命名空間識別碼為「identifier」或"name"。例如:。
"identifier": "example:test_block"
- ↑ 戰利品表、交易、函式和聲音的命名空間即其檔案名(函式和聲音的命名空間不含檔案拓展名),若包含在一個或多個次級目錄下則命名空間為其檔案路徑,用斜槓劃分目錄。例如:
- 引用另一個戰利品表:
"name": "loot_tables/gameplay/fishing/junk.json"
- 在指令中填寫函式的命名空間:
/function check/testblock
- 引用另一個戰利品表:
- ↑ 在基岩版中如果不指定命名空間,遊戲不會預設加上
minecraft
,但附加包中部分JSON檔案的模式賦命名空間識別碼僅為一個識別碼(例如動畫JSON的模式賦命名空間識別碼是animations
而不是minecraft:animations
),這似乎是預設為minecraft
命名空間下的內容。 - ↑ 幾何JSON檔案可以使用模式賦命名空間識別碼也可以不使用;單個模型的幾何JSON只使用識別碼,不帶有命名空間。
- ↑ JSON UI檔案中以開頭作為此UI的命名空間。遊戲透過不同的JSON UI的命名空間來區分它們彼此。
"namespace": "<example>"