賦命名空間識別碼

出自Minecraft基岩版开发Wiki

賦命名空間識別碼(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。這意味著somethingminecraft:something是一回事[注 3]

——Dinnerbone評論於命名空間

命名空間是內容的區界。它是為了防止潛在的內容衝突或無意中覆蓋了相同名稱的物件。

例如,兩個附加包裡都有一個識別碼為start方塊。向遊戲加入這兩個附加包,如果沒有命名空間,這兩個方塊就會發生衝突。當它們具有onetwo兩個不同的命名空間時,則方塊將變為one:starttwo: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.0build 1加入了指令,支援字串ID,但這些ID沒有命名空間。
基岩版
1.12.01.12.0.2加入了賦命名空間識別碼和minecraft前綴以支援透過附加包加入自訂物品。

參見[編輯]

註釋[編輯]

  1. 附加包中一般簡稱賦命名空間識別碼為「identifier」或"name"。例如:
    "identifier": "example:test_block"
    
  2. 戰利品表、交易、函式和聲音的命名空間即其檔案名(函式和聲音的命名空間不含檔案拓展名),若包含在一個或多個次級目錄下則命名空間為其檔案路徑,用斜槓劃分目錄。例如:
    • 引用另一個戰利品表:
      "name": "loot_tables/gameplay/fishing/junk.json"
      
    • 在指令中填寫函式的命名空間:/function check/testblock
  3. 基岩版中如果不指定命名空間,遊戲不會預設加上minecraft,但附加包中部分JSON檔案的模式賦命名空間識別碼僅為一個識別碼(例如動畫JSON的模式賦命名空間識別碼是animations而不是minecraft:animations),這似乎是預設為minecraft命名空間下的內容。
  4. 幾何JSON檔案可以使用模式賦命名空間識別碼也可以不使用;單個模型的幾何JSON只使用識別碼,不帶有命名空間。
  5. JSON UI檔案中以
    "namespace": "<example>"
    
    開頭作為此UI的命名空間。遊戲透過不同的JSON UI的命名空間來區分它們彼此。