【MC1.12Modding】初心者研修編 - 新規Modの作成からビルドまで


# 初心者研修編リンク
- [新規Modの作成からビルドまで](https://qiita.com/Katatsumuri_Pan/items/fec8344fa51b79261381) ← here
- [早速プログラムを書いてみる](https://qiita.com/Katatsumuri_Pan/items/21f4b5f08aadec2eac17)
- [ItemとItemStackの違い](https://qiita.com/Katatsumuri_Pan/items/c5c04973e66a42451c63)
- BlockとIBlockStateとTileEntityは一緒です（大嘘）
- Modを国際化する
- デバッグを実践する
- イベント購読
- 音とか粒子とか
- ワールドとディメンションは何が違うんだ
- 「メタデータ」ってかっこいいな
- Entityを少しだけ操る
- 強敵NBT
- [メインページへ戻る](https://qiita.com/Katatsumuri_Pan/items/e3fd7fec471ee66fa17a)


# 研修の目的

**簡単なことから初めてModdingの雰囲気を知ってもらいます。**

なんて固いことはさておき、この初心者研修編は初めてModdingやる人の取っ掛かりとしてのためというのは当然ですが、名前に反して**駆け出しModderが復習としてこの記事を参照する**ためでもあります。
やり方を忘れたときはぜひ戻ってきてください。

初心者研修編はとりあえず書いてあることに従うだけで全てうまく動作します。
練習問題も100%答えが記事内に書かれています。（ネタバレ防止措置は施してあります）
つまり、Moddingに自信が無くても問題ありません。
あとは頑張るかどうかの問題です。

# この記事の内容

この記事の内容は半分ほどが[環境構築編 - とりあえず動かす（開発環境編）](https://qiita.com/Katatsumuri_Pan/items/10ef2c7ba4e95f01cdfa)と[環境構築編 - とりあえず動かす（ランチャー編）](https://qiita.com/Katatsumuri_Pan/items/706db6223bbf74807797)と、既存の内容です。
新しい話は基本的に`gradle.properties`と`mcmod.info`、`pack.mcmeta`の内容説明と、Modのメインファイルのパッケージ変更ですが、Modの作成には必須の内容です。

:::note info

記事を軽くするために、画像は大幅にトリミングしてあります。場合によっては環境構築編の方が理解しやすいこともありますので、適宜ご参照ください。

:::

# 目次

[1. 新規Modプロジェクトの作成](#1-新規modプロジェクトの作成)
[2. 色々変更してみる](#2-色々変更してみる)
[3. デバッグ環境で実行する](#3-デバッグ環境で実行する)
[4. Modをビルドする](#4-modをビルドする)


# 1. 新規Modプロジェクトの作成

まっさらな状態から、Modプロジェクトを作成します。
環境構築編で作成したプロジェクトはもう使いませんので削除してかまいません。

<details><summary>削除の仕方</summary>

シンプルにエクスプローラーからフォルダごと削除してOKです。

<font color="gray">└削除の仕方終わり</font>
</details>

手順ですが、
[1. starter.zipをダウンロードする](#1-starterzipをダウンロードする)
[2. starter.zipを展開＆リネーム](#2-starterzipを展開リネーム)
[3. Intellijでbuild.gradleを新規プロジェクトとして開く](#3-intellijでbuildgradleを新規プロジェクトとして開く)
[4. 処理が終わるまで待つ](#4-処理が終わるまで待つ)
5. `1. Setup Workspace`を実行

です。

### 1. starter.zipをダウンロードする

[GitHub: GregTechCEu / Buildscripts - Releases](https://github.com/GregTechCEu/Buildscripts/releases)
にアクセスし、一番上のバージョン（or日付）[^1]の`starter.zip`をダウンロードします。

[^1]: 画像ではv1.1.4

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/e65b69e8-d122-7b54-48d9-ab35d6a7f9b9.png)

### 2. starter.zipを展開＆リネーム

`starter.zip`を好きなところに展開しましょう。
Modding専用フォルダを新しく作り、その中に入れるのがおすすめです。

:::note warn
パス[^2]に全角文字や空白が入らない場所にしましょう[^3]。
プログラミングの基本なので覚えておきましょう。
:::

[^2]: C:ドライブからスタートして展開先までのフォルダ全て
詳細な説明は別のサイトに任せる

[^3]: 海外産のソフト（≒ほぼ全ソフト）は自国の半角アルファベットしか対応していないせいでフォルダ名やファイル名が日本語だとバグることがしばしばある

画像は`C:\modding`の中に`starter`フォルダが来るように展開しました[^4]。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/b7b5891c-190b-e9c6-9391-d3d383ee35f1.png)

[^4]: できるだけCドライブに近い方が良い
意外とパス名の長さ制限にかかることがある
~~EclipseとかEclipseとかEclipseとか~~

`starter`ではつまらないので、好きに名前を変えましょう。
`MyFirstMod`とでもしておきました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/d4deac41-ffd1-7d3c-3337-6d74915694da.png)

### 3. Intellijでbuild.gradleを新規プロジェクトとして開く

まずIntellij IDEAを起動し、`開く`または`Open`[^5]を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/c0ccb54e-7914-af98-1d1b-a74f3746db58.png)

[^5]: 日本語の時と英語の時があるのですが誰か直し方教えてください

<details><summary>起動したら勝手に前回のプロジェクトが開かれたんですが…</summary>

上のメニューバーのハンバーガーメニュー（横4[^6]本線）を押して展開し、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/d935dd17-215f-208c-53c0-011ce2b2cd6c.png)

[^6]: 一本多いな？

`開く`をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/1bf98498-d3c8-20bd-1506-b9a069137104.png)

<font color="gray">└起動したら勝手に前回のプロジェクトが開かれたんですが…終わり</font>
</details>


選択ダイアログが開くので、展開したzipの中にある`build.gradle`を選択してOKを押します。
（画像では`C:\modding\MyFirstMod\build.gradle`）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/e587cde4-1ca7-bb9c-bd95-ab5e4f3eb749.png)

開く確認ダイアログが出ますが、`プロジェクトとして開く`を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/8396974f-6252-73d2-fd84-2ec1fca0c44a.png)

<details><summary>信頼するかどうかのダイアログ</summary>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/58928da9-39e2-43d5-0ec7-cd51d03b2a44.png)
これが出たら`プロジェクトを信頼`でOKです[^7]。
Modプロジェクト作成時に毎回出るのも面倒なのでオレンジ枠で囲った`～～ のプロジェクトを信頼する`にチェックを入れて構いません。

<font color="gray">└信頼するかどうかのダイアログ終わり</font>
</details>

[^7]: チェックを入れることでそのフォルダ以下に作ったプロジェクトは全て信用してくれる

全て終わればプロジェクトが開かれるはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/f1bd3ba0-2d85-2daa-807b-809f1e3ac68f.png)


<details><summary>右下になんか出た</summary>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/317cb407-8dae-fda6-8f29-02d547ec258c.png)
これが出たら`自動`を押してOKです[^8]。
無視しても構いません。少し経つと消えます。~~そして再読み込みするまで二度と出てこない~~

<font color="gray">└右下になんか出た終わり</font>
</details>

[^8]: 説明書きによるとどうやら起動時にWindows Defenderが処理の邪魔してくるせいで重くなる！ってところを回避できるらしい
本当かは知らん

### 4. 処理が終わるまで待つ

右下の処理進行の青いゲージが無くなるまで待ちましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/40e033d0-7ccb-052d-b2a4-6756574fb7ce.png)
環境構築の時（初回）に比べて割と速いはずです。

### 5. `1. Setup Workspace`を実行

上のメニューバーの中央右、象さんマーク[^9]（Gradleタスク）をクリックして展開し、`1. Setup Workspace`にある実行ボタン（三角アイコン）[^10]をクリックして実行しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/19f01a21-893e-52f1-4b22-e99166cd955a.png)

[^9]: Gradleの公式アイコン
象を使っている理由は公式サイトには書いてなさそう
[^10]: いずれ隣のデバッグボタン（虫アイコン）も使うことになる

:::note
今回は選択済みのタスクが`1. Setup Workspace`になっているため、メニューバー自体の実行ボタンでも問題ありません。
:::

ぼちぼち時間がかかります。
~~性能良いパソコンを買おう！~~

完了しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/c0269383-5906-db12-9885-0a165b77c55c.png)
成功しているかどうかの判定としては、

