「名前空間ID」の版間の差分

提供: Minecraft Wiki
移動先: 案内検索
タグ: ビジュアルエディタ
 
1行目: 1行目:
 
{{conjecture}}
 
{{conjecture}}
   
'''名前空間ID'''は''Minecraft''内でビルトイン/ユーザー定義のゲームオブジェクトを宣言/区別し、曖昧さや衝突を避けるためのものである。
+
'''名前空間ID'''({{en|Namespaced ID}})は''Minecraft''内でビルトイン/ユーザー定義のゲームオブジェクトを宣言/区別し、曖昧さや衝突を避けるためのものである。
   
 
== 使用法 ==
 
== 使用法 ==

2020年9月18日 (金) 11:51時点における最新版

この記事の名前は単なる推測です。
正式な名称が発表された場合、名前が変更される可能性があります。

名前空間ID(英:Namespaced ID)はMinecraft内でビルトイン/ユーザー定義のゲームオブジェクトを宣言/区別し、曖昧さや衝突を避けるためのものである。

使用法[編集 | ソースを編集]

名前空間IDはブロックアイテムエンティティの種類レシピ関数進捗タグといった、バニラのMinecraftにおける様々なオブジェクトを参照する文字列である。

そのうちいくつかの例を示すと:

名前空間IDの正しい書式は namespace:name で、ここでは特定の文字しか使用できない。

使用できる文字[編集 | ソースを編集]

名前空間および名前に使用できる文字は以下のもののみである:

  • 0123456789 数字
  • abcdefghijklmnopqrstuvwxyz 英小文字
  • _ 下線
  • - ハイフン/マイナス
  • / スラッシュ
    • ディレクトリの区切りとしてのみ使用でき、名前空間そのものとしては使用できない。
  • . ピリオド
    • ファイル拡張子の区切りとしてのみ使用でき、名前空間そのものとしては使用できない。

lower_case_with_underscores のように英小文字を下線で区切ったものが推奨される。

文字列への変換[編集 | ソースを編集]

名前空間と名前を :(コロン)で繋いだものが名前空間IDを表す文字列となる。

例:

名前空間 名前 文字列表記
minecraft diamond minecraft:diamond
foo bar.baz foo:bar.baz
minecraftwiki commands/minecraft_wiki minecraftwiki:commands/minecraft_wiki

タグの名前空間IDは、さらに名前空間の前に # を付ける。

例:

名前空間 名前 文字列表記
minecraft coal #minecraft:coal
bar baz #bar:baz
minecraftwiki listener/revert_vandalism #minecraftwiki:listener/revert_vandalism

文字列からの変換[編集 | ソースを編集]

全ての名前空間IDが文字列として表記できるわけではなく、文字列に変換できない名前空間IDも存在する。

以下のような制限がある:

  • 文字列は最大1つの :(コロン)文字を含むことができる
  • タグであれば、先頭に # が付く
  • その他の文字は全て使用できる文字でなければならない
  • : を含む場合、: より前に /. を含んではならない

