この記事は執筆中です。加筆してくださる人を募集しています。 |
Minecraft1.7.2以降で、MinecraftForge10.12.0.967以降を導入する場合の手順です。
- 動作確認
- Minecraft1.7.2~1.8 Forge10.12.0.??? ~
- Minecraft1.6.4 forge-1.6.4-9.11.1.960-964
- 動作の確認は基本的にRecommended[推奨版]のみ。Latest[最新版]はForge自体の動作が保証されていません。
- Forgeのダウンロードはこちらから。
目次
必要なもの
- MinecraftForgeのソースファイル
- http://files.minecraftforge.net/ から Src をダウンロード
- Forge-1.8-11.14.4 以降は名称が Mdk (Mod Development Kit)に変更されている。また、gradleファイルの内容が変わっているので注意すること。
- JDK(JavaDevelopmentKit)
- http://www.oracle.com/technetwork/java/javase/downloads/index.html からPCに合わせてダウンロード
- 詳しくは「事前準備・MOD開発環境を作る」を参照。
- Java統合開発環境(IDE)※任意
Forge
前準備
- JDKのダウンロード、およびインストール
- MinecraftForgeSourceのダウンロード、および解凍
環境構築手順(install.bat作成まで)
Forge の src を展開する gradlew.batをメモ帳等で開き、JDKのパスをショートネームで追記しておく(12~18行目あたりのset ***が並んでる付近でよい)
- set JAVA_HOME=C:\PROGRA~1\Java\jdk1.8.0_121
- ショートネームがわからなければ、コマンドプロンプトで「dir /x C:\」と打てば表示される。「Program Files」は「PROGRA~1」など
インストール用バッチファイルの作成
- 作業ディレクトリ内に新規テキストファイルを作成し、中に以下のコードを書いて保存。ファイル名を「Install.bat」に変更する。
(IDEを使わないでデバッグする人用)
call gradlew setupDecompWorkspace
(Eclipse用)
call gradlew setupDecompWorkspace eclipse pause
(intellij IDEA用)
call gradlew setupDecompWorkspace idea pause
(IDEAは標準でGradleファイルの読み込みができるので、バッチファイルを作る必要はそれほどない。)
Install.batを実行する。暫く待つと ディレクトリ内に必要なファイルが生成される。
- 「BUILD SUCCESSFUL」が表示されていれば成功。
- 失敗していたら「gradlew --refresh-dependencies」を実行させて依存ファイルの再作成を行わせ、再度install.batを実行してみること。
build.gradleファイルの編集
複数のMODを同じワークスペースで開発する場合のみ必要な工程です。
- ディレクトリ内にあるbuild.gradleファイルを適当なテキストエディタで開く
- build.gradle内の以下の部分
apply plugin: 'forge' version = "1.0" group= "com.yourname.modid" // http://maven.apache.org/guides/mini/guide-naming-conventions.html archivesBaseName = "modid" minecraft { version = "1.7.2-10.12.0.1024"//DLした時のForgeのバージョン assetDir = "eclipse/assets" mappings = "***"// MDKではMCPのマッピング指定がある }
を、次のように変更する。
allprojects { apply plugin: 'forge' minecraft { version = "1.7.2-10.12.0.1024" runDir = "eclipse/assets" mappings = "***"// MDKではMCPのマッピング指定がある } version = "1.0"//各プロジェクトで指定するだろうし、無くてもよい。 archivesBaseName = project.projectDir.name }
- 最新版ではapply pluginの設定値が違うため変更しないように.
- mappings(MCPの難読化割り当てパターンのようなもの)の初期設定値はForgeのバージョンによって異なるので,ソースをリポジトリ等に公開する場合は注意すること.マルチプロジェクト化の前後で不用意に変更しないように.
- ディレクトリ内に新規テキストファイルを作成し、ファイル名を「settings.gradle」に変更。
- 「settings.gradle」を開いて、以下のように記述し保存。
- (Eclipseの場合)includeFlat 'Project1','Project2'
- この時、Project1ディレクトリとProject2ディレクトリは作業しているディレクトリと“同じ階層”に置くこと
作業フォルダ
Project1
Project2
- (IDEAの場合)include 'Project1','Project2'
- この時、Project1ディレクトリとProject2ディレクトリは作業しているディレクトリ“内”に置くこと
作業フォルダ
|-Project1
|-Project2
- 各プロジェクトのディレクトリ内に新規テキストファイルを作成し、「build.gradle」という名称に変更。
- 「build.gradle」を開いて、以下のように記述し保存。
sourceSets.main { java.srcDirs project.projectDir.name resources.srcDirs project.projectDir.name } version = "1.0"//各プロジェクトのバージョン
- project.projectDir.nameは各プロジェクトのディレクトリに置き換わるので変更する必要はない
- 以下の記述でも同じように動くが、推奨しない。
sourceSets.main { java.srcDirs 'src/main/java' resources.srcDirs 'src/main/resources' } version = "1.0"//各プロジェクトのバージョン
- ソースファイル内に日本語が記述されている場合は、「build.gradle」に以下を追加。
tasks.withType(Jar) {compileJava.options.encoding = 'UTF-8'}
- 日本語の記述されているAPIを利用する場合は、「build.gradle」に以下を追加。
tasks.withType(Jar) {compileApiJava.options.encoding = 'UTF-8'}
- 依存関係がある場合、外部jarをビルド時に読ませたい場合は、「build.gradle」に以下を追加。
そして、そのプロジェクトのディレクトリ内に「lib」ディレクトリを作成。
dependencies { compile fileTree(dir: 'lib', include: '*.jar') }
- マルチプロジェクト内の他のプロジェクトに依存している場合は、「build.gradle」に以下を追加。
dependencies { compile project(':ProjectName')}
- 以上のファイルを配置すると、以下のようになる。
- Eclipseの場合
- ワークスペース/
- .gradle/
- src/
- build.gradle
- settings.gradle
- Project1/
- .gradle/
- src/
- build.gradle
- Project2/
- .gradle/
- src/
- build.gradle
- IDEAの場合
- ワークスペース/
- .gradle/
- src/
- build.gradle
- settings.gradle
- Project1/
- .gradle/
- src/
- build.gradle
- Project2/
- .gradle/
- src/
- build.gradle
MOD
開発
この環境下でMODをビルドしたい場合、単独プロジェクトの場合は、開発環境の作業ディレクトリに
src/main/java
という階層でディレクトリを作成し、javaディレクトリ内に、自身のMODのパッケージに有ったディレクトリ構成でsourceファイルを配置すればよい。
画像や音声ファイル等のリソースファイルは
src/main/resources/assets
という階層でディレクトリを作成し、assetsディレクトリ内に指定されたディレクトリ構成でファイルを配置すればよい。
リソースファイルの配置の仕方は、1.7のリソース(テクスチャ・サウンド・言語ファイル等)の置き場所を参照のこと。
- マルチプロジェクトの場合
各プロジェクトディレクトリ内に、上のディレクトリ構成でファイルを配置する。
デバッグ
作成したMODのデバッグは、ForgeGradleを使うことで、1.6.4以前のMCP環境と同様に行うことが出来る。
- 単独プロジェクトの場合
作業ディレクトリ内に新規テキストファイルを作成し、中に以下のコードを書いて保存。ファイル名を「RunClient.bat」に変更する。
call gradlew runClient pause
作業ディレクトリ内に新規テキストファイルを作成し、中に以下のコードを書いて保存。ファイル名を「RunServer.bat」に変更する。
call gradlew runServer pause
- build.gradle内のrunDirに指定したディレクトリ(MDKのデフォルトでは"run")がプロジェクトディレクトリ以下に存在しないと,runClientおよびrunServerがエラーで実行できないので注意.
- マルチプロジェクトの場合
作業ディレクトリ(プロジェクトディレクトリではない)内に新規テキストファイルを作成し、中に以下のコードを書いて保存。ファイル名を「RunClient.bat」に変更する。
call gradlew :<PROJECT NAME>:runClient pause
作業ディレクトリ(プロジェクトディレクトリではない)内に新規テキストファイルを作成し、中に以下のコードを書いて保存。ファイル名を「RunServer.bat」に変更する。
call gradlew :<PROJECT NAME>:runServer pause
- IDE上でデバッグする場合
Eclipse で開発する場合は、プロジェクトファイルを開き、起動クラスの設定を行う
- 起動クラスの設定はクライアントの場合GradleStart、サーバはGradleStartServer。プログラムの引数は空で良いが、「-username=<任意の文字列>」を指定しておくと、マルチプレイのテスト時にOPを付与しなおす必要がなくなる。
- VM への引数として「-Xincgc -Xmx1024M -Xms1024M」を指定。(非力なマシンでデバッグする場合は適宜変更のこと)
- 作業ディレクトリに「${workspace_loc:(プロジェクト名)/jars}」を指定。GUI からワークスペースの jars ディレクトリを指定しても良い。
- ワールド情報は jars/save の中に生成されるので、既存ワールドは適宜このディレクトリにコピーすること。一度ゲームを起動すれば jars ディレクトリ内に必要ディレクトリが作成される。
ビルドパスの修正
- ForgeSrcのパスが不足している場合、C:\Users\ユーザー名\.gradle\caches\minecraft\net\minecraftforge\forge\(Forgeバージョン) に forgeSrc-(Forgeバージョン).jar が存在する。添付ソースは末尾が「-source.jar」のファイルなので一緒に設定すると良い
IDEAで開発する場合、起動構成は開発ディレクトリ上でのコマンドプロンプトで「gradlew genIntellijRuns」と実行すれば自動的に構成できる。
リリース
リリースビルド用バッチファイルの作成
(シングルプロジェクト用)
- 作業ディレクトリ内に新規テキストファイルを作成し、中に以下のコードを書いて保存。ファイル名を「Release.bat」に変更する。
call gradlew build --info > buildlog.txt 2>&1
- 今後、コンパイルを行う時はこの「Release.bat」を実行すれば、MCPでの「recompile.bat」「reobfuscate_srg.bat」を同時に行ってくれる
- コンパイル中のログは、「buildlog.txt」に出力される
- コンパイルされたclassファイルは、\build\libsディレクトリに圧縮された状態で出力される
- 「build.gradle」を弄っていなければ、「modid-1.0.jar」として出力されている。"archivesBaseName"-"version".jarという書式
(マルチプロジェクト用)
- 作業ディレクトリ内に新規テキストファイルを作成し、中に以下のコードを書いて保存。ファイル名を「Release-<ProjectName>.bat」に変更する。
call gradlew :<ProjectName>:build --info > build-<ProjectName>-log.txt 2>&1
- 今後、<ProjectName>のプロジェクトのコンパイルを行う時はこの「Release-<ProjectName>.bat」を実行すれば、MCPでの「recompile.bat」「reobfuscate_srg.bat」を同時に行ってくれる
- コンパイル中のログは、「build-<ProjectName>-log.txt」に出力される
- コンパイルされたclassファイルは、\build\libsディレクトリに圧縮された状態で出力される
- マルチプロジェクト用「build.gradle」を弄っていなければ、「<ProjectName>-1.0.jar」として出力されている。"<ProjectName>"-"version".jarという書式
Forgeのアップデート
Forgeの新しいビルドがアップデートされた時に、以下のようにして、開発環境のForgeをアップデートすることが出来る。
- 「build.gradle」ファイルを開く。
- 中程のminecraftブロック内の“version”を最新のビルドナンバーに書き換え、保存する。
- 「install.bat」を実行。
(注意)マルチプロジェクトをしている場合は、setupDevWorkspaceとsetupDecompWorkspaceを全てのプロジェクトで自動で行うが、setupDecompWorkspaceは大元のプロジェクトで行えば十分なので、「install.bat」の中身の「setupDecompWorkspace」を「:setupDecompWorkspace」に置き換えたほうが、作業が捗り、decomp時のJava heapエラーに悩まされることもなくなる。
(1.7.10以降なら、そのままでも重複タスクはスキップされるので、Java heap エラーは起きにくくなった。)
動画
リンク
以前のバージョンでの手順
- Minecraft1.2.5 Forge3.2.3.108以前
- Minecraft1.2.5 Forge3.3.7.135~Minecraft1.4.2 Forge6.0.1.341
- Minecraft1.4.4 Forge6.3.0.372~
- Minecraft1.4.6 Forge6.5.0.471~
- Minecraft1.6.1 Forge8.9.0.749~Minecraft1.6.4 Forge9.11.1.965(960-964は除く)
参考サイト
非公式フォーラム
IDEA+Gradleでわいわい
IntelliJ IDEAでModding
ForgeGradle+IDEAでマルチプロジェクト
- 当たり前ですが、install.bat実行時に対応するバージョンのminecraftの.jarが無いと失敗します。実行前に一度でも対応バージョンのminecraftを起動しておく旨を記載した方がよろしいかと --122.251.218.248 2016年12月14日 (水) 18:09 (JST)
- マルチプロジェクトのほうの解説が少しわかりづらいのです --118.8.218.24 2016年7月23日 (土) 19:06 (JST)
- install.batが失敗したので調べたらgradle.propertiesファイルを作成して内容をorg.gradle.jvmargs=-Xmx2048Mと書いてgradlewと同じディレクトリに入れておいたら成功しました。 --115.36.144.125 2016年2月25日 (木) 07:04 (JST)
コメントの自動更新を有効化