LoginSignup
1
3

More than 1 year has passed since last update.

Minecraft Forge 1.12.2-14.23.5.2855を導入したときのログ

Posted at

背景

forge-1.12.2-14.23.5.2768の上でModdingをしていたけど、いつの間にかめっちゃ古くなっていることが分かったので、forge-1.12.2-14.23.5.2855に切り替えることにしました。

これはその時の備忘録です。

環境

  • Windows 10
  • Eclipse
  • Java 8
  • Minecraft 1.12.2
  • Minecraft Forge 1.12.2-14.23.5.2855

環境の配置

MDKのダウンロード

ここから14.23.5.2855 Mdkを得ます。
https://files.minecraftforge.net/net/minecraftforge/forge/index_1.12.2.html
image.png
image.png

余談:Forgeの公式サイトがいつの間にかHTTPSに移行しており、古いインストーラーは動作しなくなった模様。

展開

展開すると色々入っています。
image.png

README.txtにはModdingの上でいろいろと技術的に重要なことが書いてあります。

環境のセットアップ

Eclipseプロジェクトの作成手順

以下はREADME.txtにある記述を抜粋し、意訳したものです。

1. "gradlew genEclipseRuns"を実行する
2. "gradlew eclipse"でEclipseプロジェクトを作成する
3. runClientとrunServerのMOD_CLASSESをto show [modid]%%[Path]; 2 times rather then the generated 4.のように書き換える(よくわからない)

もしIDEでライブラリが見つからないとか出た場合は、
"gradlew --refresh-dependencies"
でローカルキャッシュを更新してみてください。

"gradlew clean"はソースコード以外のすべてを初期化します。

gradlewの実行に使うJavaの指定

gradlewコマンドを実行するにはJavaがインストールされている(javaコマンドが通るかJAVA_HOME環境変数が設定されている場合?)必要があります。

次のようにgradlew.batの先頭にJavaホームへのローカルパスを指定すると、そのファイル以外の場所に変更を加えずに無理やりjavaを認識させることができます。

set JAVA_HOME=D:\eclipse\pleiades-2020-12-java-win-64bit-jre_20201222\pleiades\java\8
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem  Gradle startup script for Windows
@rem
@rem ##########################################################################

≪以下略≫

この改変されたgradlew.batをgitに取り込みたくない場合、次のようにするとgitがこのファイルを認知しなくなります。
https://riotz.works/articles/lulzneko/2019/07/14/temporarily-ignore-change-tracking-for-files-managed-by-git/

gradlew.batへの変更を無視するようにするbashコマンド(WSL)
$ git update-index --skip-worktree gradlew.bat
gradlew.batへの変更を無視する状態を元に戻すbashコマンド(WSL)
$ git update-index --no-skip-worktree gradlew.bat

Windowsでgitを扱う場合、改行コードを自動的に変換するautocrlfオプションの設定に気を付けてください。
特にシェルスクリプトとバッチファイルが共存するgradlewは相性が悪いです。

GitHub Desktopの場合、それ用のgitの設定ファイルを参照していることがあります(よくわからないけど、リポジトリ固有の設定が効かない場合がある?)。
それは次の場所にあります。

C:\Users\【Windowsユーザー名】\AppData\Local\GitHubDesktop\app-~~\resources\app\git\etc\gitconfig

Eclipseで読み込み

Eclipseプロジェクトの作成

ここは特に何も問題は起きませんでした。


コマンドプロンプト
> gradlew genEclipseRuns
出力
To honour the JVM settings for this build a new JVM will be forked. Please consider using the daemon: https://docs.gradlDaemon will be stopped at the end of the build stopping after processing

> Configure project :
New Dep: net.minecraftforge:forge:1.12.2-14.23.5.2855_mapped_snapshot_20171003-1.12

> Task :extractNatives
Downloading: https://libraries.minecraft.net/org/lwjgl/lwjgl/lwjgl-platform/2.9.4-nightly-20150209/lwjgl-platform-2.9.4-nightly-20150209-natives-windows.jar
Downloading: https://libraries.minecraft.net/org/lwjgl/lwjgl/lwjgl-platform/2.9.2-nightly-20140822/lwjgl-platform-2.9.2-nightly-20140822-natives-windows.jar
Downloading: https://libraries.minecraft.net/net/java/jinput/jinput-platform/2.0.5/jinput-platform-2.0.5-natives-windows.jar
Downloading: https://libraries.minecraft.net/com/mojang/text2speech/1.10.3/text2speech-1.10.3-natives-windows.jar

Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/4.9/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 39s
8 actionable tasks: 8 executed

コマンドプロンプト
> gradlew eclipse
出力
To honour the JVM settings for this build a new JVM will be forked. Please consider using the daemon: https://docs.gradle.org/4.9/userguide/gradle_daemon.html.
Daemon will be stopped at the end of the build stopping after processing

> Configure project :
New Dep: net.minecraftforge:forge:1.12.2-14.23.5.2855_mapped_snapshot_20171003-1.12

Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/4.9/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 9s
10 actionable tasks: 6 executed, 4 up-to-date

Eclipseでインポート

ここでは特に何も弄っていないPleiades Eclipseを使います。
https://mergedoc.osdn.jp/

Eclipseでインポートします。
image.png
image.png
image.png

プロジェクトを右クリックして、象のアイコンのGradleプラグイン(buildship)を有効化します。この手順は実は要らないかもしれません。
image.png

Eclipseからの起動

MC_VERSIONの設定

