はじめに
Minecraft 1.20 がリリースされて数か月たった。Forge自体は、1.20.1に対応しているものの開発に関する日本語ドキュメントはほぼない。1.19.4は見つかるがそのあたりが最新?そのため、とっかかりとしても備忘録としてもここに書き記そうと思う。
英語が読めるなら(or翻訳しながらでも読む気があるなら)、Forge Forumsのドキュメントを参照されたい。
環境
開発環境は、この記事ではIntelliJ IDEAを使用する。特にこだわりはないのでEclipseでもVS Codeでもよいとは思う。
IntelliJ IDEAを使用する目的は、「Minecraft Development」というプラグインがサードパーティ製ではあるが存在するため。すべてをちゃんと構成してビルドすれば動くので好みで良いだろう。
動作環境
- Windows 10 Home 22H2
- InteliJ IDEA 2023.2 (Community Edition)
- Minecraft Development
- Minecraft 1.20.1
- Forge 47.1.0
プロジェクトの作成
左のGeneratorsで「Minecraft」を選択すると各種設定が出てくる。
Platform Typeを「Mod」とし、MinecraftとForgeのVersionは作りたいものに合わせるといいだろう。
ライセンスは、modを公開するときに考えればよい。
Build System PropertiesのGroup IDはユニークIDを入れるところ。ドメインを保有しているならJavaのpackageと同じようにドメインの逆順。なければ自身のメールアドレスあたりからトップレベルパッケージ名を決める。公式フォーラムも参照するとよいだろう。
「Create」を押下することでプロジェクトが作成される。
動作の確認
右側の「Gradle」のメニューから、「forgegradle runs」→「runClient」を選択することで、コードのModが反映された状態のMinecraftが起動する。
起動後は、チートモードをONにしたうえでワールドを作成してみるとよいだろう。
初期生成のコードでは、建築ブロックに「example_block」が追加され、
新規タブにexample_itemが追加されている。
サンプルプログラム
ひとまず、アイテムとブロックを追加してみよう。「TNT MODDERS」のサイトが比較的新しいもの(1.19.4)の中でそろっているので参考にさせていただいた。ただし、1.20.xになり構文が変更となっている箇所があるので注意すること。
ファイル構成はほぼ同一であるが、ファイル名、変数名は変更している。本格的に作成する際は名前空間等を変更すること。
以下に差分を列挙する。
SampleProject.java
Eventsで定義しているstatic methodが呼ばれていないように見えるので、registarするようにする。
modEventBus.addListener(TestEvents::creativeTabsBuildEvent);
TestEvents.java
CreativeModeTabEvent.BuildContents、getTab()から変更されているため変更する。(詳細)
@SubscribeEvent
public static void creativeTabsBuildEvent (BuildCreativeModeTabContentsEvent event) {
if ( event.getTabKey () == CreativeModeTabs.BUILDING_BLOCKS ) {
event.accept(TestItems.SAMPLE_ITEM);
} else if (event.getTabKey() == CreativeModeTabs.REDSTONE_BLOCKS) {
event.accept(TestBlocks.SAMPLE_BLOCK);
}
}
TestBlocks.java
MaterialがBlockプロパティから削除されたので変更する。
public static final RegistryObject<Block> SAMPLE_BLOCK
= BLOCKS.register("sample_block", () ->
new Block(BlockBehaviour.Properties.of().lightLevel(value -> 15)));
動作確認
右側の「Gradle」のメニューから、「forgegradle runs」→「runData」でリソースjsonの作成をしたのち、「runClient」でminecraftを起動する。
ちゃんと光源としての機能がついている。
コメント