- タスクに（緑の）チェックマークが付いている
- ログに`BUILD SUCCESSFUL`と書かれている
- `'setupDecompWorkspace' の実行を完了しました。 `と書かれている

の3点のうちどれかです。
個人的には緑のチェックマークが一番ぱっと見で分かりやすいですね。

（終わったら実行ビューは左のサイドバーの下から5番目、三角アイコンをクリックして閉じられます。）

# 2. 色々変更してみる

☆☆☆ **この節は新しい内容です！** ☆☆☆　やったー！

ここでは以下の3つのファイルの説明と編集方法についてを解説します。
- [`gradle.properties`](#gradleproperties) ← 必須
- [`mcmod.info`](#mcmodinfo) ← サボりがち
- [`pack.mcmeta`](#packmcmeta) ← 影薄い

なんと！まだプログラムコードは出てこないので ( 安心してください | とても残念ですね ) [^11]。

[^11]: なお設定ファイルであってもプログラムの一部である

:::note info
変更を一つ行うたびに **[3. デバッグ環境で実行する](#3-デバッグ環境で実行する)の内容を実行し、うまく動いているか確認する**ことをお勧めします。
○○を変更したときまでは正常だったけど△△をしたときから動かなくなった
→△△に原因がありそうだ
という原因究明に非常に役立ちます。

加えて、[バージョン管理（Gitローカルリポジトリ編）](https://qiita.com/Katatsumuri_Pan/items/bf544822d79e92fdf009)の内容も利用すると巻き戻しも簡単にできて良いでしょう。
:::

## `gradle.properties`

Moddingの基本設定を格納する重要ファイル[^12]です。
~~当然削除してはいけない~~
頻繁に書き換えるものでもないので、最初に編集するだけで以降は（バージョン番号以外）放置するパターンが多いです。

[^12]: より深く踏み込むなら、build.gradleに書かれたタスク内で用いるパラメータの一部を外部化したファイルである

ここでできることは：
- [Mod名の変更（必須）](#mod名の変更必須)
- [ModIDの変更（必須）](#modidの変更必須)
- [Modパッケージの変更（必須）](#modパッケージの変更必須)
- [Modのバージョンの値の変更](#modのバージョンの値の変更)
- [Modビルド時の.jarファイル名の変更](#modビルド時のjarファイル名の変更)

です。

:::note warn
この`gradle.properties`だけはただファイルを保存するだけでは動きません。
[変更の反映](#変更の反映)に書かれた操作を **`gradle.properties`を編集するたびに** 行う必要があります。
:::

### そもそも開き方は

まず画像のように、プロジェクトビューを開いた状態にしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/37db9fcc-a6da-8cd4-b333-a0c23f7fd072.png)
（`src`フォルダが展開されている必要はありません。）

<details><summary>ぷろじぇくとびゅー開き方わかんにゃい</summary>

左のサイドバーの一番上、フォルダアイコンのボタンです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/7fc07888-dedc-8843-0d44-e2ee32ed590b.png)

ツリーが閉じちゃってる方はココ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/f1bd4bc4-d087-9ee3-8969-5b13b50c82d6.png)

<font color="gray">└ぷろじぇくとびゅー開き方わかんにゃい終わり</font>
</details>

`MyFirstMod`フォルダの直下（ちょっか≠ました）にあります。
画像では真ん中あたり。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/150338e0-211b-fb65-05d8-bd7460d053e7.png)
ダブルクリックすると開けます。


### 変更の反映

`gradle.properties`だけは特別[^15]で、ファイルを保存しても変更が反映されません。
ですが、ファイルの編集画面の右の方に「象再読み込み」って感じのアイコンが現れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/b9534d74-a575-fba2-5d90-9ab45b6ffd7a.png)

[^15]: これはgradle.propertiesがGradleのタスクの設定ファイルであることが理由

これをクリックするだけで反映されます。
1行書き換えるごとに押す必要はありません。最後に一回ポチッ！です。
処理が完了しても見た目の変化はありませんが、ちゃんと完了していますので安心してください。

<details><summary>隣の×押しちゃって消えちゃったんだが</summary>

あのボタンは「内容変更したね？じゃあ再読み込み必要だね？？」とIntellijが世話を焼いて近道を出しているだけです。
本来のボタンの場所に行って押しましょう。

左のタスクバーの象アイコンからGradleビューを開き、The 再読み込み！って感じのボタンです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/3af7f1dc-b932-84a6-057f-203e6af4b7c2.png)

<font color="gray">└隣の×押しちゃって消えちゃったんだが終わり</font>
</details>


### Mod名の変更（必須）

`gradle.properties`を開くと1行目にその設定があります。
`modName`と書かれていところです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/8ea64989-d14c-a352-1aef-43fdb2fbbb66.png)

ここを自由に書き換えてください。
後からいくらでも変更が利くので深く考えすぎないでください。

:::note info
半角英数字と半角スペースだけを使うことをお勧めします。
:::

:::note warn
余計な文字（特に全角空白など）が入ると動かなくなります。
=の前後に半角スペースが1文字分だけあることを確認してください
:::

私はとりあえず`My First Mod`にしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/f0dc79c4-c35e-e410-180b-d773213cd98a.png)


### ModIDの変更（必須）

`gradle.properties`の4行目の`modId`で設定できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/3d520c30-8c16-ceef-48b1-3c9928f76308.png)

:::note alert
ModIDには<ins>半角アルファベットの**小文字**</ins>と<ins>半角数字</ins>と<ins>アンダーバー</ins>のみを使ってください。
<ins>**大文字は禁止です。**</ins>
大半のMod機能においてバグります。
:::

:::note warn
ModIDは他Modと必ず異なるものにしてください。
被ると盛大にバグります。
:::

:::note info
ModIDは一度決めてしまうと仕様上変更が非常に困難[^13]です。
ダサいものはやめておきましょう。
:::

[^13]: ModIDを変更してしまうと、既にそのModで遊んでいたワールドが大半壊れる
対策は基本「ModIDを変更しないこと」か「新ワールドで１から遊ぶ」の2つしかない
上級者を超えたModderならあるいは…？
ちなみにModPackのクエスト（アイテムが設定されてるやつ）は新規プレイでも壊れる

私は`my_first_mod`にしてみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/35953d8e-e8fa-e412-9540-56d98bafa02b.png)

下に緑の波線が引かれても問題ありません。
「タイポかもよ！？」というただのお節介です。

### Modパッケージの変更（必須）

`gradle.properties`の6行目の`modGroup`で設定できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/fe21f80e-a778-1842-e568-6a86cf2a8ec5.png)