: を含む場合、: より前(タグの # は除く)の部分が名前空間、: より後が名前となる。

: を含まない場合、minecraft が名前空間(タグの # は除く)、文字列全体が名前となる。

名前空間IDの書き方としては常に : を含む書式で書くことが推奨される。

その理由を以下に示す:

  • minecraft 以外の名前空間を表わす唯一の方法だから
  • 混乱を避けるため:名前空間を省略して書くと、名前空間未指定のものと minecraft 名前空間のものとが混同されてしまう
  • minecraft:villager を誤って minecraft/villager(これは minecraft:minecraft/villager と解釈される)と書いてしまった時などに気付きやすくなる
  • /give/summon/setblock といったコマンドの引数であればゲーム側が自動的に名前空間IDに変換できるが、NBTによるターゲットセレクターについては(保存されているNBTと厳密に一致するかどうかチェックする必要があるので)ゲーム側での自動変換が不可能なため。

常に : を含む書式で書くことがなぜ良いかを示す例を以下に挙げる。

文字列 結果 解釈された名前空間 解釈された名前 ゲーム側での解釈
bar:code オブジェクト bar code bar:code
minecraft:zombie オブジェクト minecraft zombie minecraft:zombie
#my_datapack:player-updaters タグ my_datapack player-updaters #my_datapack:player-updaters
#minecraft:load タグ minecraft load #minecraft:load
diamond オブジェクト minecraft diamond minecraft:diamond
#tick タグ minecraft tick #minecraft:tick
foo/bar:coal 解釈失敗 / は使用できない
minecraft/villager オブジェクト minecraft minecraft/villager minecraft:minecraft/villager
mypack_recipe オブジェクト minecraft mypack_recipe minecraft:mypack_recipe
mymap:schrödingers_var 解釈失敗 ö は使用できない
#my_pack:Capital 解釈失敗 C は使用できない

リソースパック/データパック内でのコンテンツの配置[編集 | ソースを編集]

リソースパックおよびデータパックで提供されるオブジェクトの実体はファイルであり、名前空間IDによってオブジェクトに対応するファイルを特定することが可能になる。

オブジェクトの種類やそれが属するパックの種類によってその場所は異なるが、従うべきパターンはある。一般に、場所はpack_type/namespace/object_type/name.suffix のようになる。ここで、すべての /(スラッシュ)記号(object_typename の一部でも構わない)は、オペレーティングシステム毎のディレクトリ区切り文字に置き換えられる。

注: リソースパックにはGUIテクスチャのように名前空間ID付きのオブジェクトにする必要のない要素もある。

配置したいコンテンツの種類が分かれば対応する pack_typeobject_typesuffix も分かる。それに従い最終的なファイルの配置先を決めればよい。

名前空間[編集 | ソースを編集]

Dinnerbone-twitter.png

これは新しい概念ではないのですが、「名前空間」とは何かということは改めて説明が必要でしょう。ゲーム内のほとんどのものは名前空間を持っているので、我々が something を追加し、Mod(またはmapとかそれに類するもの)が something を追加する場合、それらは両方とも異なる something になります。例えばルートテーブルなど、何か名前を付けるときはいつでも、対応する名前空間も提供することになります。名前空間を指定しないと、デフォルトで minecraft になります。これは、somethingminecraft:something が同じものであることを意味します。

Dinnerboneによるnamespace[1]

名前空間はコンテンツの領域であり、潜在的なコンテンツの競合や、同じ名前のオブジェクトの意図しない上書きを防ぐためのものである。

例えば、2つのデータパックが2つのミニゲームをMinecraftに追加する — いずれも start という名前の関数を持つ — とき、名前空間が無いと、これら2つの関数はクラッシュし、ミニゲームも壊れてしまうだろう。それぞれ異なる名前空間 minigame_oneminigame_two を指定していれば、これらの関数はそれぞれ minigame_one:start および minigame_two:start となり、競合は起こらない。

名前空間のカスタム[編集 | ソースを編集]

名前空間は、他のプロジェクトやコンテンツ(例えばデータパックリソースパックMod、データパック/リソースパックを含むマップなど)とは異なるものである必要がある。

衝突を防ぐために、名前空間はできるだけ重複しないようなものにしておく必要がある。

  • alphabet soupを避ける[訳註 1]。例えば、"nuclear craft"というプロジェクトの名前空間を nc と略したものにしない。これでは曖昧になってしまう。
  • 曖昧すぎる言葉は避ける。battle_royale だと調査が困難だが、player_name_battle_royale とすれば困難さを減らせるであろう。

どちらの場合でも、これらの不適切に選択された名前空間によりプロジェクトが使われづらくなり、コンテンツが増えたときのデバッグが困難になる。

  1. なんでもかんでも略語にしない

minecraft 名前空間[編集 | ソースを編集]

Minecraftminecraft 名前空間を予約している。名前空間を指定しなかった場合、minecraft を指定したものとして扱われる。minecraft 名前空間は、Minecraftの既存データを上書き/変更する必要がある場合(例えば、#minecraft:load 関数タグ関数を追加したい場合)にのみ使用されるべきである。

歴史[編集 | ソースを編集]

Java Edition
??minecraft の接頭辞とともに名前空間IDを追加した。
1.7.2?コマンドで数値IDに加えて名前IDも受け入れるようになった。
1.1116w32a名前空間IDに使用できる文字の制限が加わった。
名前空間IDに英大文字が使えなくなった。
1.1317w47a平坦化により、名前IDのみを受け入れるようになった。
数値IDは削除された。
Bedrock Edition
1.12.0beta 1.12.0.2Add-onによるアイテムの追加をサポートするため、minecraft の接頭辞とともに名前空間IDを追加した。

関連項目[編集 | ソースを編集]

脚注[編集 | ソースを編集]

  1. "Minecraft Snapshot 17w43a" – Minecraft.net

外部リンク[編集 | ソースを編集]