【1.19.4対応】スマホでMinecraftサーバーを作る方法

皆さんは、こう思ったことはありませんか？
「Minecraftサーバーをスマホで立ち上げたい！」
...え？ない？
今回はそんなお悩み(?)に対処するため、色々調べました(~~暇だったので調べてたら面白そうなのが出てきたのでQiitaにも書こうかなと思いました~~)
今回はこちらのWebサイトを参考にさせていただきました。

https://hone-choko.com/blogs/t/android-linux-2

## 完成形
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3331783/888206e6-e3f4-d8fd-60e5-c9d9625b6b18.png" width="250" alt="CompletelySmartPhonePicture"></img>
こんな感じです。
```bash
[17:05:55 INFO]: Timings Reset
```
と出ているので、ちゃんと起動できていることが分かります。

PCのJava版からアクセスするとこんな感じ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3331783/a81818a7-1a04-0457-ad16-763c76b6d78d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3331783/f3ea4d29-c09f-316d-c9e4-59c307255c3a.png)
静止画だとわかりませんが、一人だと快適に遊べるくらいではあったようです。


# 前提、環境
ホスト機(サーバー起動するスマホ)：Rakuten Hand P710
それにSSHとMinecraft Java版でアクセスするPC：Windows11 Core i9-12900H、RTX 3070Ti


次の章からは実際の手順を示します。

# 構築編① termuxをインストールしよう

**警告**：自分は大丈夫でしたが、F-Droidからアプリをダウンロードすることは少なからずリスクがあります。**すべて自己責任**で行ってください。

APKをAndroidにインストールしてください
(この際、Google Play Store版はバージョンが古いらしいのでF-Droidからダウンロードしてください。)