Javaアプリのパッケージの付け方には慣習的なルールがありますが、一般人にとっては（ちょっと崩して）シンプルなルールなので心配はいりません。

ModIDと全く同じものを付ければよいです。

<details><summary>自分のドメインを持っている人</summary>

あなたは一般人ではありませんので、ちゃんとパッケージのルールに従いましょう。
ModIDの前に自分のドメインを逆順で付けるだけです。
例えばドメインが`qiita.com`なら、`com.qiita.my_mod_id`のようになります

<font color="gray">└自分のドメインを持っている人終わり</font>
</details>

<details><summary>ModIDだけでは物足りない方</summary>

（話せば長くなります…）
そもそもパッケージには、原理的にはどんな名前を付けても良いです。
ただし、他人が作ったプログラムとの重複を起こさないために命名規則が存在しています。
それが
```
<ドメインの逆順>.<アプリケーション名>
```
です。

原則はこれに従うのですが、残念ながら自分のドメインを持っている人間はごく少数ですのでこの規則に従えません。（そもそも自分のドメインとは何ぞやという人が大多数）
なので今回はドメイン部分を完全に省略してアプリケーション名のみで命名してみました。

ですが、オレオレルールで
```
<作者のユーザ名>.<アプリケーション名>
```
としてしまうのもありです。

