こんにちは、ice_soiです!
フリーランスエンジニアをしています。
以前マインクラフトのMod開発ができるように開発環境の設定をしました!
MinecraftのMod開発してみた ~開発ツールの設定編~
さあ、環境ができたのでMod開発するぞー!と思っていましたが、、、
なんだかんだで開発が進まず、のびのびになっていました。。。
ですが最近やっと青りんごの木が生えている青りんごの森Modを作ることができました!
せっかくなので今回は開発したModについてまとめていきたいと思います!
青りんごの森Modの仕様
何かを作るときはなんでもそうですが、Modを作るに当たって仕様を考える必要があります。
今回は下記のような仕様で開発しました。
- 木の種類に青りんごの木を追加
- 青りんごの木からは青りんごをドロップ
- 青りんごを食べるとバフがかかる
- 青りんごの木はクラフトができてほかの木と同じものが作れる
- クラフトしたものは「青りんごの~」という名前で見た目も新しくする
- 青りんごの木がたくさん生えている森がある
青りんごを落とす青りんごの木を追加するって感じですね。
青りんごの森Modの完成形
これが完成した青りんごの森です。
サバイバルで青りんごの木が生えている青りんごの森が生成されます。

上から見るとこんな感じです。

葉っぱを壊すとたまに青りんごをドロップします。

落ちた青りんごを食べるといろいろな効果が付きます

下記はクリエイティブモードですが、青りんごの木シリーズのアイテムをいろいろ追加しました。

上記のアイテムは青りんごの原木をクラフトして作ることができます。

また今回開発するうえで下記youtubeを参考にしました!
わかりやすく大変参考になりました!
https://www.youtube.com/watch?v=20NJipM8KZE&ab_channel=%E3%81%8A%E3%81%84%E3%82%82%2FMinecraftMod%E9%96%8B%E7%99%BA
青りんごの森Modの開発環境
開発環境は前回構築したものをそのまま使いました。
なので今回のバージョンは1.20.2になります。
青りんごの森Modなので今回はプロジェクトやクラス名をGreenApple~という名前にしています。
前回構築した環境にあったクラスやパッケージはexample~だったのでリネームしました。
またgradle.propertiesのmod_idなどもそれに合わせて修正しています。
また、バイオーム追加するに当たってterrablenderというModを入れています。
マイクラはそのままではオーバーワールドにバイオーム追加ができないようなので、それをできるようにするものです。
https://www.curseforge.com/minecraft/mc-mods/terrablender
後はGitでソース管理できるようにしています。
青りんごの森Modの解説
最終的なプロジェクトのフォルダは下記のような感じです。

