Ubuntu サーバーでレイトレーシング Minecraft を遊びたい！！！

GeForce RTX レイトレーシングに対応した Windows 10 版 Minecraft、出ましたね。
マルチプレイでは、7人までのフレンドと遊んだり、Realm サーバーを契約すれば人数無制限で遊べます。
でも、Realm サーバー、お金かかるじゃないですか？自前でサーバー、建てちゃいません？

ということで、Minecraft サーバー構築記録、第二弾。
統合版 (または Bedrock 版) のサーバーを Ubuntu マシンの上に構築していきます。

レイトレーシング有効ということは、サーバーへのリソースパックの追加にも対応！！！
Realm 以外のサーバーへのリソースパックの追加方法を書いた日本語記事は非常に珍しく( 筆者調べ )、
英語アレルギーの方にもやさしい記事となっています。
( そもそも自前でサーバーを建てる人はすでに英語に強いのではないか？ )

Java 版で構築した第一弾は[こちら](https://qiita.com/shiroinock/items/488b1128e919a5775ad2)。

## サーバーを動かしている環境
* OS : Ubuntu 20.04 LTS
* マシンスペック
    * CPU : intel core i7 4790k
    * Mem : DDR3 32GB 1866MHz
    * Network : auひかり 100mbps
    * 他、かつてのゲーム用自作PCを引退させて転用


## サーバーに導入しているもの
* 公式サーバープログラム
* レイトレーシング対応テクスチャのリソースパック

## 構築手順
構築完了後、外部から接続するためには、ルーターのポートフォワーディング設定とポート開放が必要です。
また、サーバーマシンのファイヤウォール等の設定を適切に行うことも推奨されます。
上記 2 行分の情報はたくさんネットに日本語で転がっているので省略します。

##### 1. 公式サーバープログラムの取得
α版らしく、動作については保証無し。
何が起こっても自己責任。
[英語版の公式](https://www.minecraft.net/en-us/download/server/bedrock/)から Ubuntu 用のファイル ( zip 形式 ) を取得、サーバーの目的のディレクトリにアップロード。
( [日本語版の公式](https://www.minecraft.net/ja-jp/download/server/bedrock/)はリンクが切れている？ )

```
pwd [Enter]
  ~/Minecraft/BedRock 　　　#サーバーを配置するディレクトリ。任意のディレクトリでよい

ls -l [Enter]
  bedrock-server-1.**.***.**.zip 　　　# * にはダウンロードしてきたバージョン番号

unzip bedrock-server-1.**.***.**.zip [Enter]
```

##### 2. 最初の起動
リソースパックを追加する対象のワールドを一度生成するため、
[英語版の公式](https://www.minecraft.net/en-us/download/server/bedrock/)ダウンロードページに記載されているコマンドを叩いて一度起動します。

```
LD_LIBRARY_PATH=. ./bedrock_server [Enter]
```
起動したことが確認できたら、サーバー内で `stop` コマンドを叩いて停止しましょう。

```
stop [Enter]
```

##### 3. リソースパックの追加
###### 3-1. ダウンロード
ここでは、NVIDIA 公式「[Minecraft with RTX: テクスチャ作成ガイド](https://www.nvidia.com/ja-jp/geforce/guides/minecraft-rtx-texturing-guide/)」より入手可能な
[サンプルテクスチャのリソースパック](https://images.nvidia.com/content/minecraft-with-rtx-beta-resource-packs/nvidia-pbr-example-texturesets-pixelart-0.9.mcpack)を例に、追加手順を記載します。

###### 3-2. 拡張子の変更
拡張子 .mcpack を、.zip に変更します。
(.mcpack のままブルクリックすると Minecraft クライアントが起動し、所有済みのリソースパックとして登録されます。)

###### 3-3. 解凍
手順 3-2. で作成した .zip ファイルを解凍します。

###### 3-4. マニフェストファイルの調査
3-3. で解凍したフォルダ内に、`manifest.json`ファイルがあるので、テキストエディタ等で開きます。

```manifest.json
{
    "format_version": 2,
    "header": {
        "name": "pack.name",
        "description": "pack.description",
        "uuid": "a1673412-cb04-4604-8000-04b6396afe80",
        "version": [ 0, 9, 0 ],
        "min_engine_version": [ 1, 16, 0 ]
    },
    "modules": [
        {
            "type": "resources",
            "uuid": "01296f82-dc2e-4628-be49-26dde5e2d1fb",
            "version": [ 1, 0, 1 ]
        }
    ],
    "capabilities" : [
            "raytraced"
    ]
}
```
`"header"`オブジェクト内、`"uuid"`と`"version"`の内容を控えます。
`manifest.json`ファイルは、編集せずに閉じます。

###### 3-5. サーバーへの配置
手順 3-3. で得たリソースパックのフォルダをまるごと、サーバーの `resource_packs` ディレクトリ配下に放り込みます。

###### 3-6. ワールドデータへのリソースパックの登録
サーバーの `worlds` ディレクトリ配下、`Bedrock level` ディレクトリにワールドデータが格納されています。
`Bedrock level` ディレクトリ配下に `world_resource_packs.json` ファイルを作成し、以下の内容を記載します。

```world_resource_packs.json
[
         {
                 "pack_id" : "a1673412-cb04-4604-8000-04b6396afe80",
                 "version" : [ 0, 9, 0 ]
         }
 ]
```
`"pack_id"`、`"version"`は、それぞれ手順 3-4. で控えた `"uuid"`と`"version"`の内容になります。

複数のリソースパックを追加する場合は以下のようにカンマで分けて記載すると良いらしいです。( 筆者未検証 )

```world_resource_packs.json
[
        {
                "pack_id" : "a1673412-cb04-4604-8000-04b6396afe80",
                "version" : [ 0, 9, 0 ]
        },
        {
                "pack_id" : "yasuo",
                "version" : [ 0, 7, 2 ]
        },
        {
                "pack_id" : "sona",
                "version" : [ 0, 8, 1 ]
        }
]
```


##### 4. 起動
```
LD_LIBRARY_PATH=. ./bedrock_server [Enter]
```
クライアントをサーバーへ接続した際、不足しているリソースパックのダウンロードが自動的に開始されたら構築完了です！
お疲れさまでした！！

## まとめと宣伝
やったぁ、できたわ。
ネットの海から情報の断片拾ってきて形にできたときの達成感 is プライスレス。
これでたくさんのプレイヤーとレイトレーシングの感動を分かち合いましょう。

私が Minecraft のサーバー構築を担当しているゲーム実況者集団『げまげま』の [YouTube](https://www.youtube.com/channel/UCqlE4G8u0Q2z7ZQlqn5LCSw)も、ぜひご覧ください！