レジストリシステム
〔レジストリ(Registry)は英語で登録、登記、登録所、登録簿などの意味があります。情報処理の分野では、外部から情報の登録を受け付け、まとめて保管しておくシステムや機関のことを意味することが多いです。 Minecraft にもコンテンツを登録するための機構となるレジストリが存在します。〕
ゲームに追加するほとんどのコンテンツをレジストリに登録する必要があります。 これは次のことに役立ちます:
- コンテンツの存在をゲームに知らせる
- クライアントとサーバー間のゲームコンテンツの検証
- 保存時の無効なコンテンツの処理
- 異なる Mod 間の競合を防ぐ
- クライアント↔サーバー間通信とデータ保存のための圧縮
- ID ナンバーの抽象化または非表示
任意のタイプのコンテンツを登録するときは、追加のラベルである Identifier
を渡します。 Identifier (しばしば ID と省略されます)には名前空間とパスがあります。ほとんどの場合、名前空間は Mod の ID であり、パスは登録するコンテンツの名前です。たとえば、標準の土ブロックの ID は minecraft:dirt
です。
カスタムコンテンツを登録せずに使用すると、テクスチャの欠落、ワールドセーブの問題、クラッシュなどのバグのある動作が発生する可能性があります。何かを登録するのを忘れた場合、ゲームは通常あなたに知らせます。
レジストリの種類
コンテンツを登録するときは、コンテンツを追加するレジストリを指定する必要があります。ベースゲームは、すべてのバニラコンテンツのレジストリを提供します。これは、 Registries
(バージョン1.19.3以降) または Registry
(バージョン1.19.3まで) にあります。使用できるレジストリの 2 つの例には、アイテム用の Registries.ITEM
(バージョン1.19.3以降) / Registry.ITEM
(バージョン1.19.3以降) とブロック用の Registries.BLOCK
(バージョン1.19.3以降) / Registry.BLOCK
(バージョン1.19.3以降) があります。
利用可能なすべてのレジストリの詳細な概要と説明については、レジストリの種類 ページを参照してください。
コンテンツの登録
レジストリにコンテンツを追加するには、 Registry.register
を使用します。
public static <T> T register(Registry<? super T> registry, Identifier id, T entry) { return ((MutableRegistry)registry)add(id, entry); }registry - コンテンツを追加するレジストリのインスタンス。
Registry
にあるすべてのバニラレジストリのリストは、 レジストリの種類 にあります。
id - レジストリ内のコンテンツの識別ラベル。標準的な規則は、minecraft:dirt
で見られるように、modid:name
です。
entry - 登録するコンテンツのインスタンス。
レジストリメソッド
get
- レジストリ内の ID に関連付けられたエントリを返します。エントリが存在しない場合、 SimpleDefaultedRegistry
はデフォルトのレジストリ値を返し、 SimpleRegistry
は null を返します。
@Nullable public abstract T get(@Nullable Identifier id);
getId
- レジストリ内のエントリに関連付けられた Identifier
を返します。エントリが存在しない場合、 SimpleDefaultedRegistry
はデフォルトのレジストリ ID を返し、SimpleRegistry
は null を返します。
@Nullable public abstract Identifier getId(T entry);
getRawId
- レジストリ内のエントリに関連付けられた内部整数 ID を返します。 エントリが存在しない場合、SimpleDefaultedRegistry
はデフォルトのレジストリ値の生 ID を返し、 SimpleRegistry
は -1 を返します。
public abstract int getRawId(@Nullable T entry);