実際拙作のBetterLineBreakは`kpan.b_line_break`と名付けてあります。
ユーザ名も略称を使っているし、ModID部分も略称を使っています。
絶対にModIDと一致させなければならないというルールは無いので、割と自由に命名できます。（実はkpanで始まるドメインが存在しないことは一応確認しています。）
ただし、以下の注意事項は参照するようにしましょう。

:::note alert
ModIDには<ins>半角アルファベットの**小文字**</ins>と<ins>半角数字</ins>と<ins>アンダーバー</ins>のみを使ってください。
<ins>**大文字は禁止です。**</ins>
Javaのパッケージの基本的な命名規則です。
:::

:::note alert
パッケージは他とかぶってはいけません。
被らない名前を付けてください。
:::

以上「ModIDだけでは物足りない方」終わり

<font color="gray">└ModIDだけでは物足りない方終わり</font>
</details>

ModIDと一致させるので、`my_first_mod`になりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/d2b018a8-2a48-4cb6-e76b-ad5111b3c0df.png)

もう1か所書き換えます。
36行目の`generateGradleTokenClass`の値の一部です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/9c3cfc1c-a8ce-3709-e8bd-68ac8e0f84ba.png)

`.Tags`の前の部分を先ほど付けたパッケージ名に置き換えてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/8a7fb5da-cdb8-f551-c81f-cd084755f229.png)


さらにもう一つやることがあります。
**Javaのクラスファイルのパッケージ移動**です。
パッケージ名を設定した場合はファイルの移動もセットで行う必要があります。

