[Java]MinecraftのModを作成しよう 1.14.4【入門編】

# TL;DR
・何か「**うごいている**」感のあるものを作りたい
・じゃああの人気ゲーム**MinecraftのMOD作成**をしてみよう！
・**意外と簡単**にグラフィカルなものが出来上がるので最適！
・チュートリアルを実際に作ってみよう
・もっと界隈が盛り上がってほしい(**切実**)

（この記事は一連の解説記事の導入になります）
# はじめに
皆様こんにちは！楽しくコード書いてますか？
楽しく書けている方はおめでとうございます！すばらしい！
あんまり…な方はようこそいらっしゃいました！ぜひ記事を読んで新しいワクワクを見つけていってくださいね。

これから一連の記事で言わずと知れた超人気ゲームであるMinecraftのMOD作成についてご紹介しようと思います。

<details><summary>言わずと知れてない人</summary>
立方体のブロックで構成された世界でサバイバルしたり、建物を建てたり、自由に暮らすゲーム。Mojang社開発。([公式](https://www.minecraft.net/ja-jp/about-minecraft))</details>
<details><summary>MODとは？</summary>
Modificationの略。モッド。主にパソコンゲームで用いられる改造用データのこと。日本語で改造というとやや後ろめたい印象があるかもしれないが、ユーザーも参加してゲームを盛り上げていくものとして、海外ではより盛んな文化[要出典]である。MinecraftではMODの使用が[公式に許可されている](https://www.minecraft.net/ja-jp/terms/r3/#4-minecraft-java-edition)ので安心してほしい。</details>

![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256627/61203700-d815-3380-94b8-4c35ac86b4af.png)
![キャプチャ2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256627/e0935db1-c288-dbde-7939-5cdf13f94131.png)
**様々なMODによって新しいものが増えている様子**

「**ゲームを作るのは難しそう…**」と感じる方もいるかと思いますが、実はMOD作成というのは「ゲーム上で動くものを導入すること」なので、ゲームを作るわけじゃないし**思ってるほど難しくない**です。そう身構えずにまずは触れてみるのが大事だと思います。
また、この記事では初学者に優しく書くことを心掛け丁寧に記述したつもりです(わからないところは遠慮なくご質問ください！)。

0から初めてチュートリアル的なMOD作成、実際にMinecraftに導入するところをゴールとします。一通り終了したときに、自分のつくりたいMODに向けて何をしたらいいか見通しがつくようになることが目標です。

最後に、解説に移る前に大事な点についていくつか述べておきます。
まず一つ目に、これからModdingに取り組むにあたって、**必ず自分の開発環境と参考にするサイトのMinecraft本体およびMinecraft Forge(後述)のバージョンを確認してください**。バージョンが異なれば実装も(時に大きく)異なります。残念なことに、私がここで共有できるのはそう新しくない一つのバージョンにおけるModdingの知識のみです。あなたが明確な目標を持っているのでなければ、本記事での環境に合わせることで不要なトラブルは避けられるため、これを推奨します。
二つ目として、はしごを外すようで申し訳ないですが、非常に残念なことに、現状**MinecraftのModdingに関する参考資料は決して充実しているとはいい難い**です。特に**日本語資料に関してはほとんどありません**。そのため知りたいことがなかなか見つからず苦労することもあると思います。そうした場合のTipsなどはまた別記事に書きますが、問題解決能力はエンジニアの素養でもありますので各自頑張ってみてください。そして願わくは(本記事も含め)**あなたが得た知見を是非記録として残してください！**たとえ扱うものが同じでも、あなたの言葉で焼き直すことに価値があります。それがいつか誰かの助けになります。
そして3つ目に、解説をする私自身Javaは初学者なので、言語に関して不正確な場合がありますが、その点ご了承ください。

前置きが長くなりましたが、次項からModdingをはじめていきましょう！
# 環境構築
## 環境
まずは開発環境を用意しましょう。本記事では以下のバージョンのツール群を用います。

| tool / library | version |
|:-:|:-:|
| OS | Winsows 10 Home |
| JDK | 8u212 |
| Minecraft | 1.14.4 |
| Minecraft Forge | 1.14.4 (28.1.0) |
| InteliJ IDEA | 2020.1.3 (CE) |
Minecraftのバージョンをはじめ、各々でそこそこ古いバージョンを用いていますが、これは参考記事と同じ環境で行ったためです。必要があれば(自信があれば)より新しいバージョンを利用しても構いませんが、互換性の問題は各自で対処してください。また、以降の記述が一部または全部当てはまらない前提で記事をご覧ください。

## JDK (Java Development Kit)
Minecraft(Java edition)はJavaで動いているため、Javaの開発環境が必要です。
規約に同意したうえで[こちらから](https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html)ダウンロードします。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256627/24cd4580-ede8-0aae-8be0-392bafccc776.png)
(かなり下の方です)

ただし、ダウンロードには**Oracleプロファイル(アカウント)が必要**ですので、ない場合は(というか多分ないので)作ります。~~めんｄ~~
登録の際に会社名や部署の入力を求められますが、学生の場合、部署・役職名には「学生」、会社名には学校名、住所には学校の住所を用いればよいでしょう。

ダウンロードしたexeを実行してインストールします。

## InteliJ IDEA
次に統合開発環境を入手します。
規約に同意したうえで[こちらから](https://www.jetbrains.com/idea/download/)ダウンロードします。![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256627/0d590eba-ddfb-9635-bfd9-6a3ed8a6fc09.png)

ダウンロードしたexeを実行してインストールします。
再度インストールするのが手間なので細かい画面を出せませんが(すみません)、基本的に何も変更する必要はありません。
初回起動時に初期設定画面が出ますが、こちらも適当で大丈夫です。機能改善のためのデータ提供なんかは切っておいてもよいでしょう。

また、デフォルトで言語が英語なので、必要に応じて日本語化を行いましょう(→[参考記事](https://qiita.com/daigoro7/items/00819e5686f6c4d682f8))。以降は日本語化済みとして話を進めさせてもらいます。


## Minecraft Forge MDK
最後に、MinecraftのMod界隈においてデファクトスタンダードな前提Mod、Minecraft ForgeのDeveloping Kitを入手します。ForgeはModの開発および導入に際して用いる様々な機能を、包括的に提供するAPIです。
規約に同意したうえで[こちらから](https://files.minecraftforge.net/maven/net/minecraftforge/forge/index_1.14.4.html)ダウンロードします。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256627/c435ed87-467f-221a-f324-df285f13bf3f.png)
多分Recommendedでもいい(というかそのほうがいい)と思うけれど、前述の通り参考記事にバージョンを合わせます。下部のShow all Versionsクリックで展開します。
![キャプチャ2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256627/960f38aa-a9eb-25bb-2686-26ca24a0a9af.png)
該当のMdkをダウンロードします。ダウンロードしたZipファイルは展開しておきましょう。

任意の場所にプロジェクトフォルダを作成します(例えば、 `D:\projects\mc_example_mod` 、以降必要に応じてパスは読み替えてください)。
先ほど展開したForgeのフォルダから、プロジェクトフォルダに以下の項目をコピーします。(展開したフォルダごとコピー、あるいはリネームしてそのまま用いてもよいです。ここではREADMEなどを除きました。)

```
D:\projects\mc_example_mod
　├ build.gradle
　├ gradlew
　├ gradlew.bat
　├ gradle
　│　└ wrapper
　│　　　└ gradle-wrapper.jar
　│　　　└ gradle-wrapper.properties
　└ src
　 　└ main
　 　　　├ java
　 　　　│  └ com
　 　　　│     └ example
　 　　　│        └ examplemod
　 　　　│           └ ExampleMod.java
　 　　　└ resources
　 　　　   ├ META-INF
　 　　　   │   └ mods.toml
　 　　　   └ pack.mcmeta
```

## 実行構成
IntelliJ IDEA向けの実行構成を作成します。PowerShellを起動し、プロジェクトディレクトリに移動して以下のコマンドを実行しましょう。

```
PS D:\projects\mc_example_mod> .\gradlew genIntellijRuns
```

BUILD SUCCESSFULが表示されたら完了です。結構時間がかかるので気長に待ちましょう。

## Gradle プロジェクトのインポート
InteliJを起動して「開く」よりプロジェクトディレクトリを開きます。
右下のポップアップ通知あるいは下部イベントログに「Gradleプロジェクトのインポート」を促されると思いますので、これをクリックします。
<details><summary>通知を見失ったら</summary>
ctrl+shift+"a" でアクションの検索を開き、「Gradleプロジェクトのインポート」を検索して選択してください。</details>

開いたウィンドウで特に変更せず「OK」をクリック。インポートが開始されますので待ちましょう。
finishedが表示されインポートが完了したら、画面右側にGradleが表示されていると思います。

## 起動
Gradleメニューから `mc_example_mod\Tasks\fg_runs\runClient` を右クリック->実行で、ついに見慣れたMinecraftの画面…ではなくデバッグ用に色々表示されてるMinecraftが起動します。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256627/28834cf7-3694-a5a9-6efb-d1e1c83d0217.png)
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256627/d2f13cc9-5f77-c671-74fa-f9e5d183c534.png)
![キャプチャ2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256627/d0bb67bc-cf89-abaa-94ff-880dffaada82.png)


**おめでとうございます！！これであなたも立派なModderです！**

# まとめ
まずは事前準備として開発環境の準備を紹介しました。いよいよMod作成を進めていきますが、すべて書いていくと記事が長くなりすぎるので、トピックごとに別記事とします。順次各記事にリンクをつなげていくので、一つずつ順番に読んでいただけると幸いです。

# 余談
<details><summary>折り畳み</summary><div>
実は以前(たしか1.7とかの頃)にもModdingに挑戦したことがありましたが、その時はあえなく挫折。時はたち何かやりたいなーという気分でいたところに、[参考記事](https://qiita.com/Hiroya_W/items/2af8fcacab5feaf880b6)に出会ったことで再び挑戦する運びとなりました。とても丁寧に書かれていたおかげで今回は挫折せずに基礎的内容を学習することができました。本当にありがとうございます。
さて写経でできる基礎を超えて、いざ自分のやりたいことに手をだそうとしたら、チュートリアルは見つからず参考になりそうな記事も…。しかも気付いたらマイクラの非公式日本フォーラムが閉鎖しているではありませんか。当時マイクラキッズだった自分としては非常にショックでした。Mod製作者はもともとせまいコミュニティではあったと思いますが、フォーラムなき今余計に界隈全体としての活気が感じられず寂しい気持ちでした。
だからこそ自分がとおもい、気合を入れて本記事を書いています。一人でもこれを読んで興味を持つ人がいれば幸いです。
Modを完成させる自信は正直ないですが、しばらくあれこれ遊んでみて、あわよくば完成したModを公開してみたいなぁなどと思っております。
</div></details>

# 参考記事
[Minecraft 1.14.4 Forge Modの作成 その1 【開発環境の準備 IntelliJ IDEA】](https://qiita.com/Hiroya_W/items/f38089724d9358d1668d)

# 各解説目次
【入門編】←ｲﾏｺｺ
[0. 基本ファイル](https://qiita.com/koteko/items/0022f3819302aaa46b7d)
[1. アイテムの追加](https://qiita.com/koteko/items/76910dbf9eb126bdfdf9)
[2. ブロックの追加](https://qiita.com/koteko/items/c904b3bfdd90f0b9a98a)
[3. クリエイティブタブの追加](https://qiita.com/koteko/items/1d7a7fb2ff98bebce939)
[4. ツールの追加](https://qiita.com/koteko/items/0c3a73d1ed299cfbde02)
[5. 防具の追加](https://qiita.com/koteko/items/34e6cb63288cd30571b5)
[6. レシピの追加](https://qiita.com/koteko/items/4e6f4e25db43907770d9)
[7. 進捗の追加](https://qiita.com/koteko/items/43c02b25b39e6a2a061d)
[8. 鉱石の追加と生成](https://qiita.com/koteko/items/f17d723337ddf7d5dbd4)
[9. 木の追加と生成](https://qiita.com/koteko/items/aebfc47cf73d7e49baa6)
[99. Modの出力](https://qiita.com/koteko/items/cbcfe448def02c3413b9)
[【番外編】](https://qiita.com/koteko/items/3ffb94e22f2d72eb260d)

<details><summary>~~追加予定の解説~~</summary><div>
~~・ 食べ物の追加
・ タグの追加(分離)
・ 特徴の追加(分離)
・ Configの追加~~
</div></details>
→ **1.14.4の記事は区切りとして、1.16.1の解説記事を書く予定です。**