Edited at

(WIP)Minecraft Mod をForgeで作成(導入)

More than 1 year has passed since last update.


⛩ 開発環境の概要

ノリと勢いだけで書いているので足りないものがあったり、続くのかどうかも怪しいですが、何かの参考になれば幸いです。


🌸 環境

・Minecraft 1.12.2 (現在最新)

・Minecraft forge 1.12.2 (13.20.0.2282) (現在最新)

・Ecripse (Pleiades Ecripse4.7 Oxygen) (新しいっぽいので)

・Windows 10

・Java 8

:white_flower:2017/4/15:

・Forgeを2214から2282へちょっぴりアップ(影響なし)

:white_flower:2017/11/30:

・Ecripseを4.6から4.7へアップ(影響なし)

・Minecraftを1.11.2から1.12.2へアップ(Forgeを12へアップが必要)

・それに伴いForgeを1.12.2-14.23.1.2555へアップ(影響なし)


⛩ 開発環境のセットアップ


🌸 Eclipseのインストール


🏮 Eclipseをダウンロード

http://mergedoc.osdn.jp/

からEclipse 4.7 Oxygen Pleiades All in Oneをクリック

Javaの列から自分の環境(32/64)(できればFullがJava開発環境も含まれているのでトラブル少なそう)のDownloadをクリック(1.4GBほどあるので注意)

ダウンロードしたpleiades-4.7.1-java-win-64bit-jre_20171019を展開(約1.7GB)

展開されたフォルダのpleiades\eclipse\eclipse.exeを実行して起動できるか確認(Ecripseランチャーが起動してワークスペースを聞かれるので、とりあえずキャンセル)(※初回起動は時間がかかる)


🌸 MDKのインストールとセットアップ


🏮 minecraft forgeの開発キットをダウンロード

https://files.minecraftforge.net/

最初から最新バージョンのページが表示されているので、

Download LatestからMdkをクリックしてダウンロード(5秒後に出るSKIPをクリック)

(右のDownload Recommendedは安定バージョンなので、開発版によるバグを避けたい場合はこちらを選ぶといいと思います)


🏮 ファイルの解凍

デスクトップなどに、適当なフォルダを作り、

ダウンロードしたforge-1.12.2-14.23.1.2556-mdk.zipをそこで展開。(ファイルがその階層にばらまかれるので注意)


🏮 セットアップ

コマンドプロンプト(cmd.exe)を管理者権限で開き、展開したフォルダへ移動。

(コマンドプロンプトを管理権限で開く方法:コルタナやアプリの検索ウィンドウで「cmd」で検索して、右クリックから管理者として実行で起動できる)

gradlew setupDecompWorkspace eclipse:arrow_lower_left:

と入力して環境に必要なファイルを構築

数分後、「BUILD SUCCESSFUL」と出れば成功

「BUILD FAILED」が出た場合は

gradlew --refresh-dependencies:arrow_lower_left:

を実行して依存ファイルの再作成お行い、もう一度試してみる。


🏮 Eclipseでワークスペースを開く

Eclipseを起動して(pleiades\eclipse\eclipse.exe)、

ワークスペースの参照からmdkを展開したフォルダに作成されたecripseフォルダを指定して起動で開く。

image.png

パッケージエクスプローラーにMDKExampleというサンプルMODが入っています。

image.png


🏮 サンプルのMDKExampleを実行するためのJavaランタイム環境の設定

パッケージエクスプローラーにある、MDKExampleを選択して、

アイコンメニューの実行ボタン(▶)の▼から、実行の構成を選択。

image

実行の構成ウィンドウが表示されるので、左のJavaアプリケーションからClientを選択(クライアントデバッグ用の構成)(※2つあるけど、一番上だけで大丈夫っぽい?心配なら2つとも同じ設定にします。)

image

右に表示されたタブからJREを選択して、ランタイムJREの設定を、[プロジェクトの実行環境'JavaSE-1.6'(P)(java6)]から実行環境(X):に変更して、CDC-1.1/Foundation-1.1(java8)を選択(java8ならたぶん何でも大丈夫)

image

変更したら右下の[適用(V)]で設定を保存しておく。

同様に、Javaアプリケーション内のServerも同じようにJREの設定をする。

設定が終わったら[閉じる]で閉じてOK。


🌸 MDKサンプルの実行(クライアント)


🏮 サンプルのMDKExampleを実行してみる

アイコンメニューの実行ボタン(▶)の▼から、1Clientを実行。

(これでクライアント側のテストを実行することができます)

:exclamation:パッケージエクスプローラーのプロジェクトを選択していないと怒られるので、選択してから実行してください。

image

image.png

スタート画面が出たところ。[Mods]ボタンが出現していて、左下にForgeやMinecraftのバージョンなどが表示されていれば成功

