マイクラサーバーを動かす

# 初めに

この記事ではminecraft serverを使用してワールドを生成するまでの流れを説明します．
この記事にほしい情報がなくても，マイクラサーバーを構築する方法は検索すればたくさん出てくるので，いろんな記事やサイトを見てください．

また，使用OSはLinux系を想定しています．私の環境だとWSLのUbuntu 22.04.1です．ただ，OSに大きく依存するようなことはしていないはずです．そのため，WindowsやMacでも問題ないかと思います．ただ，java17以降が必要になりますので，特にWindowsはPATHの設定をする必要があるかと思います．このあたりの話は触れませんので，ご自身でどうにか頑張ってください．ともかく，java17以降が使えれば問題ないです．


# minecraft server

## 概要

minecraft serverとは，[minecraft](https://www.minecraft.net/ja-jp/about-minecraft)をマルチプレイ，複数人で同時に同じワールドで遊ぶことができるものです．なので，お友達と一緒にマイクラで遊びたいときに利用しましょう．

## javaのインストール
マインクラフトでは最新バージョンで遊ぶなら，java17以降が必要です．2022/12/7現在の[open jdk](https://openjdk.org/)のlatestはjava19なので最新版のjavaが入っていれば問題ないです．
javaの詳しいインストール方法は別のサイトや記事を探してください．

## ダウンロード

さて，minecraft serverをダウンロードしてjarファイルをjavaで実行すれば遊べるには遊べますが，サーバーには種類があるそうです．[【最新版対応】誰でも簡単にマイクラプラグインサーバーの立て方【SpigotMC／ PaperMC】](https://mcpoteton.com/mcserver/pluginserver#index_id1)というサイトを見つけたので，これにそって説明すると大枠として
- バニラ，つまりminecraft純正のサーバー
- プラグインの導入が簡単なプラグインサーバー
- MODの導入が可能なMODサーバー

の3つに分けられます．私は[公式の配布しているサーバー](https://www.minecraft.net/ja-jp/download/server)は使ったことがありますので，試しにプラグインサーバーである[papermc](https://papermc.io/)を使ってみたところ，大した違いはないかなと思ったのでpapermcを使って説明していきます．

### server本体(papermc)

ダウンロードをする前に，サーバー本体を格納するためのディレクトリを作りましょう．そのディレクトリにワールドのファイルなどが生成されることになります．私は`mcserver`というディレクトリを作りました．

ディレクトリの作成ができたら，[papermcのダウンロードページ](https://papermc.io/downloads)からjarファイルをダウンロードしましょう．`wget`を使ってダウンロードしても良いと思います．私がダウンロードしたものは#305です．

そうしたら続いてサーバーを一度起動しましょう．

## 起動

サーバーを起動するには[papermcのRunning The Server](https://docs.papermc.io/paper/getting-started#running-the-server)にある通りのコマンドを打てばよいです．つまり，
```bash
$ java -Xms2G -Xmx2G -jar paper-1.19.2-305.jar --nogui
```
これを実行すればいいわけです．ここでコマンドの引数の詳細は[Aikar's Flags](https://docs.papermc.io/paper/aikars-flags)や[Minecraft Wiki
](https://minecraft.fandom.com/wiki/Tutorials/Setting_up_a_server#Java_options)より，
- `-Xms2G`
    - 起動時の初期メモリ量を2GBに指定
    - `-Xms4G`とすれば4GBに指定できる
- `-Xmx2G`
    - メモリの最大使用量を2GBに指定
    - [Minecraft Wiki
](https://minecraft.fandom.com/wiki/Tutorials/Setting_up_a_server#Java_options)によると，`-Xms`と同じ値にすることを推奨している
    - [Recommended JVM Startup Flags](https://docs.papermc.io/paper/aikars-flags#recommended-jvm-startup-flags)によると，{ (本体の持っているメモリ) - (1.5GB) }以下の値を設定した方が良いとのこと
        - taskがkillされるから
- `-jar`
    - 実行するjarファイルの指定
- `--nogui`
    - minecraft server特有のもの
    - これを設定するとコンソール上でserver操作が可能になる
    - 設定しないとGUI操作でserver操作ができる．

という感じです．これを実行してみると，
```bash
~/mcserver$ java -Xms2G -Xmx2G -jar paper-1.19.2-305.jar --nogui
Downloading mojang_1.19.2.jar
Applying patches
Starting org.bukkit.craftbukkit.Main
System Info: Java 18 (OpenJDK 64-Bit Server VM 18.0.2-ea+9-Ubuntu-222.04) Host: Linux 5.15.74.2-microsoft-standard-WSL2 (amd64)
Loading libraries, please wait...
[23:43:25 INFO]: Building unoptimized datafixer
[23:43:26 ERROR]: Failed to load properties from file: server.properties
[23:43:26 WARN]: Failed to load eula.txt
[23:43:26 INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.
```

こんな感じでサーバーは起動できなかったと思います．EULAは利用規約なので，利用規約に同意してねって言われてます．利用規約は読みましょう．
`Go to eula.txt`って言われているので見に行きましょう．まずは現在のディレクトリの状態を見ましょう．

```bash
~/mcserver$ ls
cache  eula.txt  libraries  logs  paper-1.19.2-305.jar  server.properties  versions
```

`eula.txt`がちゃんとありますね．そしてほかのファイルも生成されています．

```bash
~/mcserver$ cat eula.txt
#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://aka.ms/MinecraftEULA).
#Tue Dec 06 23:46:09 JST 2022
eula=false
```

`eula.txt`に利用規約のリンクがありますので読みましょう．その後，利用規約に同意したという意味で`eula=false`を`eula=true`に変更しましょう．私は`nano`を使って編集しました．

そして再びminecraft serverを起動してみましょう．

```bash
~/mcserver$ java -Xms2G -Xmx2G -jar paper-1.19.2-305.jar --nogui
Starting org.bukkit.craftbukkit.Main
System Info: Java 18 (OpenJDK 64-Bit Server VM 18.0.2-ea+9-Ubuntu-222.04) Host: Linux 5.15.74.2-microsoft-standard-WSL2 (amd64)
Loading libraries, please wait...
[23:47:27 INFO]: Building unoptimized datafixer
...(長いログが出力される)
[23:47:51 INFO]: Done (19.380s)! For help, type "help"
...
```

上記のように`Done`が表示されるとワールドが生成され読み込み終わった状態です．minecraft本体を起動してワールドに入ってみましょう．
今回使用したサーバーのminecraftバージョンは1.19.2ですので，minecraft本体もそれに合わせたバージョンのものを実行します．
本体が起動できたら，multiplay > direction connectをクリックし，Server Addressに`localhost`と入力すると入れると思います．ただし，WSLだと`localhost`のIPアドレスは本体のPCであってWSLにインストールされてるOSではありません．つまりWSLのIPアドレスを確認する必要があります．

<details><summary>WSLでIPアドレスを確認</summary>

[WSL2/UbuntuのIPアドレスを取得したい](https://qiita.com/neko_the_shadow/items/25b797cb436078b9e832)という記事を参考にIPアドレスを確認しました．簡単にまとめると`ip a show dev eth0`とコマンドを打って出てくるinetの項目がIPアドレスです．

```diff_shell
$ ip a show dev eth0
6: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:15:5d:fc:be:6f brd ff:ff:ff:ff:ff:ff
+   inet 172.19.216.140/20 brd 172.19.223.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::215:5dff:fefc:be6f/64 scope link
       valid_lft forever preferred_lft forever
```

diff表現で無理やりハイライトしていますが，その箇所のIPアドレスをServer Addressに入力しましょう．
ちなみに，IPアドレスは固定していない限りwslの起動ごとに変化するはずです．

</details>

さて，ワールドに入れたでしょうか．serverのログには
```
[01:58:03 INFO]: UUID of player [player-name] is [player-id]
[01:58:03 INFO]: [player-name] joined the game
[01:58:03 INFO]: [player-name][ip-address:port] logged in with entity id 201 at ([world]-47.5, 86.0, -315.5)
```

が追加されていると思います．ただし，`[]`内の個人情報(?)っぽいものは念のため伏せています．


:::note warn
認証サーバーがどうたらこうたらで入れない場合，minecraftのアカウントがmicrosoftのアカウントになっていない可能性があります．ご確認ください．
それでも入れない場合は，認証サーバー自体が落ちている場合があります．この場合はmojangがアナウンスしていると思います
それ以外の場合は......頑張って検索してください
:::

## お友達と遊ぶ

マルチプレイできるようになったのでお友達と遊びましょう．しかし現在の状態だと自分だけしかワールドに入れないと思います．
他の人も接続できるようにするにはポート開放が必要ですが，その説明は[【最新版対応】誰でも簡単にマイクラプラグインサーバーの立て方【SpigotMC／ PaperMC】](https://mcpoteton.com/mcserver/pluginserver#index_id14)に任せます．このサイトの記事はOSがWindowsですので注意してください．


というわけで，マイクラサーバーを動かすことができたと思います．
お疲れ様でした．