Registory

  • MOD オブジェクト (アイテム、ブロック、サウンドなど) を取得し、それらをゲームに知らせるプロセス
  • ゲームで登録を必要とするほとんどのものは、ForgeRegistory で管理
  • KeyValue の Map っぽいクラス
  • Key : ResourceLocation
  • 登録可能なオブジェクトごとに独自のレジストリがある。つまり、ジェネリッククラスによる実装っぽい?
  • 同じ名前で登録しちゃうと後で登録したものが、前のものを上書きする

DeferredRegister

  • オブジェクトを登録するためのクラス
  • これを定義した後に、register で登録する

RegistryObject

Class RegistryObject https://nekoyue.github.io/ForgeJavaDocs-NG/javadoc/1.19/net/minecraftforge/registries/RegistryObject.html

DeferredRegisterに登録した結果を保存するっぽいので、単体で使うことはほぼなさそう 登録後に参照したい時に使うっぽい

RegisterEvent

DeferredRegisterを使う代わりに、Modの大元のクラスのコンストラクターの後に呼び出されるコールバック DeferredRegister だと Static で登録しておけば、登録を自動でしてくれるので、その代わりに手動でやる感じ

@SubscribeEvent
public void register(RegisterEvent event) {
  event.register(ForgeRegistries.Keys.BLOCKS,
    helper -> {
      helper.register(new ResourceLocation(MODID, "example_block_1"), new Block(...));
      // ...
    }
  );
}