まずはクフラスファイルのある位置を見つけます。
`src`フォルダ＞`main`フォルダ＞`java`フォルダ＞`com.myname.mymodid`パッケージの中に`MyMod`というJavaのクラスファイルがあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/52c49103-5e5b-dffa-ec68-1f5ef68d8e38.png)
これをクリック1回で選択し、`Alt+Shift+V`のショートカットを実行します。
（右クリックから`リファクタリング`＞`クラスの移動…`でも構いません。）
このような画面が出ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/670dd663-a57d-10cc-d961-ce41d0c8d5ee.png)

`パッケージへ`の右の欄に先ほど自分で付けたパッケージ名を入力します。
入力が（明らかにエラーって感じの）赤い文字になりますが心配不要です[^20]。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/80534ef9-85c1-8186-8107-f14e3cf81271.png)
そして`リファクタリング`ボタンをクリック。

[^20]: まだ存在していないパッケージのためエラーとして出る
直後の確認ダイアログで自動作成が可能かつ自動作成すればエラーではなくなる

移動確認ダイアログが出ます。
`はい`でOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/e29e9518-d821-e550-34a8-aca14beedda3.png)

新しいパッケージに移動しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/276efeb7-2ac3-daae-77f0-16b831a27641.png)
古いパッケージが残っていますが、削除してかまいません（選択して`Del`キー）。

:::note info
パッケージ名を変更する際は、このように3つセットでの変更となります。
:::


### Modのバージョンの値の変更

`gradle.properties`の10行目の`modVersion`で設定できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/fabd16e9-d4af-e49e-d24e-faa72850d667.png)

この項目は必須ではありませんし、バージョン番号の付け方も憶える必要はありません。
ただ、単純に自分のModをアプデする度にこの数値を増やしていくことでかなりテンションが上がります。


<details><summary>バージョン番号の（おおよそ）正しい付け方</summary>

```
major.minor.patch
```
の順で付けます[^14]。

[^14]: buildバージョンを増やしても良い

major : メジャーバージョン。Modの中身が大きく変わり、別物になってしまったときに1増える（minorとpatchは0にリセット）。シンプルに別物のため、互換性を失うことも結構多い。
minor : マイナーバージョン。Modの中身がちょいとアップデートして機能追加したぜというときに1増える（patchは0にリセット）。このバージョンを増やすときは大抵前方互換性が失われるが、後方互換性は維持される。
patch : パッチバージョン。小さなバグ修正等をしたときに1増える。このバージョンが増えても大抵前方互換性が維持される（データのバグ修正を除く）。

~~要はマイクラ公式のようにひたすらminorの値を増やしていけば大体問題無い。~~

<font color="gray">└バージョン番号の（おおよそ）正しい付け方終わり</font>
</details>

「`.`で区切られた3つの数」という制限は全く無く、英単語1つのみとかでも普通に大丈夫です。

### Modビルド時の.jarファイル名の変更

`gradle.properties`の16行目の`modArchiveBaseName`で設定できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/27d91689-9059-4f09-09ae-8fa7d8d239eb.png)

これはModのビルドで生成される.jarファイルの名前になります。
（「ビルド」を忘れた方はこの記事の終わりに復習できます。）
生成後のファイルの名前を自分で書き換えても良いですが、面倒です。
ここで設定しておけば生成時に勝手にその名前になります。

`My First Mod`にしてみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/42430326-bc2d-ce07-897a-1f66ef46d778.png)

そのままファイル名になるので、ファイル名に使えない文字にだけ注意しましょう。



:::note info
最後に、[変更の反映](#変更の反映)は忘れていませんか？
:::

終わったらファイルを保存（Ctrl+Sのクセを付けておこう）して、閉じて構いません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/24fa0617-a6d2-0c0a-1223-f303c19db111.png)


## `mcmod.info`

Modの説明欄に表示される内容を格納するファイルです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/0c88f902-8cc5-25bf-d243-e5e4932f28b6.png)
JSON形式で書かれています（JSON形式の解説は別サイトに任せます）。
無くても動きます。

