Minecraft(Java Edition)の醍醐味であるMODを導入してみます。今回は定番のForgeを試します。
前回の記事同様に、Kubernetesクラスタにはkindを使用します。本記事は、前記事の作業を一通り行い、一旦Minecraft Serverをアンインストールした時点から作業を開始する前提です。
目次
Minecraft Serverのインストール
使いたいMODがMinecraft 1.21系未対応で、1.20.1まで対応しているものが多かったため、本記事ではMinecraftのバージョンは1.20.1にします。
次のhelm-values.yamlを用意します。
---
minecraftServer:
eula: "TRUE"
type: "FORGE"
version: "1.20.1"
difficulty: easy
gameMode: creative
overrideServerProperties: true
serviceType: LoadBalancer
loadBalancerIP: 192.168.107.222
externalTrafficPolicy: Local
motd: "Hello Minecraft on Kind!"
memory: 4096M
rcon:
enabled: true
resources:
requests:
memory: 4.5Gi
persistence:
dataDir:
enabled: true
Size: 8Gi
---
Note
loadBalancerIPは環境に合わせて変更してください。
次のコマンドでForgeインストール済みのMinecraft Serverをデプロイします。
helm upgrade --install \
-n minecraft minecraft itzg/minecraft \
-f helm-values.yaml \
--create-namespace \
--wait
クライアント側でForgeのインストール
https://files.minecraftforge.net/net/minecraftforge/forge/index_1.20.1.html
MC 1.20.1の"Download Recommended"の"Installer"をクリックします。
"SKIP"をクリックするとjarのダウンロードが始まります。
javaコマンドでインストーラーを起動します。
java -jar forge-1.20.1-47.3.0-installer.jar
Note
javaコマンドがない場合は、Javaのインストールが必要です。
どのディストリビューションでも良いですが、個人的にはBellsoft Liberica JDKがおすすめです。
インストーラーが起動したら、"Install client"を選択して、"OK"をクリック。
しばらくするとインストールが完了します。
MinecraftのLauncherを立ち上げると、起動構成が追加され"forge"が表示されるようになります。
"起動構成"タブに移動し、自動で追加された構成の名前を変えておきます。ここではforge 1.20.1とします。
"プレイ"タブに戻って、"プレイ"ボタンをクリックします。
ホーム画面に"Mod"ボタンが表示されます。
"Mod"ボタンをクリックすると、初期状態はMinecraft自体とMod LoaderであるForge自体が表示されます。
ホームに戻って、"マルチプレイ"をクリックし、kindのサーバーを選択します。
Note
サーバーの追加は前記事で実施済みです。
初期状態で特に問題なくServerに入れることを確認します。
Modの導入
Forgeの準備がサーバー、クライアントともにできたので、早速Modを導入します。
"Hostile Mobs and Girls" Modの導入
次の記事を参考に、Hostile Mobs and GirlsModを導入してみます。
https://games.xserver.ne.jp/minecraft-media/mod-server/
次のページから"hmag-forge-mc1.20.1-9.0.25"をダウンロードします。
https://www.curseforge.com/minecraft/mc-mods/hostile-mobs-and-girls/files/all?page=1&pageSize=20
"Download file"をクリックすると、hmag-forge-mc1.20.1-9.0.25.jarがダウンロードされます。
サーバー側の導入作業
ダウンロードしたjarファイルをサーバー側の/data/modsディレクトリ直下にコピーします。
次のように、今回はkubectl cpコマンドを使用します。
POD_NAME=$(kubectl get pod -n minecraft -l app.kubernetes.io/instance=minecraft-minecraft -ojsonpath='{.items[0].metadata.name}')
kubectl cp hmag-forge-mc1.20.1-9.0.25.jar minecraft/${POD_NAME}:/data/mods/
コピー後、次のコマンドでjarファイルが配置されていることを確認してください。
$ kubectl exec -n minecraft $POD_NAME -- ls -lah /data/mods/
total 1.9M
drwxrwxr-x 1 minecraft 3000 60 Jan 3 13:45 .
drwxrwxrwx 1 root root 530 Jan 3 13:45 ..
-rw-r--r-- 1 minecraft 3000 1.9M Jan 3 13:45 hmag-forge-mc1.20.1-9.0.25.jar
サーバーを再起動します。
kubectl rollout restart deployment -n minecraft minecraft-minecraft
これでサーバー側は準備完了です。
クライアント側の導入作業
クライアントにもjarファイルをコピーする必要があります。"起動構成"タブでforgeのインストールフォルダを確認します。その直下のmodsディレクトリにjarをコピーします。
デフォルトの設定では~/Library/Application\ Support/minecraft/modsになっているはずです。
その場合は、次のコマンドでjarをコピーしてください。
cp hmag-forge-mc1.20.1-9.0.25.jar ~/Library/Application\ Support/minecraft/mods/
MinecraftをLauncherから立ち上げ直し、再度"プレイ"ボタンをクリックし、"Mod"ボタンを押して、導入されたModを確認してください。
次の図のように"Hostile Mobs and Girls"が表示されればOKです。
では、マルチプレイでServerに接続します。インベントリを開くと、"Hostile Mobs and Girls"タブが増えていることがわかります。
このタブの中から何か一つスポーンエッグを選択します。ここでは"ジャイアントミイラ"を選択しました。
スポーンエッグを使用し、"ジャイアントミイラ"がスポーンされることを確認してください。
"Chucky" Mod
次はホラーモンスターのChuckyを登場させてみます。
次のModが見つかりました。ここでも1.20.1用のMod(chucky-1.0.1-forge-1.20.1.jar)をダウンロードします。
https://www.curseforge.com/minecraft/mc-mods/chucky/files/all?page=1&pageSize=20
このModはGeckoLibというMod共通のライブラリを使用しており、GeckoLib Modも合わせて導入しないとChuckyのロードに失敗します。
GeckoLibの1.20.1/Forge用のMod (geckolib-forge-1.20.1-4.7.jar)もダウンロードしてください。
https://www.curseforge.com/minecraft/mc-mods/geckolib/files/all?page=1&pageSize=20
Warning
GeckoLibを導入せずにChuckyだけを導入しようとすると次のようなエラーが表示されます。
java.lang.NoClassDefFoundError: software/bernie/geckolib/animatable/GeoEntity
サーバー側の導入作業
先程と同様にkubectl cpコマンドを使用して、ModのjarファイルをServer上の/data/modsディレクトリ直下にコピーします。
POD_NAME=$(kubectl get pod -n minecraft -l app.kubernetes.io/instance=minecraft-minecraft -ojsonpath='{.items[0].metadata.name}')
kubectl cp chucky-1.0.1-forge-1.20.1.jar minecraft/${POD_NAME}:/data/mods/
kubectl cp geckolib-forge-1.20.1-4.7.jar minecraft/${POD_NAME}:/data/mods/
コピー後、次のコマンドでjarファイルが配置されていることを確認してください。
$ kubectl exec -n minecraft $POD_NAME -- ls -lah /data/mods/
total 3.1M
drwxrwxr-x 1 minecraft 3000 176 Jan 3 14:18 .
drwxrwxrwx 1 root root 556 Jan 3 14:18 ..
-rw-r--r-- 1 minecraft 3000 265K Jan 3 14:18 chucky-1.0.1-forge-1.20.1.jar
-rw-r--r-- 1 minecraft 3000 981K Jan 3 14:18 geckolib-forge-1.20.1-4.7.jar
-rw-r--r-- 1 minecraft 3000 1.9M Jan 3 13:45 hmag-forge-mc1.20.1-9.0.25.jar
サーバーを再起動します。
kubectl rollout restart deployment -n minecraft minecraft-minecraft
これでサーバー側は準備完了です。
クライアント側の導入作業
クライアントにもjarファイルをコピーする必要があります。先程と同様にjarファイルをコピーします。
cp chucky-1.0.1-forge-1.20.1.jar ~/Library/Application\ Support/minecraft/mods/
cp geckolib-forge-1.20.1-4.7.jar ~/Library/Application\ Support/minecraft/mods/
MinecraftをLauncherから立ち上げ直し、再度"プレイ"ボタンをクリックしてください。
ホーム画面で"Mod"ボタンを押して、導入されたModを確認してください。 次の図のように"Chucky"と"GeckoLib 4"が表示されればOKです。
Chuckyのスポーンエッグが見当たらなかったので、summonコマンドでChuckyを召喚します。
Note
多分、"スポーンエッグ"タブの末尾にある
現在のユーザーがsummonコマンドを使えるようにするために、ユーザーにOperator権限を設定します。
ここでは、Server上のrcon-cliを使用して、op ユーザー名コマンドを実行します。ユーザー名を自分の名前に変え、次のコマンドを実行してください。
POD_NAME=$(kubectl get pod -n minecraft -l app.kubernetes.io/instance=minecraft-minecraft -ojsonpath='{.items[0].metadata.name}')
kubectl exec -n minecraft $POD_NAME -- rcon-cli op ユーザー名
Operator権限が付与されたら、Minecraftのプレイ画面で/summon chucky:chuckyコマンドを実行してください。
Chuckyが出現しました!
Forgeを使ったModサーバーをKubernetes上にインストールしました。他のModも試していきたいです。
ちなみにサーバー上へのModの配置はkubectl cpコマンドを使わないくて、ダウンロードリンクを次のようにhelm-value.yamlに記述しても良いです。
運用する際はこちらの方が便利でしょう。
---
minecraftServer:
# ...
modUrls:
- https://mediafilez.forgecdn.net/files/6045/363/hmag-forge-mc1.20.1-9.0.25.jar
- https://mediafilez.forgecdn.net/files/5834/748/chucky-1.0.1-forge-1.20.1.jar
- https://mediafilez.forgecdn.net/files/6027/567/geckolib-forge-1.20.1-4.7.jar
# ...
---