こんにちはakuto2です。
今回はmodの基礎部分の制作と、レシピの追加をやっていこうと思います。
※この情報はMinecraft 1.7.10のものなので注意してください
1.10.2と1.12.2のものは作り次第追記します。
動画で見たい方はこちらからどうぞ↓
・用語の説明
先にこの講座で出てくる用語であまり聞きなれないであろうものを解説したいと思います。
・ItemStack
アイテムやブロックをスタックした状態で管理するためのクラス。
他にもメタデータやNBTなどを管理することが出来る。
それぞれに固有情報を持たせることもでき、今後多数の場所で使うことになります。
・鉱石辞書
別のmodで追加されているが同じアイテムとして機能しているものを、システム上で同じアイテムとして認識させ、共有できるようにする機能。
多数の工業modで追加される銅や錫などがどのmodのものでも同じようにクラフトで使えるようになっているのは、鉱石辞書を利用しているからです。
・ファイルの準備
まずはプロジェクト内にファイルを作成します。
とその前に、最初プロジェクトのjavaフォルダ内にはサンプル用のmodがあるのでそれを削除しましょう。(com.example.examplemodを削除)
そしてresourcesフォルダ内にもmcmod.infoというファイルがあります。
これはmodの情報を登録するためのファイルなのですが、プログラム上でも設定できるので、個人的には削除でもいいのかなと思います。
そしたらjavaフォルダを右クリックして新規>パッケージを選択してパッケージを作成します。
このパッケージはjavaプロジェクトでのフォルダで、どのパッケージに入っているかで同じ名前のファイルを判断しています。
逆に言うと、他のmodと同じパッケージ名の中に同じファイルがあるとエラーになってしまうということです。
なので基本的に一番上の階層となるパッケージの名前は作者名.mod名など被らないようにするのがいいでしょう。(私のmodであるAkutoEngineでいうとakuto2.akutoengine)
そしたら作ったパッケージを右クリックして新規>クラスを選択してファイルを作成します。
ファイルの名前は自分がわかりやすいものにしましょう。(ブロックだったらBlock○○、アイテムだったらItem○○など)
これがmodの基盤となるクラスになるので、個人的にはmod名をファイル名にするのがいいと思います。
・Modの基盤の作成
クラスを作ったらmodの基盤となる部分を書いていきましょう。
まずはこのプロジェクトをmodとして読み込まれるようにします。
ソースコード
先ほど作ったクラスに@Modを付けます。
これがmodとして読み込まれるようになるアノテーションで、情報も設定することが出来ます。
設定できる情報の例として以下のようなものがあります。
modid:システム上でのmodの名前(必須)
name:情報として表示されるmodの名前
version:情報として表示されるmodのバージョン
他にもいろいろ設定できるので調べてみるといいかもです。
そしたらmodで追加したものを登録したりするための関数を実装いきましょう。
ソースコード
関数の名前は何でも大丈夫ですが、@EventHandlerを付ける必要があります。
そして引数に渡すイベントによって読み込まれる場所が変わります。
・FMLPreInitializationEvent
一番最初に読み込まれる
アイテムやブロックなどは基本的にここで登録する
・FMLInitializationEvent
FMLPreInitializationEventの次に読み込まれる
レシピの追加は基本的にここで行う
・FMLPostInitializationEvent
一番最後に読み込まれる
他modとの連携などは基本的にここで行う
・レシピの追加
それではmodを作るうえで必ず必要になるであろうレシピの追加をやっていきます。
・定形レシピの追加
まずは基本的なレシピの追加から。
ソースコード
完成品
レシピの追加はGameRegistryのaddRecipeという関数で行えます。
第一引数には完成品をItemStackで指定して、第二引数以降はレシピを以下のような順で指定します。
1.レシピの形をStringで指定(1~3個まで、配列でも可)
2.上で指定した文字に対応するアイテムをcharとItemStack(Item・Blockでも可)で指定(Stringで使用した文字の種類分)
これでレシピを追加することが出来ます。
バニラにあるアイテムやブロックはそれぞれItemsクラスとBlocksクラスにあります。
1のレシピの形をStringで指定が1~3個までとなっているのはこれがそのまま作業台での配置になるからです。
なので棒や感圧版のようにインベントリでも作れたり、アイテム同士の位置さえ合っていれば作れるようなレシピを作る場合は以下のようにレシピの指定部分を書くことで可能です。
ソースコード
完成品
また、レシピの中に空白を入れる場合はStringにスペースをいれる必要があります。
ソースコード
完成品
・不定形レシピの追加
続いては不定形レシピの追加です。
そもそも不定形レシピが何かというと、アイテムさえ合っていればそれらをどのようにおいても作れるレシピのことです。
バニラのレシピで言うと、染料・本・キノコシチューなどですね。
ソースコード
完成品
不定形レシピはGameRegistryのaddShapelessRecipeで追加することが出来ます。
基本的には定形レシピと同じく第一引数が完成品をItemStackで指定、第二引数以降でレシピの指定なのですが、レシピの形を指定する部分はなく、素材をItem・Block・ItemStackでそのまま指定することになります。
・かまどの製錬レシピの追加
続いては製錬レシピの追加です。
ソースコード
完成品
製錬レシピはGameRegistryのaddSmeltingで追加するこが出来ます。
第一引数が素材、第二引数が完成品、第三引数が獲得できる経験値の量になっています。
これも他と同じく完成品はItemStackで指定、素材はItem・Block・ItemStackで指定することが出来ます。
・鉱石辞書を使ったレシピの追加
続いては鉱石辞書を使ったレシピの追加です。
ソースコード
完成品
鉱石辞書を使うレシピはGameRegistryのaddRecipeに定形レシピならShapedOreRecipe、不定形レシピならShapelessOreRecipeのインスタンスを渡すことで追加できます。
レシピの指定方法は基本的に普通のものと同じですが、素材の指定に鉱石辞書名を使うことが出来ます。
鉱石辞書名は多数ありここでは書ききれないので、各々で調べてください。
・デバッグ
さて、実装が出来たら不具合がないかデバッグをしなくてはなりません。
上のほうにある緑色の再生ボタンを押すことでデバッグ用のマインクラフトが起動します。
また、コンソール部分にゲームのログが表示されるのでエラーなどがあったらこちらで確認しましょう。
マイクラが起動したら、まず作ったmodが読み込まれているか確認しましょう。
タイトルのModsボタンを押して、Mod Listの中に自分が作ったmodがあったら無事読み込まれています。
あとは、普通にワールドを作って、追加したレシピでクラフトが可能か確認しましょう。
これで自作レシピを追加することが出来ました。
次回はアイテムとブロックの追加をやっていこうと思います。
YouTubeのほうのチャンネル登録と高評価、コメントのほうもよろしくお願いいたします。
そしてブログでこういう風に解説をするのは初めてなのでぜひ改善点などがありましたら教えていただけると幸いです。
amazonの欲しいものリストも公開しています。
是非ご支援をよろしくお願いいたします→https://www.amazon.co.jp/hz/wishlist/ls/2OTP8DWRAYE1L?ref_=wl_share