ここでできることは：
- [Mod説明文の変更](#mod説明文の変更)
- [Mod作者名の変更](#mod作者名の変更)
- [Modのロゴ画像の変更](#modのロゴ画像の変更)

です。

### そもそも開き方は

まずはプロジェクトビューを開いた状態にしてください。
（[`gradle.properties`](#gradleproperties)の項に説明が書いてあります。）

`src`フォルダ＞`main`フォルダ＞`resources`フォルダの中にあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/245bcd61-8437-e65c-65b2-e3aa6434a875.png)
ダブルクリックすると開けます。

### Mod説明文の変更

`mcmod.info`の4行目の`description`で設定できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/3a93cca2-f9c8-1464-34a7-e5a3442cb3a8.png)

ゲーム画面ではここにあたります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/542be745-2f8d-f69c-cbc4-1a85a70574d3.png)

`"`（ダブルクォーテーション）の中身を自由に書き換えてください。
`"`そのものと、タブ・改行以外の任意の文字を含むことができます。
が、<ins>なぜか全角文字が中途半端に文字化けする[^30]ので半角アルファベット推奨です。</ins>（原因不明）

[^30]: 法則性がちょっと複雑そうなので調査はまた今度

<details><summary>いやどうしても説明文改行したい</summary>

`\n`というエスケープシーケンスが改行を表します。
改行の代わりにこれを入力してください。
例：
```
    "description": "1行目\n2行目\n3行目",
```

使用頻度は少ないですが、タブは`\t`というエスケープシーケンスで表せます。

<font color="gray">└いやどうしても説明文改行したい終わり</font>
</details>

`This is my first mod!!!`にしてみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/ccda87b3-8b26-7fc0-31df-e67940085834.png)

:::note warn

`"`を間違って削除したり、ほかの部分の文字を誤って削除したり、逆に変な文字が増えていたりすると正しく動作しません。

:::

### Mod作者名の変更

ゲーム画面ではここにあたります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/d8ac1fa4-6a63-0347-af85-29858179aa3a.png)

`mcmod.info`の9行目の`authorList`で設定できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/020c1736-a5f0-40a8-3ae1-016d5fd726a6.png)

JSONのリスト記法を使います。
`[`と`]`で囲まれた中に`"`で挟んで作者の名前を書きます。
例えば、
```
    "authorList": ["Katatsumuri.Pan"],
```
のようにします。

:::note info

全角のダブルクォーテーションだと正しく動作しません。
ちゃんと半角かどうか今一度確認しましょう。

:::

これも<ins>なぜか全角文字が中途半端に文字化けする[^30]ので半角アルファベット推奨です。</ins>（原因不明）

<details><summary>作者を複数人書く</summary>

例：
```
    "authorList": ["AAA","BBB","CCC","DDD"],
```
`,`（カンマ）で区切ることで複数の要素を書きます[^31]。

[^31]: 最後の要素の後ろにカンマを付けることはできない
改行して書くときにやらかしがちな凡ミス第１位

<font color="gray">└作者を複数人書く終わり</font>
</details>

ちなみに、`mcmod.info`に書き間違いがあった場合は以下の画像のように表示されます。


### Modのロゴ画像の変更

[1. ロゴ画像の用意](#1-ロゴ画像の用意)
[2. ロゴ画像の配置](#2-ロゴ画像の配置)
[3. `mcmod.info`に書く](#3-mcmodinfoに書く)
の三段階です。

#### 1. ロゴ画像の用意

まずはロゴに使う画像を用意してください。
（解像度の制限は**たぶん**ありません ~~、知らんけど~~。）

<details><summary>用意するのが面倒な方</summary>

以下の画像でもダウンロードして使ってください。
![logo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/f2e0cea9-3639-2bbf-4b26-ed3b7e8420a8.png)

<font color="gray">└用意するのが面倒な方終わり</font>
</details>

#### 2. ロゴ画像の配置

次に、画像のファイル名を`logo.png`とリネームしてください。

そうしたら、Modプロジェクトのリソースフォルダに入れます。
場所は`src`＞`main`＞`java`＞`resources`＞<ins>`assets`</ins>＞<ins>（ModIDと同じ名前のフォルダ）</ins>とします。
ただし、下線を引いた部分のフォルダは自分で作成してください。

<details><summary>やり方パターン１</summary>

Intellij IDEA上（とエクスプローラー）でフォルダの作成と、ファイルのコピーを完結させます。

##### フォルダの作成
`resources`フォルダを右クリック＞`新規`＞`ディレクトリ`の順に操作し、フォルダ名を入力してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/349f2226-e7c5-4654-87a2-a82ed9ace18f.png)

これを２度繰り返すとフォルダ作成の完了です。

以下のように省略表記されますが、それであってます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/44cb9154-8065-ae2b-678e-ce4acf480946.png)


##### ファイルを入れる（コピー）
1. エクスプローラーで`logo.png`をコピー（`Ctrl+C`）しておきます。
1. Intellij IDEAに戻り、作成したフォルダ（=`assets.`（ModID））を選択した状態で貼り付け（`Ctrl+V`）してください。
なんとちゃんとペーストが行われます。

<font color="gray">└やり方パターン１終わり</font>
</details>

<details><summary>やり方パターン２</summary>

エクスプローラー上でフォルダの作成と、ファイルのコピーを行います。

まずはエクスプローラーで`resources`フォルダの中まで移動してください。

<details><summary>Intellij IDEAの機能で一瞬で開く方法</summary>

開きたいフォルダ（=`resources`）を右クリックし、`開く`＞`エクスプローラー`の順に選ぶとエクスプローラーで開けます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/3ab26383-10b0-ec0f-bf56-175c5ea5f3bb.png)

