Android スマホだけで Minecraft Skript の実行環境を構築する

## この記事のねらい

Minecraft 楽しいですよね。
そして独自要素を追加したらもっと面白い…。
Skriptという専用のプログラミング言語を用いることで簡単に自作プラグインを作ってサーバーに導入することができます。
「でも PC がないからサーバーは無理かな…」という方もいらっしゃるでしょう。
大丈夫です！スマホ上でもサーバーを動かして統合版でログインする方法はあります。
それでは早速やっていきましょう！

## 前提知識

できるだけ前提知識なしで行えるように書いたつもりです。
ただし、ターミナル上での文字ベースの操作が多いため、慣れていない人にとっては難しいかもしれません。
「[Linuxの基本的なコマンドを解説してみた](https://qiita.com/john_HC20230703/items/e9f53722444e96fea525)」の記事が参考になると思います。

https://qiita.com/john_HC20230703/items/e9f53722444e96fea525

## 必要なもの

事前に用意するものは次の2つです。

* Android スマホ ― メモリは 4 GB 以上推奨。 これよりメモリが小さくても動くことはありますが、クラッシュするリスクが高まります。また、多くのファイルをダウンロードするのでストレージに余裕 (1 GB 程度) があると良いでしょう。root 化は不要です。
* テキストエディタアプリ ― Skript ファイルなどを編集・保存するために使います。下のいずれかのものです。
  - [QuickEdit](https://play.google.com/store/apps/details?id=com.rhmsoft.edit)
  - [Jota+](https://play.google.com/store/apps/details?id=jp.sblo.pandora.jota.plus)
  - その他、テキストファイルを編集して保存できるもの
* Minecraft 統合版
* 時間 ― 多くの手順を行う必要があるので1時間ほどかかると思います。

これから以下のソフトウェアおよびプラグインを準備します。

* AnLinux, Termux ― Android 上の Linux エミュレータ
* nano ― Linux のターミナル上でファイルを編集するためのテキストエディタ
* PaperMC ― 軽量でプラグインを導入できる Minecraft Java 版のサーバーソフトウェア
* Geyser, Floodgate ― 統合版プレイヤーを Java 版のサーバーに参加させるプラグイン
* tmux ― 1つのターミナルで複数のターミナルを開くことができます。
* playit.gg ― ポート開放をせずにサーバーにアクセスできるようにします。

## 検証環境

* Sumsung Galaxy A52 5G
* Windows 11 上の Minecraft 統合版

## 手順

### AnLinux のインストール

Android スマホで Play ストアから [AnLinux](https://play.google.com/store/apps/details?id=exa.lnx.a) をインストールし、開きます。

https://play.google.com/store/apps/details?id=exa.lnx.a

同意事項が表示されるので、「I Understand」にチェックを入れ、「CLOSE」を押します。
![AnLinuxの同意事項の確認画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3529068/0de5bf5c-e323-94ed-307b-ca9bf5e46f94.jpeg)

左のハンバーガーメニューの「Dashboard」を選択し、画面に表示される Step 1 ～ 3 に従います。

1. 「CHOOSE」を押し、「Ubuntu」にチェックを入れ、「OK」とします。
2. 後で使うためのコマンドを「COPY」ボタンを押してコピーします。
3. 「LAUNCH」を押します。そうするとこのポップアップが出てきます。

「Yes」を押すと、ブラウザが開き、 F-Droid のウェブサイト上で [Termux のダウンロードページ](https://f-droid.org/en/packages/com.termux/)が表示されます。

### Termux のインストール

:::note warn
ここではブラウザから APK ファイルをダウンロードする形となるので自己責任でのインストールとなります。
:::

先ほど開いた[ダウンロードページ](https://f-droid.org/en/packages/com.termux/)を下にスクロールし、最新版 (2023年8月31日現在では Version 0.118.0) のダウンロードを、「Download APK」をタップして行います (「DOWNLOAD F-DROID」ではないので注意)。

APK ファイルなので、「有害なファイルな可能性があります」と表示されることがありますが、ダウンロードを続行します。
ダウンロードしたファイルを開こうとすると、セキュリティ上の理由によりインストールを止められることがあります。設定に移動し、使用しているブラウザが不明なアプリをインストールする権限をオンにします。
権限がオンになったら、Termux のインストールを実行します。

:::note
インストールが終わったら、安全のため、先ほどブラウザに与えた権限は無効にすると良いでしょう。
:::

### Ubuntu のセットアップ

先ほどインストールした Termux を開きます。
このようなターミナル画面が出てきます。
![初回起動時のTermux](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3529068/ed1acecc-18c0-72a7-16ff-dbca351d8cc9.jpeg)

ここからはこのターミナル画面上で操作を行います。
画面を長押しして先ほどコピーしたテキストをペースト (Paste) し、改行します。
このような確認が出てきますが、そのままエンターキーを打ちます。
![Screenshot_20230830_222821_Termux.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3529068/8c295602-c0b2-3c37-c1be-9faf310b3c0a.jpeg)

しばらくログが流れ、ターミナルがこのような状態となります。
左下に `~ $` という文字列 (コマンドプロンプトと呼びます) が表示されると、入力を受け付けるようになった合図です。
![コマンドをペーストした後のTermux](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3529068/b277b5e3-3867-857e-498c-85e71daa8d43.jpeg)

そこで、以下のコマンドを入力します。
```bash
pkg update && pkg install nano
```
上のテキストを打ち込むか、コピー&ペーストした後、エンターキーを押下します。
途中で数回、先ほどのような確認が出てきますが、いずれもそのままエンターキーを打ちます。
これでターミナル上で nano というテキストエディタを使うことができるようになりました。

nano のインストール後、
```bash
nano start-ubuntu.sh
```
と入力すると、このような画面になるはずです。
「↑」「←」「↓」「→」の矢印キーでカーソルを移動できます。
赤枠で囲った行に移動しましょう。
![nano で start-ubuntu.sh を開いた状態](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3529068/8d47b19f-1f48-b2cc-43f4-f3c51673a168.jpeg)

下のように書いてある行です。
```bash
#command+=" -b /data/data/com.termux/files/home:/root"
```

先頭の `#` を削除します。
つまり、こうなります。
```bash
command+=" -b /data/data/com.termux/files/home:/root"
```

ターミナル画面の左下に `^X Exit` と書いてありますね。
`^` は CTRL キーを示しています。
CTRL + X で nano を終了できるという意味です。

Termux の画面にはこのように「CTRL」とありますね。
![Termux の CTRL キー](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3529068/c8aae930-163e-37c0-5776-7613defe183e.jpeg)

「CTRL」を押してから、「x」と打って nano を終了しましょう。
`Save modified buffer?` (変更を保存しますか) と聞かれるので、「y」と打ち、エンターキーを打ちます。

変更を保存できたら
```bash
./start-ubuntu.sh
```
を入力します。

そうすると、コマンドプロンプトが `root@localhost:~#` に変わり、Ubuntu が起動したことがわかります。

:::note
スマホの再起動や `exit` コマンドによって Ubuntu が終了した (コマンドプロンプトが `~ $` に戻った) 場合、
```
./start-ubuntu.sh
```
を再度入力することで Ubuntu を起動することができます。
:::

### Java のインストール

サーバーを動かすには Java のインストールが必要です。
以下のコマンドを順に実行しましょう。

:::note
1つのコマンドを入力した後、次にコマンドを入力するにはコマンドプロンプト (`root@localhost:~#`) が表示されてからにする必要があります。
辛抱強く待ちましょう。
:::

まず、
```bash
apt update
```
次に、
```bash
apt upgrade
```
を入力します。
途中で `Do you want to continue?` と聞かれますが、そのままエンターキーを打って大丈夫です。

そして、
```bash
apt install openjdk-17-jdk
```
を入力します。
同じような質問をされるので、同じようにエンターキーを打ちます。

終わったら、
```bash
java -version
```
と入力して、Java がインストールできていることを確認します。

:::note
私の環境でこのコマンドを実行すると、以下のように表示されました。
```
openjdk version "17.0.8.1" 2023-08-24
OpenJDK Runtime Environment (build 17.0.8.1+1-Ubuntu-0ubuntu122.04)
OpenJDK 64-Bit Server VM (build 17.0.8.1+1-Ubuntu-0ubuntu122.04, mixed mode, sharing)
```
:::

### PaperMC の用意

サーバーのファイルを入れるために `mc` という名前のディレクトリ(フォルダ)を作ります。
次のコマンドを入力します。
```bash
mkdir mc
```
```bash
cd mc
```
コマンドプロンプトが `root@localhost:~/mc#` に変わり、 `mc` ディレクトリを開いた状態になりました。

次に、ブラウザで [Paper のダウンロードページ](https://papermc.io/downloads/paper) を開いてください。

https://papermc.io/downloads/paper

最新版のダウンロードリンクが青色のボタンで示されています。
このボタンを長押しして、リンクアドレスをコピーします。
Termux に戻り、`wget` と打った後、スペースキーを打ち、コピーしたアドレスをペーストしてエンターキーを打ちます。

:::note
例えば、2023年8月31日現在の最新版 (Paper 1.20.1 Build #169) をダウンロードするには次のようなコマンドになります。
```
wget https://api.papermc.io/v2/projects/paper/versions/1.20.1/builds/169/downloads/paper-1.20.1-169.jar
```
:::

ダウンロードできたら、以下のコマンドを順に実行します。
```bash
echo \#\!/bin/bash > run.sh
```
```bash
echo java -jar `echo paper-*.jar` >> run.sh
```
```bash
chmod +x run.sh
```

これでサーバーを起動するためのファイルをダウンロードおよび作成できました。
```bash
ls
```
というコマンドを打って、`mc` ディレクトリの中にあるファイルを確認します。
ダウンロードした Paper の JAR ファイルと、 `run.sh` というファイルが見つかるはずです。

`run.sh` の中身を確認しましょう。
```bash
cat run.sh
```
と入力します。
下のようになっていたらOKです。
```bash
#!/bin/bash
java -jar paper-□.□.□-□.jar
```
※ `□.□.□-□` は Paper のバージョン番号

### サーバーの起動

いよいよ Paper サーバーを動かします。
```bash
./run.sh
```
と入力しましょう。
なにやらログが流れてきますがすぐに終了しますね。
```bash
ls
```
コマンドで確認すると色々なファイルが作られていることが分かります。
EULA (エンドユーザーライセンス契約) に同意して `eula.txt` というファイルを書き換える必要があるらしいです。

[QuickEdit](https://play.google.com/store/apps/details?id=com.rhmsoft.edit) または [Jota+](https://play.google.com/store/apps/details?id=jp.sblo.pandora.jota.plus) などのテキストエディタアプリで `eula.txt` を開きます。

:::note
* QuickEdit の場合、右上のファイルアイコン＞開く (SAF)＞左上のハンバーガーメニュー「≡」＞「Termux」＞「mc」＞「eula.txt」をタップしてください。
* Jota+ の場合、右下のファイルアイコン＞左上のハンバーガーメニュー「≡」＞「Termux」＞「mc」＞「eula.txt」をタップしてください。

ファイルの開き方は環境により異なる場合があるので注意してください。
:::

いちばん下の行に
```
eula=false
```
とあるので、
```
eula=true
```
に書き換えて上書き保存します。

:::note
* QuickEdit の場合、右下のフロッピーアイコンをタップしてください。
* Jota+ の場合、下の「Save」をタップしてください。
:::

保存できたら、Termux に戻ります。
再度
```bash
./run.sh
```
を実行します。

このように「Done」と表示が出ていればサーバーの起動を完了できています。
`>` は、Minecraft のコマンドを受け付けるコマンドプロンプトです。
![Minecraft サーバーのコマンドプロンプト](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3529068/8ec00b02-54d5-41e2-5cd5-e82fabe4a97e.jpeg)

まだプラグインの導入作業が残っているので
```
stop
```
と入力してサーバーを停止します。

### プラグインのダウンロード

```bash
ls
```
と打つとさらにファイルが増えていますね。
その中に `plugins` というディレクトリがあります。
これからこのディレクトリの中にプラグインを入れます。

```bash
cd plugins
```
と入力し、`plugins` ディレクトリを開きます。

#### Skript

[Skript のダウンロードページ](https://github.com/SkriptLang/Skript/releases/latest) を下にスクロールし、「Assets」から「Skript-(バージョン名).jar」(2023年8月31日現在では「Skript-2.6.4.jar」) と書かれているリンクのアドレスをコピーします。

https://github.com/SkriptLang/Skript/releases/latest

Termux に戻り、PaperMC をダウンロードしたときと同様に、`wget` と打った後、スペースキーを打ち、アドレスをペーストしてエンターキーを打ちます。

:::note
2023年8月31日現在、コマンドは次のようになります。

```bash
wget https://github.com/SkriptLang/Skript/releases/download/2.6.4/Skript-2.6.4.jar
```
:::

#### Geyser, Flooadgate

統合版で Java 版のサーバーにログインする場合、Geyser と Floodgate が必要です。

Geyser の最新版をダウンロードするには、次のコマンドを入力します。
```bash
wget https://ci.opencollab.dev//job/GeyserMC/job/Geyser/job/master/lastSuccessfulBuild/artifact/bootstrap/spigot/build/libs/Geyser-Spigot.jar
```

Floodgate の最新版をダウンロードするには、次のコマンドを入力します。
```bash
wget https://ci.opencollab.dev//job/GeyserMC/job/Floodgate/job/master/lastSuccessfulBuild/artifact/spigot/build/libs/floodgate-spigot.jar
```

#### ダウンロードの確認

```bash
ls
```
と入力すると、bStats (Paper サーバー付属の機能) と、 Geyser, Skript, FloodGate があるのを確認できます。

### プラグイン導入状態でサーバー起動

```bash
cd ~/mc
```
を入力して `mc` ディレクトリに戻ります。

```bash
./run.sh
```
でサーバーを起動してみます。

Skript, Geyser, Floodgate がメッセージを表示していたら、正しくプラグインを導入できていることを示しています。
「Done」が表示されてから Geyser が必要なファイルをダウンロードする場合があるので、ダウンロードが終わるまでしばらく待って
```
stop
```
を入力します。

### Geyser, Floodgate の設定

テキストエディタを開きます。

`mc` ＞ `server.properties` を開き、以下の行の `true` を `false` に書き換えて保存します。
```properties
enforce-secure-profile=true
```

つまり、次のようにします。
```properties
enforce-secure-profile=false
```

さらに、`mc` ＞ `plugins` ＞ `Geyser-Spigot` ＞ `config.yml` を開き、以下の `online` を `floodgate` に書き換えます。
```yaml
  # Authentication type. Can be offline, online, or floodgate (see https://github.com/GeyserMC/Geyser/wiki/Floodgate).
  # For plugin versions, it's recommended to keep the `address` field to "auto" so Floodgate support is automatically configured.
  # If Floodgate is installed and `address:` is set to "auto", then "auth-type: floodgate" will automatically be used.
  auth-type: online
```

つまり、次のようにします。
```yaml
  # Authentication type. Can be offline, online, or floodgate (see https://github.com/GeyserMC/Geyser/wiki/Floodgate).
  # For plugin versions, it's recommended to keep the `address` field to "auto" so Floodgate support is automatically configured.
  # If Floodgate is installed and `address:` is set to "auto", then "auth-type: floodgate" will automatically be used.
  auth-type: floodgate
```

### tmux のインストール

```
apt install tmux
```
を実行して tmux をインストールします。
`Do you want to continue?` と聞かれますが、そのままエンターキーを打ちます。

インストールできたら
```
tmux
```
と入力して tmux を起動します。

下にこのような緑色のステータスバーが表示されるようになります。
![tmux を起動した状態](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3529068/670f83ca-65c7-9c5e-0801-ba0068e08e8c.jpeg)

### playit.gg のセットアップ

ハードウェアのアーキテクチャを調べます。
```bash
uname -m
```
このコマンドを実行すると、使っているスマホのアーキテクチャが表示されます。

:::note
私の場合は
```
aarch64
```
でした。
:::

ブラウザで [playit.gg のログインページ](https://playit.gg/login) を開き、いちばん下の「Create an Account」からアカウントを作成します。

https://playit.gg/login

メールアドレスと新規作成したパスワードを入力し、「Create」をタップすると、メールが届きます。
「Verify Email」リンクを開き、メールアドレスを認証します。
リンク先に「Downloads found [here](https://playit.gg/download).」とあるので、「[here](https://playit.gg/download)」のリンク先に移動します。

「Linux」のタブから、一致するアーキテクチャのリンクアドレスをコピーします。

例によって、Termux 上で `wget` とスペースキーを打ち、コピーしたアドレスをペーストし、エンターキーを押します。
これで playit のファイルがダウンロードできます。

以下のコマンドを入力します。
```bash
chmod +x playit-*
```
```bash
./playit-*
```

いちばん上に URL が表示されるので、これをコピーしてブラウザからアクセスし、ページ右下に「Create Tunnel」が現れるのを待ってそれをタップします。
![Step 4: The playit program is setup, what next? -- Create Tunnel](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3529068/0671aa9b-5d7c-baf9-d9a6-8605f99f872a.jpeg)

このような画面に移動するので、「Tunnel Type」から「Minecraft Bedrock (game)」を選び、「Add Tunnel」を押します。
![playit.gg の tunnal 追加画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3529068/577752f0-307d-a667-beb9-3137a7dee059.jpeg)

そうすると、この画像のような表記が出てきます (実際の表記を黒塗りしています)。
![playit.gg のサーバーアドレスとポートの表記](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3529068/41a77e2b-73ce-f71b-edb7-18dd646f0b6e.jpeg)

例えば「198.51.100.0:12345」のように、3つの小数点と1つのコロン「:」の付いた数字の羅列があります。
この例ではコロンの前の「198.51.100.0」が「サーバーアドレス」で、コロンの後の「12345」が「ポート」です。
あとで見返せるようにこの playit.gg のページを開いたままにしておくか、これらの数字をメモしておきます。

### Skript の作成

Tmux 上で「CTRL」「b」「c」を順に打つことで新しいターミナルを開きます。
そこで次のコマンドでスクリプトを入れるディレクトリに移動し、`hello.sk` という名前の新しいファイルを作成します。
```bash
cd plugins/Skript/scripts
```
```bash
touch hello.sk
```

QuickEdit または Jota+ などのテキストエディタを開きます。
`eula.txt` を編集したときと同じようにファイルアイコンをタップします。
`mc` ＞ `plugins` ＞ `Skript`＞ `script` ＞ `hello.sk` で今作成したファイルを開きます。

試しにこのファイルに以下のような内容を書き込み、保存します。
```
on join:
    broadcast "%player's name%: Hello, world!"
```

### ついにログイン！

Termux に戻ります。
```
./run.sh
```
と入力してサーバーを起動します。

統合版 Minecraft で「サーバーを追加」から playit.gg のサイトに示された「サーバーアドレス」と「ポート」を入力し、「保存」して「サーバーに接続」します。
「サーバー名」は何でもかまいません。
![Minecraft 上の外部サーバー編集画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3529068/a1b8cf1b-866f-0670-3733-31006a996c19.png)

ログインするとチャット欄にあなたのプレイヤー名と「Hello, world!」が表示されます。
晴れてスマホ上で Skript を実行できましたね！
![スクリーンショット (45).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3529068/b1ada6b0-0ba3-1851-148e-9a878512c9a4.png)

## サーバーの起動と終了の方法

### サーバーの終了

ずっとスマホ上でサーバーを動かし続ける訳にはいかないのでサーバーを終了します。

Termux 上で Minecraft のサーバーがコマンドプロンプト (`>`) を表示してコマンドを受け付けているので、
```
stop
```
を入力します。

コマンドプロンプトが `root@localhost:~/mc` に戻ったら、
```
tmux kill-server
```
を入力します。
緑色のステータスバーが消えて tmux が終了したことを確認します。

```
exit
```
を入力すると、 Ubuntu が終了してコマンドプロンプトがさらに `~ $` に戻ります。

もう一度
```
exit
```
を入力し、「press Enter」と表示された場合はエンターキーを打ちます。
Termux アプリが終了します。

ブラウザで [playit.gg の管理画面](https://playit.gg/account/tunnels) を開き、青色の背景になっている「Minecraft Bedrock」をタップします。
そして、「disable tunnel」と書かれたボタンをタップします。

:::note
画面の横幅が狭いため、「disable tunnel」ボタンが表示されない場合があります。
この場合はスマホ画面を横向きにしてください。
:::

### サーバーの起動

Termux アプリを起動します。
コマンドプロンプトが `~ $` となっていることを確認します。

```
./start-ubuntu.sh
```
と入力して Ubuntu を起動すると、コマンドプロンプトが `root@localhost:~#` となります。

`mc` ディレクトリに移動するため、
```
cd mc
```
と入力すると、コマンドプロンプトが `root@localhost:~/mc#` となります。

```
tmux
```
と入力します。
下に緑色のステータスバーが表示されます。

```
./playit-*
```
と入力し、playit.gg を起動します。

「CTRL」「b」「c」を順に打って新しいターミナルを開き、
```
./run.sh
```
と入力します。

ブラウザで [playit.gg の管理画面](https://playit.gg/account/tunnels) を開き、赤色の背景になっている「Minecraft Bedrock」をタップします。
そして、「enable tunnel」と書かれたボタンをタップします。

これでまたサーバーにログインできます。

## 参考にしたサイト

https://www.xda-developers.com/run-minecraft-server-android/

https://qiita.com/tatuya911/items/840107699190451a4651

https://yaaaa.net/playit-gg/

https://mcpoteton.com/mcplugin/geysermc