ソースはGitHubにも上げてありますので良ければ参考にしてください。
https://github.com/ice-soi/GreenAppleMod/
src配下について簡単に解説します。
mainとgeneratedがあります。generatedはデータ自動生成をしたときに自動で作成されます。実装するクラスなどはmain配下にあります。
mainはjavaとresourcesの二つで構成されています。
まずjava配下ですがsrc/main/java/com/icesoi/greenapplemodまでは共通でその配下にそれぞれ分かれています。
/greenapplemod
このフォルダにはMod全体を統括するクラスが配置されています。
具体的には、Modの初期化や登録処理などを担当するクラスが含まれています。
GreenAppleMod.java など、Modのエントリーポイントとなるクラスがここにあります。
/block
このフォルダには、Modで追加されるブロックの定義や登録処理を行うクラスが含まれています。
新しいブロックの特性や挙動を記述するためのクラスがこのフォルダに配置されます。
/block/custom
ここには、Modで追加される特定のカスタムブロック(青りんごの葉や幹など)のクラスが含まれています。
それぞれのブロックに固有の挙動や特性を定義するためのクラスがこのフォルダにあります。
/datagen
データ生成を担当するクラスが含まれています。
MinecraftのModでは、レシピやルートテーブル、タグなどのデータが自動生成されますが、それを制御するためのコードがこのフォルダに配置されています。
GreenAppleDataGenerators.javaが大本で制御しており、自動生成したデータはsrc/generatedに出力されます。
/item
Modで追加される新しいアイテムの定義や登録処理を行うクラスが含まれています。
Minecraftのアイテム(ツール、食べ物、特殊なアイテムなど)を新たに追加する際、そのアイテムの特性や動作をこのフォルダ内で定義します。
青りんごの効果やクリエイトタブへの追加などを設定しています。
/tag
タグに関連する処理を行うクラスが含まれています。
マイクラではアイテムやブロックに「タグ」をつけることで、それらをグループ化し、特定の条件下で使いやすくなります。(ブロックとして置いたときやインベントリでの振る舞いなど)
このフォルダには、Modで使用されるアイテムやブロックに付与されるタグの定義が含まれており、タグに基づいた処理がゲーム内でどのように扱われるかを決定します。
/worldgen
このフォルダには、ワールド生成に関連する処理が含まれます。例えば、青りんごの木が自然生成されるロジックや配置方法を定義するクラスがここにあります。
Modがゲーム内の自然環境にどのように影響するかを制御します。
/worldgen/tree
木の成長や生成に関するクラスが配置されています。
GreenAppleTreeGrower.java のように、青りんごの木がどのように成長し、どの場所に生成されるかを管理するロジックがここに含まれています。
次にresources配下ですが、こちらはsrc/main/resourcesまでは共通でその配下にassetsとdataがあり配下でそれぞれ分かれています。
ただしデータ自動生成した場合textures以外はsrc/generatedに配置されています。
/assets/greenapplemod
このフォルダには、Modで使用するすべてのリソースが含まれています。assetsフォルダは、Modのテクスチャ、モデル、音声、言語ファイルなどのリソースを管理する場所です。
/blockstates
ブロックの状態を定義するJSONファイルが含まれています。ブロックがどのような状態を持つか(例:青りんごの木の葉がどのように見えるか、成長段階など)を管理します。
/models
Modで追加されるブロックやアイテムの3Dモデルデータが含まれています。blockとitemのサブフォルダに分かれており、それぞれブロックやアイテムの外観を定義します。
/textures
ブロックやアイテムのテクスチャ画像が含まれています。blockやitemフォルダで、それぞれ対応するオブジェクトの見た目を設定します。例えば、青りんごの葉や幹、果実のテクスチャがここに配置されます。
今回はオークの木の画像を加工して青りんごとして使っています。
/lang
言語ファイル(en_us.json など)がここに含まれます。このファイルでは、Modで追加されたアイテムやブロックの名前を多言語対応させるための翻訳が記述されています。
/data/greenapplemod
Modで使用するゲームデータが格納されています。特に、レシピやルートテーブル、ブロックのタグなど、ゲーム内の動作に直接関わる設定を管理します。
/recipes
Modで追加されるクラフトレシピを定義するJSONファイルが含まれます。例えば、青りんごを使って特定のアイテムをクラフトするレシピがここで設定されます。
/loot_tables
ブロックやモブからドロップされるアイテムを定義します。青りんごの木を壊したときに得られるアイテムなどが設定されます。
/tags
ブロックやアイテムに付与されるタグの定義が含まれます。これによって、特定のグループや条件に基づく処理が可能になります。
青りんごの森Modを開発した感想
今回は既存のアイテムなどと同じような機能を持ったアイテムなどを追加したというのもありますが、思ったよりは手軽にModが作れるんだなぁと思いました!
今回はアイテム追加からバイオームを追加するところまでおこなったので今度はもっとアイテムを増やしたりMOBを追加してみたりしようとおもいました!
また、今回苦労した点として青りんごのドロップの部分でした。
苗木と青りんごをそれぞれドロップさせるという処理でしたが苗木と青りんごのドロップ設定をそれぞれすることで実現ができました。
com.icesoi.greenapplemod.datagen.server.loot.GreenAppleBlockLootTables
// まず、createLeavesDropsで苗木をドロップさせる設定
LootTable.Builder leavesLootTable =
createLeavesDrops(GreenAppleBlocks.GREEN_APPLE_LEAVES.get(),
GreenAppleBlocks.GREEN_APPLE_SAPLING.get(),
NORMAL_LEAVES_SAPLING_CHANCES
);
leavesLootTable.withPool(LootPool.lootPool()
.setRolls(ConstantValue.exactly(1))
.add(applyExplosionDecay(GreenAppleBlocks.GREEN_APPLE_LEAVES.get(),
LootItem.lootTableItem(GreenAppleItems.GREEN_APPLE.get())
.when(LootItemRandomChanceCondition.randomChance(0.1f))))
); // 10%で青りんごをドロップ
this.add(GreenAppleBlocks.GREEN_APPLE_LEAVES.get(), leavesLootTable);まとめ
今回はオリジナルで開発した青りんごの森Modについてまとめてみました。
意外と簡単に作れたので、今度はもっと機能などを追加してみたいと思いました!
今回の記事が何かの参考になれば幸いです!
最後までお読みいただきありがとうございました。