https://f-droid.org/packages/com.termux/

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3331783/192de42c-2dc6-8a0b-4879-8f81f8f7ca99.png" width="250"　alt="fdroid_termux_link"></img>
下の方にスクロールすると、**APKをダウンロード**というリンクがあるはずなのでそれを押してください。
(現時点2023/5/23ではバージョン0.118.0が最新)
ダウンロードできたら「開く」→「インストール」を押してください。
この時に、「不明な発行元のアプリはインストールできません」と言われたら、
[このページ](https://android-smart-phone.com/20180214/)を参考にして許可してあげてください。

**不明な発行元のアプリをインストールできる状態にしておくことは、セキュリティ上の観点から好ましくありません。このアプリをインストールした後は、必ず設定からオフにしておいてください。**
インストールしたら、termuxのアイコンがホーム画面に追加されているはずですので、それを押して起動してください。
起動すると、
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3331783/ed6294ab-66ba-4549-c43e-3a2c7582bc66.png" width="250"></img>
このような画面になると思います。
この画面が出てくることを確認すれば、①のtermux導入は完了です。お疲れさまでした。
# 構築編② termuxにubuntuをインストールしよう
①でインストールしたtermux上で作業することになります。
次のコマンドを実行してください。
```bash
$ termux-setup-storage
```
このコマンドを実行すると、termuxにストレージの許可を求められますが、許可してください。
success的な文章が表示されたら(~~なんじゃそりゃ~~)
```bash
$ pkg update
$ pkg upgrade
```
この二つのコマンドは、いろいろアップデートするコマンドなので、多分しなくてもいけるはず(要検証)ですがしておいてください。
次に、SSHの設定などをします。これは、別にしなくてもスマホ本体からやれば大丈夫ですが、PCなどの画面から操作したい場合、SSHの設定をすると楽に接続できます。
### (やらなくてもいい)TermuxでのSSH設定
```bash
$ pkg install openssh
```
このコマンドでSSHをインストールします
次にこのコマンドでSSHサーバーを起動してください。
```bash
$ sshd
```
次に、UIDとIPアドレスを確認します。
```bash
#IPアドレス確認
$ ip -4 a
#↓実行例
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
30: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 3000
    inet 192.168.1.10/24 brd 192.168.1.255 scope global wlan0
        #↑この192.?.?.?.?(この例だと192.168.1.10)がIPアドレス
       valid_lft forever preferred_lft forever
```
ここでIPアドレスをメモしたら、次にUIDを確認します。
```bash
$ id
#↓実行例
uid=10000(u0_a000) gid=10000(u0_a000) groups=10000(u0_a000),0000(inet),0000(everybody),00000(u0_a000_cache),00000(all_a000)
         #↑u0_a???の部分(今回だとu0_a000)がUIDになる
```
(勿論ですがこれはUIDを伏せてあるので実際には000が123になったり521になったりすると思います)
最後にSSHのパスワードを設定します
```bash
$ passwd 
#↓実行例
New password: #ここで何も入力されていないように見えても、ちゃんと入力されているので気にせず進めてください
Retype new password: #ここも上と同様でパスワードは見えませんが、ちゃんと入力されています。
New password was successfully set.
```
これでsshの設定は完了したので、PCなどを立ち上げてSSHコマンドを打ってみましょう。
```bash
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

新機能と改善のために最新の PowerShell をインストールしてください!https://aka.ms/PSWindows

PS C:\Users\0266st> ssh -p 8022 u0_a000@192.168.1.10
#                                ↑UID   ↑IPアドレス
#この例ではUIDがu0_a000、IPアドレスが192.168.1.10という体で行っています。
#↓実行例
u0_a000@192.168.1.10s password: #passwdの時と同じく、見えないが入力はされているので続ける
# 正しくパスワードを入力すればこのようになるはずです。
Welcome to Termux!

Community forum: https://termux.com/community
Gitter chat:     https://gitter.im/termux/termux
IRC channel:     #termux on libera.chat

Working with packages:

 * Search packages:   pkg search <query>
 * Install a package: pkg install <package>
 * Upgrade packages:  pkg upgrade

Subscribing to additional repositories:

 * Root:     pkg install root-repo
 * X11:      pkg install x11-repo

Report issues at https://termux.com/issues

~ $
```
**注意**：指定したUIDが間違っていても間違っているというメッセージは表示されません。アクセスできないと言われます。
アクセスできないというエラーが発生した際は、UIDがあっているかどうか、ちゃんとパスワードを設定していたかどうかを確認してください。
これでSSHの設定は完了です。
次からubuntuのインストールに戻ります。

### ubuntuのインストール(続き)
ここからは一応PCからの作業で記事を書いています。しかし、スマホでも手順通りにやればSSHはいらないはずなのでやってみてください。
```bash
$ pkg install wget openssl-tool proot -y
$ hash -r
$ wget https://raw.githubusercontent.com/EXALAB/AnLinux-Resources/master/Scripts/Installer/Ubuntu/ubuntu.sh
$ bash ubuntu.sh
```
これは[AnLinux-Resources](https://github.com/EXALAB/Anlinux-Resources/tree/master/Scripts/Installer)のLinuxを使用する方法だそうです。
上のコマンドを4つ実行すると、最後に
```bash
You can now launch Ubuntu with the ./start-ubuntu.sh script
```
と出てくると思うので、それが出てきたら、
```bash
$ ./start-ubuntu.sh
```
でUbuntuを起動します。
すると、表示が
```bash
root@localhost:~#
```
に変わります。
これで無事にubuntuがインストールできました。お疲れさまでした。
次はここにJavaのインストールとPaperなどのインストールを行っていきます。
# 構築編③ JavaとPaperのインストールをしよう
ここでは、Javaとサーバー本体であるPaperをインストールします。
まずはJavaをインストールします。次のコマンドを実行してください。
```bash
root@localhost:#~ apt install openjdk-17-jvm
```
インストールが終了したら
```bash
root@localhost:#~ java -version
#↓実行例
openjdk version "17.0.7" 2023-04-18
OpenJDK Runtime Environment (build 17.0.7+7-Ubuntu-0ubuntu122.04.2)
OpenJDK 64-Bit Server VM (build 17.0.7+7-Ubuntu-0ubuntu122.04.2, mixed mode, sharing)
```
このようにバージョン情報が出てくればOKです。
これでJavaのインストールが完了しました。
次にPaperをダウンロードします。
PaperはMinecraftのModが使えるサーバーの一種で、軽いのでこのサーバーを使います。
wgetでjarファイルを持ってきます。
Paperはここからダウンロードできますが、コマンドライン操作しかないので、jarファイルのURLをwgetで指定してダウンロードさせます。
今(2023/5/23)現在、最新バージョンは1.19.4なので、
https://api.papermc.io/v2/projects/paper/versions/1.19.4/builds/538/downloads/paper-1.19.4-538.jar
このアドレスですが、更新された場合、
[Paperダウンロードページ](https://papermc.io/downloads/paper)
ここにある
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3331783/fbed4023-2b2f-cb53-995e-5fbb927c0ae6.png)
Paper 1.?.?の青いボタン部分を右クリック→リンクアドレスをコピーからコピーしたリンクを使用してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3331783/e7efdc8d-80e9-aae2-f4f1-0d544fd9e458.png)
URLを取得できたら、SSHに戻り、
```bash
root@localhost:#~ wget https://api.papermc.io/v2/projects/paper/versions/1.19.4/builds/538/downloads/paper-1.19.4-538.jar
                      #↑ここの部分を取ったURLに置き換える
```
を実行し、paper-1.?.?-???.jarを取得します。
取得できたら、mvコマンドを使用して名前を変更します。(自分はserver.jarにしました)
```bash
root@localhost:#~ mv ./paper-1.19.4-538.jar ./server.jar
                      #↑取ったファイルの名前    ↑変更後の名前
```
ここまで出来たらあともう少しです。
```bash
root@localhost:#~ java -jar server.jar
                           #↑変更したファイル名
```
これでしばらく待つと、エラーが出てきます。
しかし、心配しないでください。
```bash
root@localhost:#~ ls
banned-ips.json      commands.yml  libraries        plugins            usercache.json        world
banned-players.json  config        logs             server.jar         version_history.json  world_nether
bukkit.yml           eula.txt      ops.json         server.properties  versions              world_the_end
cache                help.yml      permissions.yml  spigot.yml         whitelist.json
```
lsコマンドを打つと、ちゃんとeula.txtなんかがあることが分かります。
これをviエディタなんかで編集(初心者の方にはクセが強くて使いづらいと思いますがLinuxのお勉強だと思って頑張ってみてください)
viエディタを使用するために、
```bash
root@localhost:#~ apt install vim
```
からvimをインストールし、
[このサイト](http://linux.kororo.jp/cont/intro/vi_editor.php)を参考にしてViエディタを使い、

```
eula=false
```
から、
```
eula=true
```
に変更してみてください。
変更ができたら、esc→:wqで保存し、
もう一度
```bash
root@localhost:#~ java -jar server.jar
```
で起動してみてください。
道中、root権限で起動する意味ないよーみたいなメッセージや、「file not found or not readable」エラーなどが表示されますが、無視しても大丈夫そうだったので無視しました。
気になる人はユーザーを追加してやってみるといいかも？

これで最後に
```
[17:05:55 INFO]: Timings Reset
```
など出れば、完了です。
入る際は
スマホのIPアドレス、ポートは25565(既定の場合)で入ることができました。
これでMinecraftサーバーを動かすことができました。
最後までお疲れさまでした。
# ついでに
プラグインを入れる際はwgetでpluginsフォルダに入れればいいだけです。
(プラグインを入れる際はwgetでjarファイル自体のURLを指定してください)
```bash
root@localhost:#~ cd plugins
root@localhost:#~ wget #プラグインのURLをここに
```