--- title: Minecraft MOD Server (Forge)をKubernetesにインストールするメモ tags: ["Minecraft", "Java", "Kubernetes", "Forge", "MOD"] categories: ["Game", "Minecraft", "Forge"] date: 2025-01-03T17:25:44Z updated: 2025-01-07T00:47:17Z --- Minecraft(Java Edition)の醍醐味であるMODを導入してみます。今回は定番の[Forge](https://files.minecraftforge.net/net/minecraftforge/forge/)を試します。 [前回の記事](/entries/834)同様に、Kubernetesクラスタにはkindを使用します。本記事は、前記事の作業を一通り行い、一旦Minecraft Serverをアンインストールした時点から作業を開始する前提です。 **目次** ### Minecraft Serverのインストール 使いたいMODがMinecraft 1.21系未対応で、1.20.1まで対応しているものが多かったため、本記事ではMinecraftのバージョンは1.20.1にします。 次の`helm-values.yaml`を用意します。 ```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`コマンドでインストーラーを起動します。 ```bash java -jar forge-1.20.1-47.3.0-installer.jar ``` > [!NOTE] > `java`コマンドがない場合は、Javaのインストールが必要です。 > どのディストリビューションでも良いですが、個人的には[Bellsoft Liberica JDK](https://bell-sw.com/pages/downloads/#jdk-21-lts)がおすすめです。 インストーラーが起動したら、"Install client"を選択して、"OK"をクリック。 しばらくするとインストールが完了します。 MinecraftのLauncherを立ち上げると、起動構成が追加され"forge"が表示されるようになります。 "起動構成"タブに移動し、自動で追加された構成の名前を変えておきます。ここでは`forge 1.20.1`とします。 "プレイ"タブに戻って、"プレイ"ボタンをクリックします。 ホーム画面に"Mod"ボタンが表示されます。 "Mod"ボタンをクリックすると、初期状態はMinecraft自体とMod LoaderであるForge自体が表示されます。 ホームに戻って、"マルチプレイ"をクリックし、kindのサーバーを選択します。 > [!NOTE] > サーバーの追加は[前記事](/entries/834)で実施済みです。 初期状態で特に問題なくServerに入れることを確認します。 ### Modの導入 Forgeの準備がサーバー、クライアントともにできたので、早速Modを導入します。 #### "Hostile Mobs and Girls" Modの導入 次の記事を参考に、[Hostile Mobs and Girls](https://www.curseforge.com/minecraft/mc-mods/hostile-mobs-and-girls/)Modを導入してみます。 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`コマンドを使用します。 ```bash 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ファイルが配置されていることを確認してください。 ```bash $ 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 ``` サーバーを再起動します。 ```bash kubectl rollout restart deployment -n minecraft minecraft-minecraft ``` これでサーバー側は準備完了です。 ##### クライアント側の導入作業 クライアントにもjarファイルをコピーする必要があります。"起動構成"タブでforgeのインストールフォルダを確認します。その直下の`mods`ディレクトリにjarをコピーします。 デフォルトの設定では`~/Library/Application\ Support/minecraft/mods`になっているはずです。 その場合は、次のコマンドでjarをコピーしてください。 ```bash 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](https://ja.wikipedia.org/wiki/%E3%83%81%E3%83%A3%E3%83%83%E3%82%AD%E3%83%BC_(%E6%98%A0%E7%94%BB%E3%81%AE%E3%82%AD%E3%83%A3%E3%83%A9%E3%82%AF%E3%82%BF%E3%83%BC))を登場させてみます。 次の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](https://github.com/bernie-g/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`ディレクトリ直下にコピーします。 ```bash 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ファイルが配置されていることを確認してください。 ```bash $ 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 ``` サーバーを再起動します。 ```bash kubectl rollout restart deployment -n minecraft minecraft-minecraft ``` これでサーバー側は準備完了です。 ##### クライアント側の導入作業 クライアントにもjarファイルをコピーする必要があります。先程と同様にjarファイルをコピーします。 ```bash 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 ユーザー名`コマンドを実行します。`ユーザー名`を自分の名前に変え、次のコマンドを実行してください。 ```bash 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`に記述しても良いです。 運用する際はこちらの方が便利でしょう。 ```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 # ... --- ```