初心者研修編リンク
- 新規Modの作成からビルドまで ← here
- 早速プログラムを書いてみる
- ItemとItemStackの違い
- BlockとIBlockStateとTileEntityは一緒です(大嘘)
- Modを国際化する
- デバッグを実践する
- イベント購読
- 音とか粒子とか
- ワールドとディメンションは何が違うんだ
- 「メタデータ」ってかっこいいな
- Entityを少しだけ操る
- 強敵NBT
- メインページへ戻る
研修の目的
簡単なことから初めてModdingの雰囲気を知ってもらいます。
なんて固いことはさておき、この初心者研修編は初めてModdingやる人の取っ掛かりとしてのためというのは当然ですが、名前に反して駆け出しModderが復習としてこの記事を参照するためでもあります。
やり方を忘れたときはぜひ戻ってきてください。
初心者研修編はとりあえず書いてあることに従うだけで全てうまく動作します。
練習問題も100%答えが記事内に書かれています。(ネタバレ防止措置は施してあります)
つまり、Moddingに自信が無くても問題ありません。
あとは頑張るかどうかの問題です。
この記事の内容
この記事の内容は半分ほどが環境構築編 - とりあえず動かす(開発環境編)と環境構築編 - とりあえず動かす(ランチャー編)と、既存の内容です。
新しい話は基本的にgradle.properties
とmcmod.info
、pack.mcmeta
の内容説明と、Modのメインファイルのパッケージ変更ですが、Modの作成には必須の内容です。
記事を軽くするために、画像は大幅にトリミングしてあります。場合によっては環境構築編の方が理解しやすいこともありますので、適宜ご参照ください。
目次
1. 新規Modプロジェクトの作成
2. 色々変更してみる
3. デバッグ環境で実行する
4. Modをビルドする
1. 新規Modプロジェクトの作成
まっさらな状態から、Modプロジェクトを作成します。
環境構築編で作成したプロジェクトはもう使いませんので削除してかまいません。
削除の仕方
シンプルにエクスプローラーからフォルダごと削除してOKです。
└削除の仕方終わり
手順ですが、
1. starter.zipをダウンロードする
2. starter.zipを展開&リネーム
3. Intellijでbuild.gradleを新規プロジェクトとして開く
4. 処理が終わるまで待つ
5. 1. Setup Workspace
を実行
です。
1. starter.zipをダウンロードする
GitHub: GregTechCEu / Buildscripts - Releases
にアクセスし、一番上のバージョン(or日付)1のstarter.zip
をダウンロードします。
2. starter.zipを展開&リネーム
starter.zip
を好きなところに展開しましょう。
Modding専用フォルダを新しく作り、その中に入れるのがおすすめです。
画像はC:\modding
の中にstarter
フォルダが来るように展開しました4。
starter
ではつまらないので、好きに名前を変えましょう。
MyFirstMod
とでもしておきました。
3. Intellijでbuild.gradleを新規プロジェクトとして開く
まずIntellij IDEAを起動し、開く
またはOpen
5を選択します。
選択ダイアログが開くので、展開したzipの中にあるbuild.gradle
を選択してOKを押します。
(画像ではC:\modding\MyFirstMod\build.gradle
)
開く確認ダイアログが出ますが、プロジェクトとして開く
を選択します。
信頼するかどうかのダイアログ
これが出たらプロジェクトを信頼
でOKです7。
Modプロジェクト作成時に毎回出るのも面倒なのでオレンジ枠で囲った~~ のプロジェクトを信頼する
にチェックを入れて構いません。
└信頼するかどうかのダイアログ終わり
4. 処理が終わるまで待つ
右下の処理進行の青いゲージが無くなるまで待ちましょう。
環境構築の時(初回)に比べて割と速いはずです。
5. 1. Setup Workspace
を実行
上のメニューバーの中央右、象さんマーク9(Gradleタスク)をクリックして展開し、1. Setup Workspace
にある実行ボタン(三角アイコン)10をクリックして実行しましょう。
今回は選択済みのタスクが1. Setup Workspace
になっているため、メニューバー自体の実行ボタンでも問題ありません。
ぼちぼち時間がかかります。
性能良いパソコンを買おう!
- タスクに(緑の)チェックマークが付いている
- ログに
BUILD SUCCESSFUL
と書かれている -
'setupDecompWorkspace' の実行を完了しました。
と書かれている
の3点のうちどれかです。
個人的には緑のチェックマークが一番ぱっと見で分かりやすいですね。
(終わったら実行ビューは左のサイドバーの下から5番目、三角アイコンをクリックして閉じられます。)
2. 色々変更してみる
☆☆☆ この節は新しい内容です! ☆☆☆ やったー!
ここでは以下の3つのファイルの説明と編集方法についてを解説します。
-
gradle.properties
← 必須 -
mcmod.info
← サボりがち -
pack.mcmeta
← 影薄い
なんと!まだプログラムコードは出てこないので ( 安心してください | とても残念ですね ) 11。
変更を一つ行うたびに 3. デバッグ環境で実行するの内容を実行し、うまく動いているか確認することをお勧めします。
○○を変更したときまでは正常だったけど△△をしたときから動かなくなった
→△△に原因がありそうだ
という原因究明に非常に役立ちます。
加えて、バージョン管理(Gitローカルリポジトリ編)の内容も利用すると巻き戻しも簡単にできて良いでしょう。
gradle.properties
Moddingの基本設定を格納する重要ファイル12です。
当然削除してはいけない
頻繁に書き換えるものでもないので、最初に編集するだけで以降は(バージョン番号以外)放置するパターンが多いです。
ここでできることは:
です。
このgradle.properties
だけはただファイルを保存するだけでは動きません。
変更の反映に書かれた操作を gradle.properties
を編集するたびに 行う必要があります。
そもそも開き方は
まず画像のように、プロジェクトビューを開いた状態にしてください。
(src
フォルダが展開されている必要はありません。)
MyFirstMod
フォルダの直下(ちょっか≠ました)にあります。
画像では真ん中あたり。
ダブルクリックすると開けます。
変更の反映
gradle.properties
だけは特別13で、ファイルを保存しても変更が反映されません。
ですが、ファイルの編集画面の右の方に「象再読み込み」って感じのアイコンが現れます。
これをクリックするだけで反映されます。
1行書き換えるごとに押す必要はありません。最後に一回ポチッ!です。
処理が完了しても見た目の変化はありませんが、ちゃんと完了していますので安心してください。
隣の×押しちゃって消えちゃったんだが
あのボタンは「内容変更したね?じゃあ再読み込み必要だね??」とIntellijが世話を焼いて近道を出しているだけです。
本来のボタンの場所に行って押しましょう。
左のタスクバーの象アイコンからGradleビューを開き、The 再読み込み!って感じのボタンです。
└隣の×押しちゃって消えちゃったんだが終わり
Mod名の変更(必須)
gradle.properties
を開くと1行目にその設定があります。
modName
と書かれていところです。
ここを自由に書き換えてください。
後からいくらでも変更が利くので深く考えすぎないでください。
半角英数字と半角スペースだけを使うことをお勧めします。
余計な文字(特に全角空白など)が入ると動かなくなります。
=の前後に半角スペースが1文字分だけあることを確認してください
ModIDの変更(必須)
gradle.properties
の4行目のmodId
で設定できます。
ModIDには半角アルファベットの小文字と半角数字とアンダーバーのみを使ってください。
大文字は禁止です。
大半のMod機能においてバグります。
ModIDは他Modと必ず異なるものにしてください。
被ると盛大にバグります。
ModIDは一度決めてしまうと仕様上変更が非常に困難14です。
ダサいものはやめておきましょう。
下に緑の波線が引かれても問題ありません。
「タイポかもよ!?」というただのお節介です。
Modパッケージの変更(必須)
gradle.properties
の6行目のmodGroup
で設定できます。
Javaアプリのパッケージの付け方には慣習的なルールがありますが、一般人にとっては(ちょっと崩して)シンプルなルールなので心配はいりません。
ModIDと全く同じものを付ければよいです。
自分のドメインを持っている人
あなたは一般人ではありませんので、ちゃんとパッケージのルールに従いましょう。
ModIDの前に自分のドメインを逆順で付けるだけです。
例えばドメインがqiita.com
なら、com.qiita.my_mod_id
のようになります
└自分のドメインを持っている人終わり
ModIDだけでは物足りない方
(話せば長くなります…)
そもそもパッケージには、原理的にはどんな名前を付けても良いです。
ただし、他人が作ったプログラムとの重複を起こさないために命名規則が存在しています。
それが
<ドメインの逆順>.<アプリケーション名>
です。
原則はこれに従うのですが、残念ながら自分のドメインを持っている人間はごく少数ですのでこの規則に従えません。(そもそも自分のドメインとは何ぞやという人が大多数)
なので今回はドメイン部分を完全に省略してアプリケーション名のみで命名してみました。
ですが、オレオレルールで
<作者のユーザ名>.<アプリケーション名>
としてしまうのもありです。
実際拙作のBetterLineBreakはkpan.b_line_break
と名付けてあります。
ユーザ名も略称を使っているし、ModID部分も略称を使っています。
絶対にModIDと一致させなければならないというルールは無いので、割と自由に命名できます。(実はkpanで始まるドメインが存在しないことは一応確認しています。)
ただし、以下の注意事項は参照するようにしましょう。
ModIDには半角アルファベットの小文字と半角数字とアンダーバーのみを使ってください。
大文字は禁止です。
Javaのパッケージの基本的な命名規則です。
パッケージは他とかぶってはいけません。
被らない名前を付けてください。
以上「ModIDだけでは物足りない方」終わり
└ModIDだけでは物足りない方終わり
ModIDと一致させるので、my_first_mod
になりました。
もう1か所書き換えます。
36行目のgenerateGradleTokenClass
の値の一部です。
.Tags
の前の部分を先ほど付けたパッケージ名に置き換えてください。
さらにもう一つやることがあります。
Javaのクラスファイルのパッケージ移動です。
パッケージ名を設定した場合はファイルの移動もセットで行う必要があります。
まずはクフラスファイルのある位置を見つけます。
src
フォルダ>main
フォルダ>java
フォルダ>com.myname.mymodid
パッケージの中にMyMod
というJavaのクラスファイルがあります。
これをクリック1回で選択し、Alt+Shift+V
のショートカットを実行します。
(右クリックからリファクタリング
>クラスの移動…
でも構いません。)
このような画面が出ます。
パッケージへ
の右の欄に先ほど自分で付けたパッケージ名を入力します。
入力が(明らかにエラーって感じの)赤い文字になりますが心配不要です15。
そしてリファクタリング
ボタンをクリック。
新しいパッケージに移動しました。
古いパッケージが残っていますが、削除してかまいません(選択してDel
キー)。
パッケージ名を変更する際は、このように3つセットでの変更となります。
Modのバージョンの値の変更
gradle.properties
の10行目のmodVersion
で設定できます。
この項目は必須ではありませんし、バージョン番号の付け方も憶える必要はありません。
ただ、単純に自分のModをアプデする度にこの数値を増やしていくことでかなりテンションが上がります。
バージョン番号の(おおよそ)正しい付け方
major.minor.patch
の順で付けます16。
major : メジャーバージョン。Modの中身が大きく変わり、別物になってしまったときに1増える(minorとpatchは0にリセット)。シンプルに別物のため、互換性を失うことも結構多い。
minor : マイナーバージョン。Modの中身がちょいとアップデートして機能追加したぜというときに1増える(patchは0にリセット)。このバージョンを増やすときは大抵前方互換性が失われるが、後方互換性は維持される。
patch : パッチバージョン。小さなバグ修正等をしたときに1増える。このバージョンが増えても大抵前方互換性が維持される(データのバグ修正を除く)。
要はマイクラ公式のようにひたすらminorの値を増やしていけば大体問題無い。
└バージョン番号の(おおよそ)正しい付け方終わり
「.
で区切られた3つの数」という制限は全く無く、英単語1つのみとかでも普通に大丈夫です。
Modビルド時の.jarファイル名の変更
gradle.properties
の16行目のmodArchiveBaseName
で設定できます。
これはModのビルドで生成される.jarファイルの名前になります。
(「ビルド」を忘れた方はこの記事の終わりに復習できます。)
生成後のファイルの名前を自分で書き換えても良いですが、面倒です。
ここで設定しておけば生成時に勝手にその名前になります。
そのままファイル名になるので、ファイル名に使えない文字にだけ注意しましょう。
最後に、変更の反映は忘れていませんか?
終わったらファイルを保存(Ctrl+Sのクセを付けておこう)して、閉じて構いません。
mcmod.info
Modの説明欄に表示される内容を格納するファイルです。
JSON形式で書かれています(JSON形式の解説は別サイトに任せます)。
無くても動きます。
ここでできることは:
です。
そもそも開き方は
まずはプロジェクトビューを開いた状態にしてください。
(gradle.properties
の項に説明が書いてあります。)
src
フォルダ>main
フォルダ>resources
フォルダの中にあります。
ダブルクリックすると開けます。
Mod説明文の変更
mcmod.info
の4行目のdescription
で設定できます。
"
(ダブルクォーテーション)の中身を自由に書き換えてください。
"
そのものと、タブ・改行以外の任意の文字を含むことができます。
が、なぜか全角文字が中途半端に文字化けする17ので半角アルファベット推奨です。(原因不明)
いやどうしても説明文改行したい
\n
というエスケープシーケンスが改行を表します。
改行の代わりにこれを入力してください。
例:
"description": "1行目\n2行目\n3行目",
使用頻度は少ないですが、タブは\t
というエスケープシーケンスで表せます。
└いやどうしても説明文改行したい終わり
This is my first mod!!!
にしてみました。
"
を間違って削除したり、ほかの部分の文字を誤って削除したり、逆に変な文字が増えていたりすると正しく動作しません。
Mod作者名の変更
mcmod.info
の9行目のauthorList
で設定できます。
JSONのリスト記法を使います。
[
と]
で囲まれた中に"
で挟んで作者の名前を書きます。
例えば、
"authorList": ["Katatsumuri.Pan"],
のようにします。
全角のダブルクォーテーションだと正しく動作しません。
ちゃんと半角かどうか今一度確認しましょう。
これもなぜか全角文字が中途半端に文字化けする17ので半角アルファベット推奨です。(原因不明)
ちなみに、mcmod.info
に書き間違いがあった場合は以下の画像のように表示されます。
Modのロゴ画像の変更
1. ロゴ画像の用意
2. ロゴ画像の配置
3. mcmod.info
に書く
の三段階です。
1. ロゴ画像の用意
まずはロゴに使う画像を用意してください。
(解像度の制限はたぶんありません 、知らんけど。)
2. ロゴ画像の配置
次に、画像のファイル名をlogo.png
とリネームしてください。
そうしたら、Modプロジェクトのリソースフォルダに入れます。
場所はsrc
>main
>java
>resources
>assets
>(ModIDと同じ名前のフォルダ)とします。
ただし、下線を引いた部分のフォルダは自分で作成してください。
やり方パターン1
Intellij IDEA上(とエクスプローラー)でフォルダの作成と、ファイルのコピーを完結させます。
フォルダの作成
resources
フォルダを右クリック>新規
>ディレクトリ
の順に操作し、フォルダ名を入力してください。
これを2度繰り返すとフォルダ作成の完了です。
ファイルを入れる(コピー)
- エクスプローラーで
logo.png
をコピー(Ctrl+C
)しておきます。 - Intellij IDEAに戻り、作成したフォルダ(=
assets.
(ModID))を選択した状態で貼り付け(Ctrl+V
)してください。
なんとちゃんとペーストが行われます。
└やり方パターン1終わり
やり方パターン2
エクスプローラー上でフォルダの作成と、ファイルのコピーを行います。
まずはエクスプローラーでresources
フォルダの中まで移動してください。
Intellij IDEAの機能で一瞬で開く方法
開きたいフォルダ(=resources
)を右クリックし、開く
>エクスプローラー
の順に選ぶとエクスプローラーで開けます。
└Intellij IDEAの機能で一瞬で開く方法終わり
以降は、エクスプローラーで頑張ってフォルダの作成とlogo.png
のコピーをしてください。
└やり方パターン2終わり
Intellij IDEAのプロジェクトビューでは、中身が1つしかないフォルダがあると、画像のように省略して表示されます19。
3. mcmod.info
に書く
`mcmod.infoの7行目を以下のように書いてください。
"logoFile": "assets/(ModID)/logo.png",
pack.mcmeta
実はModはリソースパックを内蔵していることが多いです。
(新アイテムや新ブロックのテクスチャのため20)
いわゆるリソースパックの持つpack.mcmeta
と同一です。
知っている方は飛ばしてもらって構いません。
ここでできることは:
- Modに内蔵されたリソースパックの説明文の変更
のみです。
ぶっちゃけこの部分誰も気にしてない
そもそも開き方は
まずはプロジェクトビューを開いた状態にしてください。
(gradle.properties
の項に説明が書いてあります。)
src
フォルダ>main
フォルダ>resources
フォルダの中にあります。
ダブルクリックすると開けます。
Modに内蔵されたリソースパックの説明文の変更
pack.mcmeta
の4行目にあるdescription
を編集すれば説明文を変更できます。
Mod内蔵リソパはリソースパックの編集画面に表示されないので、この説明文をどこで見れるのか分からない
3. デバッグ環境で実行する
うまくModを作れているかどうかをとりあえず確かめるには、Intellij IDEAで実際に動かすのが手っ取り早いです。
2. Run Client
を実行(またはデバッグ実行)します。
上部のタスクバーの実行構成から2. Run Client
の実行ボタン(三角アイコン)かデバッグボタン(虫アイコン)を押します。
条件が合えばもっと簡単に実行・デバッグ開始できる
最後に実行(または選択)した構成が上部のメニューバーに残ります。
既に2. Run Client
が選ばれていれば、隣のボタンで実行・デバッグできます。
└条件が合えばもっと簡単に実行・デバッグ開始できる終わり
実行とデバッグの違い
現段階では違いはありません。(実行ボタンの方が少しだけ動作が軽い)
今後Javaのプログラムを書くようになった際には、デバッグボタンから動作させないとプログラムのデバッグができません。
└実行とデバッグの違い終わり
下部に実行ビューがおもむろに表示されますが、そのまま待ちましょう。
よく見ると、ちゃんと2. Run Client
が実行されています。
一応Mod情報画面も見ておきましょう。
Mods
をクリックします。
左側にModの一覧が表示されます。
Modを探すには、スクロールバーをドラッグするか、下のテキストボックスで検索してください。
自分のModを見つけたら、クリックするとそのModの情報が右に表示されます。
この状態でマルチプレイサーバーに遊びに行くことはできません!
最悪BANされるのでやめましょう。
実行をIntellij IDEA上から終了するとエラーが出る
正しい挙動です。
ゲームのタイトル画面からゲームを終了した場合は以下のように成功と表示されます。
上部のメニューバーの、2. Run Client
を実行した部分にある停止ボタン(赤い四角アイコン)を押すことでもゲームを強制終了させられるのですが、
特に問題は無いので、強制停止をガンガン使ってもらって構いません。
ただし、停止直前のゲーム内の処理は保存されませんのでご注意ください。
└実行をIntellij IDEA上から終了するとエラーが出る終わり
4. Modをビルドする
Intellij IDEA上で起動できても、他人と遊べません。
ちゃんとModを.jarファイルとして生成し、ランチャーに入れて起動する必要があります。
Modの.jarファイルを生成するには、6. Build Jars
を実行します21。
実行が完了したかどうかは、下の実行ビューで確認しましょう。
成功
と出ていれば完了した上に成功しています。
(今回は失敗する要素が無いので、失敗したときの様子の画像は次の記事に載せます。)
生成されたファイルはプロジェクトフォルダ内のbuild
>libs
フォルダ内にあります。
以下はIntellij IDEAでの表示です。
エクスプローラーで表示したければ、生成されたファイルを右クリックして開く
>エクスプローラー
の順に選択すれば、エクスプローラーが立ち上がります。
3つありますが、名前が一番短いものだけを使ってください。
残りは何?
6. Build Jars
の初期設定では、開発環境版Modファイル(~~~-dev.jar
)22とソースコードのみModファイル(~~~-sources.jar
)23が元のModファイルと同時に生成されます。
どちらも通常のランチャーで起動できない(クラッシュ等) トラップのようなファイルですので間違えないでください。
└残りは何?終わり
ランチャーへの入れ方については、環境構築編のとりあえず動かす(ランチャー編) を参考にしてください。
この記事にそこまで含むと流石に多すぎるので止めました。
もうつかれたやりたくないてかなんだよこのきじながすぎだろ
-
画像ではv1.1.4 ↩
-
C:ドライブからスタートして展開先までのフォルダ全て
詳細な説明は別のサイトに任せる ↩ -
海外産のソフト(≒ほぼ全ソフト)は自国の半角アルファベットしか対応していないせいでフォルダ名やファイル名が日本語だとバグることがしばしばある ↩
-
できるだけCドライブに近い方が良い
意外とパス名の長さ制限にかかることがある
EclipseとかEclipseとかEclipseとか↩ -
日本語の時と英語の時があるのですが誰か直し方教えてください ↩
-
一本多いな? ↩
-
チェックを入れることでそのフォルダ以下に作ったプロジェクトは全て信用してくれる ↩
-
説明書きによるとどうやら起動時にWindows Defenderが処理の邪魔してくるせいで重くなる!ってところを回避できるらしい
本当かは知らん ↩ -
Gradleの公式アイコン
象を使っている理由は公式サイトには書いてなさそう ↩ -
いずれ隣のデバッグボタン(虫アイコン)も使うことになる ↩
-
なお設定ファイルであってもプログラムの一部である ↩
-
より深く踏み込むなら、build.gradleに書かれたタスク内で用いるパラメータの一部を外部化したファイルである ↩
-
これはgradle.propertiesがGradleのタスクの設定ファイルであることが理由 ↩
-
ModIDを変更してしまうと、既にそのModで遊んでいたワールドが大半壊れる
対策は基本「ModIDを変更しないこと」か「新ワールドで1から遊ぶ」の2つしかない
上級者を超えたModderならあるいは…?
ちなみにModPackのクエスト(アイテムが設定されてるやつ)は新規プレイでも壊れる ↩ -
まだ存在していないパッケージのためエラーとして出る
直後の確認ダイアログで自動作成が可能かつ自動作成すればエラーではなくなる ↩ -
buildバージョンを増やしても良い ↩
-
最後の要素の後ろにカンマを付けることはできない
改行して書くときにやらかしがちな凡ミス第1位 ↩ -
これのおかげで深いツリーもある程度浅く表示できる ↩
-
Mod自体には画像や音声ファイルを保管しておく機能が無い
(厳密にはある)
逆にブロックもアイテムもGUIも何もかも、リソパに関わる一切を追加しないようなModであればリソースパック部分を削っても良いはず ↩ -
「デバッグ」が有用になるのは
2. Run Client
の時のみなので、わざわざそれ以外で動作の少し重いデバッグを使う理由は無い ↩ -
メソッド名とフィールド名が難読化がされていない(ソースコードと全く同じ名前で作成された)バージョン
逆にマイクラのランチャーで起動する際には難読化が施されている必要がある。(さらに厳密な話はまた別の機会に…) ↩ -
コンパイルされたクラスの代わりに、元のソースコードが入っているバージョン
他人のModでもこれさえ手に入れば作り直し・改造自由自在 ↩