<font color="gray">└Intellij IDEAの機能で一瞬で開く方法終わり</font>
</details>

以降は、エクスプローラーで頑張ってフォルダの作成と`logo.png`のコピーをしてください。

<font color="gray">└やり方パターン２終わり</font>
</details>

最終的にこうなっていれば良いです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/eedd21f5-bd80-6782-df77-ac098f780a13.png)

:::note info
Intellij IDEAのプロジェクトビューでは、中身が1つしかないフォルダがあると、画像のように省略して表示されます[^32]。
:::

[^32]: これのおかげで深いツリーもある程度浅く表示できる

#### 3. `mcmod.info`に書く

`mcmod.infoの7行目を以下のように書いてください。
```
    "logoFile": "assets/（ModID）/logo.png",
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/d7856f64-8537-025d-f9bd-674b50074504.png)


うまくできていれば以下のようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/3473a098-63c3-c747-20a2-0717eec75077.png)


## `pack.mcmeta`

実はModはリソースパックを内蔵していることが多いです。
（新アイテムや新ブロックのテクスチャのため[^33]）

[^33]: Mod自体には画像や音声ファイルを保管しておく機能が無い ~~（厳密にはある）~~
逆にブロックもアイテムもGUIも何もかも、リソパに関わる一切を追加しないようなModであればリソースパック部分を削っても良いはず

:::note
いわゆるリソースパックの持つ`pack.mcmeta`と同一です。
知っている方は飛ばしてもらって構いません。
:::

ここでできることは：
- Modに内蔵されたリソースパックの説明文の変更

のみです。
~~ぶっちゃけこの部分誰も気にしてない~~

### そもそも開き方は

まずはプロジェクトビューを開いた状態にしてください。
（[`gradle.properties`](#gradleproperties)の項に説明が書いてあります。）

`src`フォルダ＞`main`フォルダ＞`resources`フォルダの中にあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/a14a84b3-b5a7-c0fa-6f06-73316354439c.png)
ダブルクリックすると開けます。


### Modに内蔵されたリソースパックの説明文の変更

`pack.mcmeta`の4行目にある`description`を編集すれば説明文を変更できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/82160424-8b95-2b54-2a2e-b11bbabadc50.png)
~~Mod内蔵リソパはリソースパックの編集画面に表示されないので、この説明文をどこで見れるのか分からない~~


# 3. デバッグ環境で実行する

うまくModを作れているかどうかをとりあえず確かめるには、Intellij IDEAで実際に動かすのが手っ取り早いです。
`2. Run Client`を実行（またはデバッグ実行）します。

上部のタスクバーの実行構成から`2. Run Client`の実行ボタン（三角アイコン）かデバッグボタン（虫アイコン）を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/42ed917b-66db-5fab-80e5-375de95f7914.png)

<details><summary>2. Run Clientが無い </summary>

`すべての構成`ををクリックして展開してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/0577f1f1-d809-5a7f-fe0b-6adcb062ab4c.png)

<font color="gray">└2. Run Clientが無い終わり</font>
</details>

<details><summary>条件が合えばもっと簡単に実行・デバッグ開始できる</summary>

最後に実行（または選択）した構成が上部のメニューバーに残ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/8873e60e-d26e-f175-b748-69b5a277eb7c.png)
既に`2. Run Client`が選ばれていれば、隣のボタンで実行・デバッグできます。

<font color="gray">└条件が合えばもっと簡単に実行・デバッグ開始できる終わり</font>
</details>

<details><summary>実行とデバッグの違い</summary>

現段階では違いはありません。（実行ボタンの方が少しだけ動作が軽い）
今後Javaのプログラムを書くようになった際には、デバッグボタンから動作させないとプログラムのデバッグができません。

<font color="gray">└実行とデバッグの違い終わり</font>
</details>

下部に実行ビューがおもむろに表示されますが、そのまま待ちましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/3e8c2f26-8059-f237-bf50-f34460f8799e.png)
よく見ると、ちゃんと`2. Run Client`が実行されています。

