---
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をアンインストールした時点から作業を開始する前提です。

**目次**
<!-- toc -->

### 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"をクリックします。

<img width="1024" src="https://github.com/user-attachments/assets/c5441ad9-6fa7-4b0b-b3f3-61fa6ce87841" />

"SKIP"をクリックするとjarのダウンロードが始まります。

<img width="1024" src="https://github.com/user-attachments/assets/11d8e5eb-4529-4b07-a1ea-6ac7b3bfd274" />

`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"をクリック。

<img width="599" src="https://github.com/user-attachments/assets/a91aa7bc-26ef-4a90-93ff-75d8247d0328" />

しばらくするとインストールが完了します。

<img width="668" src="https://github.com/user-attachments/assets/4ce4044f-57d7-45f9-82b5-dc414a5b91ba" />

<img width="986" src="https://github.com/user-attachments/assets/a2a8f033-9752-43ad-942c-8c15e6cdfaaf" />

MinecraftのLauncherを立ち上げると、起動構成が追加され"forge"が表示されるようになります。

<img width="1024" src="https://github.com/user-attachments/assets/90bdd914-b7db-442b-87f3-78771c303b41" />

"起動構成"タブに移動し、自動で追加された構成の名前を変えておきます。ここでは`forge 1.20.1`とします。

<img width="1024" src="https://github.com/user-attachments/assets/0d5dfc64-dcd3-444a-a72e-532a53f2339d" />

"プレイ"タブに戻って、"プレイ"ボタンをクリックします。

<img width="1024" src="https://github.com/user-attachments/assets/fd1adb2a-8124-4aa7-bc1d-336a1a56253f" />

ホーム画面に"Mod"ボタンが表示されます。

<img width="966" src="https://github.com/user-attachments/assets/6d304a11-4e7a-4b51-8d3e-5f7c9fad88da" />

"Mod"ボタンをクリックすると、初期状態はMinecraft自体とMod LoaderであるForge自体が表示されます。

<img width="966" src="https://github.com/user-attachments/assets/50ed0b08-49bb-4e32-8309-38e13a38c23d" />

ホームに戻って、"マルチプレイ"をクリックし、kindのサーバーを選択します。

> [!NOTE]
> サーバーの追加は[前記事](/entries/834)で実施済みです。

<img width="966" src="https://github.com/user-attachments/assets/b7a5658c-8ecb-47c7-8006-8ec2bcd83d13" />

初期状態で特に問題なくServerに入れることを確認します。

<img width="966" src="https://github.com/user-attachments/assets/4e144e58-01f6-4dc2-9fac-957e89ce00fb" />

### 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`がダウンロードされます。

<img width="1024" src="https://github.com/user-attachments/assets/359992e4-50f1-44f2-93a0-baa8e1ac056f" />

##### サーバー側の導入作業

ダウンロードした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をコピーします。

<img width="1024" src="https://github.com/user-attachments/assets/221893a8-5b6c-446d-bf30-076b04e75b7d" />

デフォルトの設定では`~/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です。

<img width="966" src="https://github.com/user-attachments/assets/dea761a8-bfdf-4b2f-9633-7fc58453e030" />

では、マルチプレイでServerに接続します。インベントリを開くと、"Hostile Mobs and Girls"タブが増えていることがわかります。

<img width="966" src="https://github.com/user-attachments/assets/46a303e4-ef95-4919-b1f2-d8bc33d27c88" />

このタブの中から何か一つスポーンエッグを選択します。ここでは"ジャイアントミイラ"を選択しました。

<img width="966" src="https://github.com/user-attachments/assets/acb3b5a7-8455-4972-ad5d-3cb424bee9f0" />

スポーンエッグを使用し、"ジャイアントミイラ"がスポーンされることを確認してください。

<img width="966" src="https://github.com/user-attachments/assets/eb7a5844-3afb-4be8-a8e6-ed5f5ab0db72" />

#### "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

<img width="1024" src="https://github.com/user-attachments/assets/a9575b06-135a-41bb-a8b0-6eeec38caa35" />

この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

<img width="1024" src="https://github.com/user-attachments/assets/fe6bd089-d49e-489e-a529-f612d527efac" />

> [!WARNING]
> GeckoLibを導入せずにChuckyだけを導入しようとすると次のようなエラーが表示されます。
> 
> ```
> java.lang.NoClassDefFoundError: software/bernie/geckolib/animatable/GeoEntity
> ```
> <img width="384" src="https://github.com/user-attachments/assets/aa2d6787-1a66-4956-aa9c-70ac24be9159" />
>

##### サーバー側の導入作業

先程と同様に`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から立ち上げ直し、再度"プレイ"ボタンをクリックしてください。

<img width="1024" src="https://github.com/user-attachments/assets/afb837c7-30f4-48d3-9176-9301774a23c3" />

ホーム画面で"Mod"ボタンを押して、導入されたModを確認してください。 次の図のように"Chucky"と"GeckoLib 4"が表示されればOKです。

<img width="966" src="https://github.com/user-attachments/assets/06498bef-b74c-4a1e-9c25-412f7510320a" />

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`コマンドを実行してください。

<img width="966" src="https://github.com/user-attachments/assets/46324e86-cbc8-43c7-a255-8ac29cdd9024" />

Chuckyが出現しました!

<img width="966" src="https://github.com/user-attachments/assets/38e13692-9326-46e1-bb2f-430e4c3cfb3b" />

---

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