---
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
# ...
---
```