突然マイクラが起動すれば成功です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/e292425f-7cea-6f04-7b42-125367edee69.png)

一応Mod情報画面も見ておきましょう。
`Mods`をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/f0417c8a-154e-153a-ab4a-744e51e4ab82.png)

左側にModの一覧が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/dbc808fb-7619-60a4-33c2-272f33751990.png)
Modを探すには、スクロールバーをドラッグするか、下のテキストボックスで検索してください。

自分のModを見つけたら、クリックするとそのModの情報が右に表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/f2d81839-cb64-ce1c-d0e7-480742e32885.png)

:::note warn
この状態でマルチプレイサーバーに遊びに行くことはできません！
最悪BANされるのでやめましょう。
:::


<details><summary>実行をIntellij IDEA上から終了するとエラーが出る</summary>

正しい挙動です。

ゲームのタイトル画面からゲームを終了した場合は以下のように成功と表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/104d5808-ef27-ef0d-c00a-93ee36a6e63e.png)

上部のメニューバーの、`2. Run Client`を実行した部分にある停止ボタン（赤い四角アイコン）を押すことでもゲームを強制終了させられるのですが、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/832d2ddb-8d7c-b910-abb0-e6db5604802d.png)

その場合は以下のようにがっつりとエラーが出ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/64f9c78f-88ab-128c-19f9-77a93aba34f6.png)

特に問題は無いので、強制停止をガンガン使ってもらって構いません。
ただし、停止直前のゲーム内の処理は保存されませんのでご注意ください。

<font color="gray">└実行をIntellij IDEA上から終了するとエラーが出る終わり</font>
</details>


# 4. Modをビルドする

Intellij IDEA上で起動できても、他人と遊べません。
ちゃんとModを.jarファイルとして生成し、ランチャーに入れて起動する必要があります。

Modの.jarファイルを生成するには、`6. Build Jars`を実行します[^40]。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/38e9a39d-636f-5c99-cf7e-389f629e34ba.png)

[^40]: 「デバッグ」が有用になるのは`2. Run Client`の時のみなので、わざわざそれ以外で動作の少し重いデバッグを使う理由は無い

実行が完了したかどうかは、下の実行ビューで確認しましょう。
`成功`と出ていれば完了した上に成功しています。
（今回は失敗する要素が無いので、失敗したときの様子の画像は次の記事に載せます。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/b95e2abd-02f2-d8b9-a2ee-2769ca4feb6c.png)

生成されたファイルはプロジェクトフォルダ内の`build`＞`libs`フォルダ内にあります。
以下はIntellij IDEAでの表示です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/ba014210-6ec9-d322-3c70-fceb4d6b2c63.png)

エクスプローラーで表示したければ、生成されたファイルを右クリックして`開く`＞`エクスプローラー`の順に選択すれば、エクスプローラーが立ち上がります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/9211edb1-e9ea-4e8f-2a5f-0ea710035aa2.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835470/419f58c6-dbca-2610-3c75-7d3ea261f289.png)

3つありますが、名前が一番短いものだけを使ってください。

<details><summary>残りは何？</summary>

`6. Build Jars`の初期設定では、開発環境版Modファイル（`～～～-dev.jar`）[^41]とソースコードのみModファイル（`～～～-sources.jar`）[^42]が元のModファイルと同時に生成されます。

どちらも通常のランチャーで起動できない（クラッシュ等） ~~トラップのような~~ファイルですので間違えないでください。

[^41]: メソッド名とフィールド名が難読化がされていない（ソースコードと全く同じ名前で作成された）バージョン
逆にマイクラのランチャーで起動する際には難読化が施されている必要がある。（さらに厳密な話はまた別の機会に…）

[^42]: コンパイルされたクラスの代わりに、元のソースコードが入っているバージョン
他人のModでもこれさえ手に入れば作り直し・改造自由自在

<font color="gray">└残りは何？終わり</font>
</details>

ランチャーへの入れ方については、環境構築編の[とりあえず動かす（ランチャー編） ](https://qiita.com/Katatsumuri_Pan/items/706db6223bbf74807797)を参考にしてください。
この記事にそこまで含むと流石に多すぎるので止めました。
<font color="#AAAAAA">~~もうつかれたやりたくないてかなんだよこのきじながすぎだろ~~</font>


---
[初心者研修編 - 早速プログラムを書いてみるに続く](https://qiita.com/Katatsumuri_Pan/items/21f4b5f08aadec2eac17)

[メインページに戻る](https://qiita.com/Katatsumuri_Pan/items/e3fd7fec471ee66fa17a)