image.png

[Mods]ボタンをクリックするとExample Modが読み込まれているのがわかる。

image.png


🏮 このサンプルMODのやっていること

Eclipseの左下にあるコンソールタブを少し上にスクロールしてみると、このような一文が出力されていますが、実はやっていることはこれだけで、MOD初期化時にコンソールに文字を表示するいわゆるHello Worldのようなものです。



[11:29:00] [main/INFO] [STDOUT]: [com.example.examplemod.ExampleMod:init:18]: DIRT BLOCK >> tile.dirt



image.png

ソースは、パッケージエクスプローラーからMDKExampleをたどって、src/main/javacom.example.examplemocパッケージに入っているExampleMod.javaになります。

ダブルクリックして開いてみると右側にソースが表示され、System.out.println(~と文字を表示しているのがわかります。)(※土ブロックのローカライズしていない名前を表示しています)

image.png

こちらを好きに変えてやれば、コンソールへ好きな文字を出力するMODができたことになります。(※編集するとき、起動しているClientは一度終了しておく)

image

アイコンメニューの実行ボタン(▶)の▼から、1Clientを実行

したところ。ちゃんと表示されていますね。

image.png


🌸 MDKサンプルの実行(サーバー)


🏮 サーバーの初回起動

アイコンメニューの実行ボタン(▶)の▼から、2Serverを実行

image.png

すると、何やらコンソールにメッセージが出てサーバーが終了します。

これはEURAというソフトウェア使用許諾契約に同意しないと起動しないよーと言ってるので、

https://account.mojang.com/documents/minecraft_eula

こちらの同意書を読んで、同意できるばあい。EURAの設定を行います。


🏮 EURAの同意設定

パッケージエクスプローラーからrunフォルダに初回起動時に生成されたeura.txtがあるのでダブルクリックで開きます。

image

初期ではeula=falseとなっているので、これをtrueにして保存(ctrl+s)します。

image


🏮 サーバーの起動

アイコンメニューの実行ボタン(▶)の▼から、1Serverを実行

(※最近実行された順に並んでいるだけなので数字は気にしなくてOKです)

めでたくサーバーが実行されました。

image.png

サーバーログの上のほうを見てみると、ちゃんとサーバーでもMODが動作しているのを確認できます。

image.png

いくつかの(指定されたファイルが見つかりません。)と出る場合はサーバー管理用の(ホワイトリス用のファイルとか)が見つからないので生成しましたよ。ってことなので次回起動からは出なくなると思います。


🏮 サーバーへクライアントから接続

いま起動したサーバーが動いている状態でEclipseからクライアントを起動して、接続できるか試してみます。

[Multiplayer]から[Add Server]して、Server Addressに127.0.0.1を設定して[Done]。

登録されたサーバーに緑色のチェックがついて接続可能になっていればOKです。

image.png

ただ、このままだとFaild to login: Invalid session (Try restarting your game)と出てサーバに入れません。

これはサーバーの設定でログインしていないユーザーがサーバーに入ることを許していないためで、開発時のクライアントはログインしていないユーザーとして接続されます。

サーバーの設定を変更するために、サーバーログの下のコマンド欄に、

stop:arrow_lower_left:

と入力してサーバーを終了します。

image.png


🏮 サーバーの設定(未認証ユーザーの許可)

パッケージエクスプローラーのrunにサーバーの設定ファイルがいくつか生成されていますが、その中のserver.propertiesをダブルクリックして開きます。

image

25行目あたりのonline-mode=trueが公式サーバーに接続してユーザー認証を行うか?の設定なので、これをfalseに変更します。

※この設定は開発サーバーのみで、本番サーバーではやらないでください(無法地帯になります)

保存したら、サーバーをもう一度立ち上げて、クライアントから接続してみてください。

image.png

image

ばっちり入れましたね。

サーバー側にはPlayer 192という名前で入っていることがわかります。

この名前はクライアントを起動したときに毎回新しく設定されるので、個人を特定して許可するようなMODを作る場合は起動ごとに変わるのでちょっと大変になりますが、複数のアカウントを持たずに許可系のテストができるともいえるので、工夫して作成していけると思います。


⛩ 作成したMODの配布ファイルを作成

コマンドプロンプトからMDKを展開したフォルダへ移動し、

gradlew build:arrow_lower_left:

と実行することでパッケージが作成されます。(BUILD SUCCESSFULと出ればOK)

「MDKフォルダ\build\libs」に2つのjarファイルができています。

modid-1.0.jar

modid-1.0-sources.jar

配布する場合は-sourcesが含まれていないものを配布します。

つまり、このjarファイルをmodsフォルダに入れればインストールできるということですね!


⛩ オリジナルのMODを作成

つづけ... ?