From 6e5296f49438f3032640e1c387ea0c8cdc78c5be Mon Sep 17 00:00:00 2001 From: Builder <92662457+Builder256@users.noreply.github.com> Date: Sat, 14 Mar 2026 04:46:17 +0900 Subject: [PATCH 1/7] =?UTF-8?q?refactor:=20=E3=83=A1=E3=82=A4=E3=83=B3?= =?UTF-8?q?=E3=82=AF=E3=83=A9=E3=82=B9=E3=81=AE=E3=82=B3=E3=83=A1=E3=83=B3?= =?UTF-8?q?=E3=83=88=E3=82=92=E6=95=B4=E5=82=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../polygontrainmod/PolygonTrainMod.java | 111 ++++++++++-------- 1 file changed, 62 insertions(+), 49 deletions(-) diff --git a/src/main/java/com/portofino/polygontrainmod/PolygonTrainMod.java b/src/main/java/com/portofino/polygontrainmod/PolygonTrainMod.java index c96ff59..b75ca30 100644 --- a/src/main/java/com/portofino/polygontrainmod/PolygonTrainMod.java +++ b/src/main/java/com/portofino/polygontrainmod/PolygonTrainMod.java @@ -20,99 +20,112 @@ import net.neoforged.neoforge.registries.DeferredRegister; // この値はMETA-INF/neoforge.mods.tomlファイルの入力と一致する必要があります。 +// Modアノテーション、1.21.1になっても1.7.10と機能は同じ? @Mod(PolygonTrainMod.MODID) public class PolygonTrainMod { - // すべての人が参照できるように、共通の場所にmodのidを定義する。 + // コード全体から参照できるmodのid public static final String MODID = "polygontrainmod"; - // slf4j ロガーを直接参照する + // PolygonTrainModからのログと識別するため、そのMod専用のロガーを取得する。1.7.10時代のLog4jとは違い、SLF4Jはロギングライブラリではないらしい public static final Logger LOGGER = LogUtils.getLogger(); - // CreativeModeTabsを保持するDeferred Registerを作成し、すべて "polygontrainmod "ネームスペースに登録する。 + // CreativeModeTabsを保持するDeferredRegisterを作成し、すべてを名前空間"polygontrainmod"に登録する。 public static final DeferredRegister CREATIVE_MODE_TABS = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, MODID); + // DeferredRegisterは、MinecraftのRegistriesに登録されているタイプの要素の新しいバリエーションを実装する場合に必要になる + // 対象となるのは、BlockやItem、Entityなど、`minecraft:object_id`の形式で表すタイプのオブジェクト? + // GameRegistryを自由に呼びつけるのは危険なため、代わりにこれが使用されるようになったらしい + // 名前空間とパスを組み合わせて、id "polygontrainmod:example_block "で新しいブロックを作成します。 -// public static final DeferredBlock EXAMPLE_BLOCK = BLOCKS.registerSimpleBlock("example_block", BlockBehaviour.Properties.of().mapColor(MapColor.STONE)); + // public static final DeferredBlock EXAMPLE_BLOCK = BLOCKS.registerSimpleBlock("example_block", BlockBehaviour.Properties.of().mapColor(MapColor.STONE)); // 名前空間とパスを組み合わせて、id "polygontrainmod:example_block "の新しいBlockItemを作成します。 -// public static final DeferredItem EXAMPLE_BLOCK_ITEM = ITEMS.registerSimpleBlockItem("example_block", EXAMPLE_BLOCK); + // public static final DeferredItem EXAMPLE_BLOCK_ITEM = ITEMS.registerSimpleBlockItem("example_block", EXAMPLE_BLOCK); - /* ~~~~~~~~~~ 以下DeferredHolderへの登録 ~~~~~~~~~~ */ + // 作ったDeferredRegisterに登録されるそれぞれの要素を表すのが、DeferredHolder + // FMLPreInitializationEventでGameRegistryに登録していた時代は、BlockやItemをコード内で使用する際に、そのオブジェクトのインスタンスが必ず生成されていることが明らかだったが + // Modローダーの判断で生成されるシステムのDeferredRegisterではそれがない + // そのため、実際のオブジェクトの代わりにコードで使用されるためにつくられたのが、DeferredHolderだと思う - // 戦闘タブの後に配置される、idが"polygontrainmod:example_tab"のクリエイティブタブを登録 + // クリエイティブタブ"polygontrainmod:main_tab"を登録 public static final DeferredHolder MAIN_TAB = CREATIVE_MODE_TABS.register("main_tab", () -> CreativeModeTab.builder() .title(Component.translatable("itemGroup.polygontrainmod")) //CreativeModeTabのタイトルの言語キー .withTabsBefore(CreativeModeTabs.COMBAT) // タブのアイコンを切符アイテムに設定 .icon(() -> PolygonTrainModItems.TICKET.get().getDefaultInstance()) .displayItems((parameters, output) -> { - output.accept(PolygonTrainModItems.EXAMPLE_ITEM.get()); // サンプルアイテムをタブに追加します。独自のタブの場合は、イベントよりもこの方法が推奨されます。 - + // EXAMPLE_ITEMをこのタブに追加 + // Mod独自のタブにアイテムを追加する場合は、後述のEventよりもこの方法が推奨されるらしい + output.accept(PolygonTrainModItems.EXAMPLE_ITEM.get()); // 通常の乗車券をクリエイティブタブに追加 output.accept(PolygonTrainModItems.TICKET.get()); // 回数乗車券をクリエイティブタブに追加 output.accept(PolygonTrainModItems.COUPON_TICKET.get()); // ICカード乗車券をクリエイティブタブに追加 output.accept(PolygonTrainModItems.IC_CARD_TICKET.get()); - - // インベントリに作成したブロックアイテムを追加する、ブロックを直接登録しても自動でブロックアイテムを探索してやってくれるらしい + // 各種BlockののBlockItemをクリエイティブタブ追加する + // 今回はItemを指定しているが、Blockを直接登録した場合も、自動で対応するBlockItemを探索してやってくれるらしい output.accept(PolygonTrainModItems.TEST_AUTOMATIC_TICKET_GATE_ITEM.get()); output.accept(PolygonTrainModItems.OVERHEAD_LINE_POLE_ITEM.get()); }).build()); - // MODクラスのコンストラクタは、MODがロードされたときに最初に実行されるコードです。 - // FML は IEventBus や ModContainer のようないくつかのパラメータタイプを認識し、 自動的に渡してくれます。 + // MODクラスのコンストラクタは、MODがロードされたときに最初に実行されるらしい + // FMLはIEventBusやModContainerのようないくつかの引数の型を認識し、自動的に渡すらしい public PolygonTrainMod(IEventBus modEventBus, ModContainer modContainer, Dist dist) { - // modloading用のcommonSetupメソッドを登録する。 - modEventBus.addListener(this::commonSetup); + // Modローディング時に行われるセットアップのメソッドを登録する + // メソッド参照で、そのメソッドの引数のイベントの型が渡される + // modEventBus.addListener(this::commonSetup); + // Dist.CLIENTをチェックして、クライアントサイドでのみ実行されるようにする if (dist == Dist.CLIENT) { + // Entityのレンダラーの描画イベントを購読するメソッド modEventBus.addListener(PolygonTrainModRenderers::registerEntityRenderers); } - // DeferredレジスタをMODイベントバスに登録し、ブロックが登録されるようにする + // DeferredRegisterをNeoForgeのMODEventButに登録し、DeferredRegisterに登録された各ブロックがゲームに登録されるようにする PolygonTrainModBlocks.BLOCKS.register(modEventBus); - // MODイベントバスにDeferred Registerを登録し、アイテムが登録されるようにする。 PolygonTrainModItems.ITEMS.register(modEventBus); - // MODイベントバスにDeferred Registerを登録し、タブが登録されるようにする。 CREATIVE_MODE_TABS.register(modEventBus); - // MODイベントバスに PolygonTrainModComponents.REGISTRAR.register(modEventBus); PolygonTrainModEntities.ENTITY_TYPES.register(modEventBus); - // 興味のあるサーバーやその他のゲームイベントに登録する。 - // これは、*この*クラス(PolygonTrainMod)がイベントに直接反応することを望む場合にのみ必要であることに注意してください。 - // 以下の onServerStarting() のように、このクラスに @SubscribeEvent アノテーション関数がない場合は、この行を追加しないでください。 -// NeoForge.EVENT_BUS.register(this); + // 利用したいサーバー、あるいはその他のゲームイベントに登録する + // これは、このPolygonTrainModクラスがEventに直接反応することを望む場合にのみ必要であることに注意するらしい + // 以下のonServerStarting()のような@SubscribeEventアノテーション関数がこのクラスにない場合は、この行を追加してはならないらしい + // NeoForge.EVENT_BUS.register(this); // アイテムをクリエイティブタブに登録する -// modEventBus.addListener(this::addCreative); + // modEventBus.addListener(this::addCreative); - // modのModConfigSpecを登録し、FMLが設定ファイルを作成して読み込むようにする。 + // modのModConfigSpecを登録し、FMLがConfigファイルを作成して読み込むようにする modContainer.registerConfig(ModConfig.Type.COMMON, Config.SPEC); } - private void commonSetup(FMLCommonSetupEvent event) { + // これがFMLInitializationEventに近いらしい + // private void commonSetup(FMLCommonSetupEvent event) { // 一般的なセットアップコード -// LOGGER.info("HELLO FROM COMMON SETUP"); - -// if (Config.LOG_DIRT_BLOCK.getAsBoolean()) { -// LOGGER.info("DIRT BLOCK >> {}", BuiltInRegistries.BLOCK.getKey(Blocks.DIRT)); -// } - -// LOGGER.info("{}{}", Config.MAGIC_NUMBER_INTRODUCTION.get(), Config.MAGIC_NUMBER.getAsInt()); - -// Config.ITEM_STRINGS.get().forEach((item) -> LOGGER.info("ITEM >> {}", item)); - } - - // ビルディング・ブロック・タブにサンプル・ブロック項目を追加する -// private void addCreative(BuildCreativeModeTabContentsEvent event) { -// if (event.getTabKey() == CreativeModeTabs.BUILDING_BLOCKS) { -// event.accept(EXAMPLE_BLOCK_ITEM); -// } -// } - - // SubscribeEvent を使用し、イベントバスに呼び出すメソッドを発見させることができます -// @SubscribeEvent -// public void onServerStarting(ServerStartingEvent event) { + // LOGGER.info("HELLO FROM COMMON SETUP"); + + // if (Config.LOG_DIRT_BLOCK.getAsBoolean()) { + // LOGGER.info("DIRT BLOCK >> {}", BuiltInRegistries.BLOCK.getKey(Blocks.DIRT)); + // } + + // LOGGER.info("{}{}", Config.MAGIC_NUMBER_INTRODUCTION.get(), Config.MAGIC_NUMBER.getAsInt()); + + // Config.ITEM_STRINGS.get().forEach((item) -> LOGGER.info("ITEM >> {}", item)); + // } + + // 既存のクリエイティブタブにブロックを追加する例 + // 建築ブロックタブにSAMPLE_BLOCKを追加する + // 好きなEventを購読し、その際の処理を追加できるらしい + // 購読できるEventは、net.neoforged.neoforge.eventにあるっぽい + // private void addCreative(BuildCreativeModeTabContentsEvent event) { + // if (event.getTabKey() == CreativeModeTabs.BUILDING_BLOCKS) { + // event.accept(EXAMPLE_BLOCK_ITEM); + // } + // } + + // SubscribeEventを使用し、EventBusに呼び出すメソッドを発見させることができるらしい + // @SubscribeEvent + // public void onServerStarting(ServerStartingEvent event) { // サーバー起動時に何かする -// LOGGER.info("HELLO from server starting"); -// } + // LOGGER.info("HELLO from server starting"); + // } } From 07c518e8ab4a96c957440cbda6c3f7ea59aa7191 Mon Sep 17 00:00:00 2001 From: Builder <92662457+Builder256@users.noreply.github.com> Date: Sat, 14 Mar 2026 04:49:35 +0900 Subject: [PATCH 2/7] =?UTF-8?q?refactor:=20=E6=9C=AA=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E3=81=AEimport=E5=88=86=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/portofino/polygontrainmod/PolygonTrainMod.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/portofino/polygontrainmod/PolygonTrainMod.java b/src/main/java/com/portofino/polygontrainmod/PolygonTrainMod.java index b75ca30..1676403 100644 --- a/src/main/java/com/portofino/polygontrainmod/PolygonTrainMod.java +++ b/src/main/java/com/portofino/polygontrainmod/PolygonTrainMod.java @@ -15,7 +15,6 @@ import net.neoforged.fml.common.Mod; import net.neoforged.fml.config.ModConfig; import net.neoforged.fml.ModContainer; -import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent; import net.neoforged.neoforge.registries.DeferredHolder; import net.neoforged.neoforge.registries.DeferredRegister; From 45e195939afb37a8d76d5d2297ace34ce4630c18 Mon Sep 17 00:00:00 2001 From: Builder <92662457+Builder256@users.noreply.github.com> Date: Sat, 14 Mar 2026 04:50:00 +0900 Subject: [PATCH 3/7] =?UTF-8?q?refactor:=20=E3=82=A2=E3=82=AF=E3=82=BB?= =?UTF-8?q?=E3=82=B9=E3=81=97=E3=81=AA=E3=81=84=E3=83=95=E3=82=A3=E3=83=BC?= =?UTF-8?q?=E3=83=AB=E3=83=89=E3=81=AE=E3=82=A8=E3=83=A9=E3=83=BC=E3=82=92?= =?UTF-8?q?=E9=BB=99=E3=82=89=E3=81=9B=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/portofino/polygontrainmod/PolygonTrainMod.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/portofino/polygontrainmod/PolygonTrainMod.java b/src/main/java/com/portofino/polygontrainmod/PolygonTrainMod.java index 1676403..7f79e70 100644 --- a/src/main/java/com/portofino/polygontrainmod/PolygonTrainMod.java +++ b/src/main/java/com/portofino/polygontrainmod/PolygonTrainMod.java @@ -44,6 +44,7 @@ public class PolygonTrainMod { // そのため、実際のオブジェクトの代わりにコードで使用されるためにつくられたのが、DeferredHolderだと思う // クリエイティブタブ"polygontrainmod:main_tab"を登録 + @SuppressWarnings("unused") public static final DeferredHolder MAIN_TAB = CREATIVE_MODE_TABS.register("main_tab", () -> CreativeModeTab.builder() .title(Component.translatable("itemGroup.polygontrainmod")) //CreativeModeTabのタイトルの言語キー .withTabsBefore(CreativeModeTabs.COMBAT) From fea043f3f1fc441895cc5d551361e403eb201c11 Mon Sep 17 00:00:00 2001 From: Builder <92662457+Builder256@users.noreply.github.com> Date: Sat, 14 Mar 2026 04:55:54 +0900 Subject: [PATCH 4/7] =?UTF-8?q?refactor:=20=E3=82=A2=E3=82=A4=E3=83=86?= =?UTF-8?q?=E3=83=A0=E3=82=AF=E3=83=A9=E3=82=B9=E3=81=AE=E3=82=B3=E3=83=A1?= =?UTF-8?q?=E3=83=B3=E3=83=88=E3=82=92=E6=95=B4=E5=82=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../polygontrainmod/PolygonTrainModItems.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/portofino/polygontrainmod/PolygonTrainModItems.java b/src/main/java/com/portofino/polygontrainmod/PolygonTrainModItems.java index 8a88512..4a29e45 100644 --- a/src/main/java/com/portofino/polygontrainmod/PolygonTrainModItems.java +++ b/src/main/java/com/portofino/polygontrainmod/PolygonTrainModItems.java @@ -10,12 +10,12 @@ import net.neoforged.neoforge.registries.DeferredRegister; public class PolygonTrainModItems { - - // Polygontrainmod "名前空間に登録されるアイテムを保持するために、Deferred Registerを作成する。 + // アイテムを保持するDeferredRegisterを作成し、すべてを名前空間"polygontrainmod"に登録する public static final DeferredRegister.Items ITEMS = DeferredRegister.createItems(PolygonTrainMod.MODID); - // ブロックのブロックアイテムを登録 - // インベントリに追加するにはブロックアイテムがないといけない + // BlockのBlockItemを登録 + // 1.7.10と違い、BlockItemを明示的に実装する必要がある + // 炎ブロックなど、インベントリに配置する必要のない一部のブロック以外はBlockItemの登録が必須 public static final DeferredItem TEST_AUTOMATIC_TICKET_GATE_ITEM = ITEMS.registerSimpleBlockItem( "test_automatic_ticket_gate", PolygonTrainModBlocks.TEST_AUTOMATIC_TICKET_GATE ); @@ -33,7 +33,7 @@ public class PolygonTrainModItems { public static final DeferredItem IC_CARD_TICKET = ITEMS.register("ic_card_ticket", ICCardTicketItem::new); - // id "polygontrainmod:example_id"、栄養度1、彩度2の新しい食品を作成する。 + // 栄養度1、彩度2の性質を持つ新しい食品EXAMPLE_ITEMを登録する public static final DeferredItem EXAMPLE_ITEM = ITEMS.registerSimpleItem("example_item", new Item.Properties().food(new FoodProperties.Builder() .alwaysEdible().nutrition(1).saturationModifier(2f).build())); From a83694e2dabebe3054d6f3fabdecef4504985021 Mon Sep 17 00:00:00 2001 From: Builder <92662457+Builder256@users.noreply.github.com> Date: Sat, 14 Mar 2026 04:57:37 +0900 Subject: [PATCH 5/7] =?UTF-8?q?refactor:=20=E3=83=96=E3=83=AD=E3=83=83?= =?UTF-8?q?=E3=82=AF=E3=82=AF=E3=83=A9=E3=82=B9=E3=81=AE=E3=82=B3=E3=83=A1?= =?UTF-8?q?=E3=83=B3=E3=83=88=E3=82=92=E6=95=B4=E5=82=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/portofino/polygontrainmod/PolygonTrainModBlocks.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/portofino/polygontrainmod/PolygonTrainModBlocks.java b/src/main/java/com/portofino/polygontrainmod/PolygonTrainModBlocks.java index f3982e5..149b9b5 100644 --- a/src/main/java/com/portofino/polygontrainmod/PolygonTrainModBlocks.java +++ b/src/main/java/com/portofino/polygontrainmod/PolygonTrainModBlocks.java @@ -8,8 +8,9 @@ import net.neoforged.neoforge.registries.DeferredRegister; public class PolygonTrainModBlocks { - // すべてのブロックを "polygontrainmod "名前空間に登録するために、Deferred Registerを作成する。 + // ブロックを保持するDeferredRegisterを作成し、すべてを名前空間"polygontrainmod"に登録する public static final DeferredRegister.Blocks BLOCKS = DeferredRegister.createBlocks(PolygonTrainMod.MODID); + // テスト改札機を登録 public static final DeferredBlock TEST_AUTOMATIC_TICKET_GATE = BLOCKS.register("test_automatic_ticket_gate", GateBlock::new); From ba2d5a2d10ec396a196114f0959ad17af6650871 Mon Sep 17 00:00:00 2001 From: Builder <92662457+Builder256@users.noreply.github.com> Date: Sat, 14 Mar 2026 14:15:22 +0900 Subject: [PATCH 6/7] =?UTF-8?q?refactor:=20=E3=82=AF=E3=83=A9=E3=82=A4?= =?UTF-8?q?=E3=82=A2=E3=83=B3=E3=83=88Mod=E3=82=AF=E3=83=A9=E3=82=B9?= =?UTF-8?q?=E3=81=AE=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88=E3=82=92=E6=95=B4?= =?UTF-8?q?=E5=82=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/portofino/polygontrainmod/PolygonTrainModClient.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/portofino/polygontrainmod/PolygonTrainModClient.java b/src/main/java/com/portofino/polygontrainmod/PolygonTrainModClient.java index fc0363d..6e6018b 100644 --- a/src/main/java/com/portofino/polygontrainmod/PolygonTrainModClient.java +++ b/src/main/java/com/portofino/polygontrainmod/PolygonTrainModClient.java @@ -10,9 +10,10 @@ import net.neoforged.neoforge.client.gui.ConfigurationScreen; import net.neoforged.neoforge.client.gui.IConfigScreenFactory; -// このクラスは専用サーバーではロードされません。ここからクライアント側のコードにアクセスしても安全です。 +// Modアノテーションに、dist = Dist.CLIENTを指定しているため、このクラスはクライアントサイドにのみ存在するようになるらしい @Mod(value = PolygonTrainMod.MODID, dist = Dist.CLIENT) -// EventBusSubscriber を使用すると、@SubscribeEvent でアノテーションされたクラス内のすべての静的メソッドを自動的に登録できます。 +// EventBusSubscriberを使用すると、@SubscribeEventアノテーションのあるこのクラス内のすべての静的メソッドが、 +// Modコンストラクタで登録せずとも自動的に登録されるらしい @EventBusSubscriber(modid = PolygonTrainMod.MODID, value = Dist.CLIENT) public class PolygonTrainModClient { public PolygonTrainModClient(ModContainer container) { From ad270c1ecb91bfa25c9726193a88d82aae9e1d7a Mon Sep 17 00:00:00 2001 From: Builder <92662457+Builder256@users.noreply.github.com> Date: Sun, 15 Mar 2026 17:27:42 +0900 Subject: [PATCH 7/7] =?UTF-8?q?refactor:=20=E8=AA=A4=E5=AD=97=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/portofino/polygontrainmod/PolygonTrainMod.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/portofino/polygontrainmod/PolygonTrainMod.java b/src/main/java/com/portofino/polygontrainmod/PolygonTrainMod.java index 7f79e70..b685088 100644 --- a/src/main/java/com/portofino/polygontrainmod/PolygonTrainMod.java +++ b/src/main/java/com/portofino/polygontrainmod/PolygonTrainMod.java @@ -60,7 +60,7 @@ public class PolygonTrainMod { output.accept(PolygonTrainModItems.COUPON_TICKET.get()); // ICカード乗車券をクリエイティブタブに追加 output.accept(PolygonTrainModItems.IC_CARD_TICKET.get()); - // 各種BlockののBlockItemをクリエイティブタブ追加する + // 各種BlockのBlockItemをクリエイティブタブに追加する // 今回はItemを指定しているが、Blockを直接登録した場合も、自動で対応するBlockItemを探索してやってくれるらしい output.accept(PolygonTrainModItems.TEST_AUTOMATIC_TICKET_GATE_ITEM.get()); output.accept(PolygonTrainModItems.OVERHEAD_LINE_POLE_ITEM.get()); @@ -79,7 +79,7 @@ public PolygonTrainMod(IEventBus modEventBus, ModContainer modContainer, Dist di modEventBus.addListener(PolygonTrainModRenderers::registerEntityRenderers); } - // DeferredRegisterをNeoForgeのMODEventButに登録し、DeferredRegisterに登録された各ブロックがゲームに登録されるようにする + // DeferredRegisterをNeoForgeのModEventBusに登録し、DeferredRegisterに登録された各ブロックがゲームに登録されるようにする PolygonTrainModBlocks.BLOCKS.register(modEventBus); PolygonTrainModItems.ITEMS.register(modEventBus); CREATIVE_MODE_TABS.register(modEventBus);