runClient.launchをEclipse上で右クリックして実行しようとすると、次のように怒られます。
image.png
image.png


これはrunClient.launchを次のように手作業で書き換えるとうまくいくようです。
これはrunServer.launchでも同様です。

- <mapEntry key="MC_VERSION" value="${MC_VERSION}"/>
+ <mapEntry key="MC_VERSION" value="1.12.2"/>

いかにもオプションで自動的に出力されそうな見た目ですが、検索したところなんかみんな手動で書き換えてるっぽいです。

I just needed to change the variable value of MC_VERSION in my runClient launch file

クライアントの起動

ここまでくるとクライアントを起動できるようになります。

image.png

サーバーの起動

サーバーサイドを起動するには、eula.txteulatrueである必要があります。


サーバーを一度起動しようとするとeula.txtが生成されます。

image.png

これはここに記述されている指示に従ってください。

#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://account.mojang.com/documents/minecraft_eula).
#Fri Jun 04 22:50:25 GMT+09:00 2021
eula=false


eulaが解決されていればサーバーは起動できます。

image.png

Eclipseからの編集内容をリアルタイムで反映させられるようにする

Javaプログラムが動いているときにEclipseがJavaコードをコンパイルすると実行中にプログラムが書き換えられる奴を有効にします。

それには、「ソース・フォルダーごとに出力フォルダーの指定を可能にする」をオフにすると、なぜかうまくいきました。

image.png

なお、これでも一部のコードはリアルタイムで反映されません(SideOnlyがあるクラスは同期できない?EventBusに登録したクラスは同期できない?)。

Moddingに便利なMinecraft上の操作

サーバーのプロパティを変える

テスト用のサーバーではコマンドブロックを有効、オンラインモードを無効にしたりするのがよいでしょう。

image.png

- online-mode=true
+ online-mode=false
- enable-command-block=false
+ enable-command-block=true

オンラインモードが有効なままだと、Minecraftアカウントを複数持っていなければオンラインで複数のプレイヤーが関わる機能のテストができません。
オンラインモードを無効にすると認証していないユーザーがログインできるので、一人でデバッグができます。

コマンドブロックはここで設定しなければ使いたいときに「動かないぞ!」ってなります。

ローカルホスト上に建っているサーバーに入る

サーバーを起動するとデフォルトでlocalhost:25565というアドレスに出現します。
image.png
image.png


サーバーのポートはserver.propertiesで変更できます。

- server-port=25565
+ server-port=12345

アカウントにログインする

runClientで起動するMinecraftクライアントでMinecraftアカウントにログインしたい場合、次のように実行の構成を書き換えます。

image.png

これはrunClient.launchを直接書き換えてもよいです。

      <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="net.minecraftforge.legacydev.MainClient"/>
+     <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="--username メールアドレス等 --password パスワード"/>
      <stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.buildship.core.classpathprovider"/>

なお、--passwordを指定しなければ認証しない状態でユーザー名だけを固定化できます(間違ったパスワードを指定した場合はエラーになる)。
image.png


その他、--uuidでUUIDも設定可能であることがnet.minecraftforge.fml.common.launcher.Yggdrasilに書かれています。

前略
public class Yggdrasil {
    public static void login(Map<String, String> args) {
        中略
        args.put("--username",       auth.getSelectedProfile().getName());
        args.put("--uuid",           auth.getSelectedProfile().getId().toString().replace("-", ""));
        args.put("--accessToken",    auth.getAuthenticatedToken());
        args.put("--userProperties", auth.getUserProperties().toString());
    }
}

OP化とかワールド設定とか

これらはModdingに便利なMinecraftコマンドのメモです。


次のコマンドでユーザーにop権限を与えます。
前述の方法で名前を固定化しない場合、起動ごとにプロファイルが変わってopを与え直す必要が生まれたり毎回インベントリが消えるなど、テスト用サーバー内での行動が色々面倒になります。

/op メールアドレス等

これは死亡時にアイテムや経験値をロストしない設定です。

/gamerule keepInventory true

これらは太陽の位置や天候が変わらなくなります。

/gamerule doDaylightCycle false
/gamerule doWeatherCycle false

これは太陽を真上にします。

/time set 6000

これは実行したプレイヤーの足の下に広大な石の足場を出現させます。

/fill ~-50 ~-1 ~-50 ~50 ~-1 ~50 minecraft:stone

ビルド

ビルドコマンド

ビルドもコマンドプロンプトで行います。

コマンドプロンプト
> gradlew build
結果
D:\forge-1.12.2-14.23.5.2855-mdk>set JAVA_HOME=D:\eclipse\pleiades-2020-12-java-win-64bit-jre_20201222\pleiades\java\8
To honour the JVM settings for this build a new JVM will be forked. Please consider using the daemon: https://docs.gradle.org/4.9/userguide/gradle_daemon.html.
Daemon will be stopped at the end of the build stopping after processing

> Configure project :
New Dep: net.minecraftforge:forge:1.12.2-14.23.5.2855_mapped_snapshot_20171003-1.12

Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/4.9/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 9s
7 actionable tasks: 6 executed, 1 up-to-date

成果物はbuild\libs内に出現します。
image.png
image.png

GitHub Actionsでの自動化

高頻度で成果物をリリースしたければ、GitHub Actionsなどで自動化するのが良いです。


これはこの記事を書いたときに作った自動化です(参考)。
https://github.com/MirrgieRiana/MirageFairy2019/blob/master/.github/workflows/release.yml

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3