PocketMine-MPをインストールしてサーバーに入る手順(Windows)

## イントロ
あけましておめでとうございます。
Minecraftサーバ開発・運営 Advent Calendar 2021 19日目です。
~~記事投稿時点の年は2025年だって？そんなまさか~~

## 必要な環境
- win10などの最近のウインドウズos
- Windows管理者権限
- 正規のマイクラ(ios、android、マイクラ統合版のwin10版)


:::note info
統合版マインクラフト(MCBE版)のカスタムサーバPocketMine-MPの構築方法です。
:::



最新の入れ方は、Nerahikada (ねらひかだ)さんのインストーラを使うのが主流です。今回はこの方法で解説します。


## インストーラをダウンロード
まず[ここ](https://github.com/Nerahikada/PocketMine-MP_Installer/releases/latest)から`PocketMine-MP-?.??.?.exe`をダウンロードします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192565/5b4b84c6-0d53-d133-cba3-5029c8c57a85.png)


ダウンロードマークをクリックし、ウイルス検知は許可をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192565/cbd65d7c-d12c-b484-9a1d-2dcbddd3a208.png)

ブラウザにダウンロードフォルダがない場合は、`Windowsのマーク+E`を同時押しし、左の項目などからダウンロードを探しクリック、そのフォルダ内から`PocketMine-MP-?.??.?.exe`を探します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192565/b200c4d4-0660-19fa-7ff9-dc04c877c1fe.png)

フォルダに`PocketMine-MP-?.??.?.exe`がない場合は、ブラウザやアンチウィルスにダウンロードがブロックされている可能性があるので、ブラウザのダウンロードポップアップにブロックと表示されてない場合諦めましょう。
クリックミスでダウンロードできてない可能性もあります。

# Windowsのブロックを解除
exeを右クリックし、(win11の場合詳細オプション)の**プロパティ**を開き、**セキュリティの欄の許可するにチェック**を入れてから、**okを押します。**
これをしないと、実行数の少ないマイナーなexeなのでwindowsくんが実行を許可してくれません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192565/6533eca9-5e49-6658-c49c-1f663e9f47f9.png)


# インストールウィザード

ダウンロードした`PocketMine-MP-?.??.?.exe`をダブルクリックします。


:::note warn
Windowsの管理者権限が必要です。
:::

次の画面では、**次へ(N)＞**をクリックします。
  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192565/ef80a98a-c88a-7243-9f26-e18612e399ce.png)

pmmpのライセンス画面では **同意する(A)** をクリックします。


:::note info
契約という物騒な言葉がかかれていますが、ソフトウェアを使ったり、配布したり、引用したりする際のしていいこと、したらだめなことなどが書かれた文章に同意するだけなので、実際に契約が発生するわけはありません。
:::

  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192565/d6e8bce7-c089-2bef-6942-d239c11e14c4.png)



次の画面では、インストール時に行う設定を行います。
  
- PocketMaine-MP
    - pmmp本体を展開します。必須
- Development Plugins
    - DevTools.pharというほぼpmmp開発において必須のプラグインを展開します。
- Visual C++ Runtime
    - 「pmmpを動かす」言語である「phpを動かす」ための前提モジュールをパソコンにインストールします。pmmpを動かしたい場合パソコンにインストールするのは必須です。
- Allow loopback connection
    - Windows10版、統合版マインクラフトにおいて、デフォルトではローカルサーバを立てても絶対にパソコンに内のサーバーに接続出来ない問題をパソコンの設定を変更し解消します。
    - win10(ストア版)版MCBEを将来にわたって買わないのであれば不要です。
    - おそらく、java版を持っているのであれば同時にMCBE版マインクラフトを起動できるはずなので、許可しておいて問題ないと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192565/7a70b44d-79e4-fdb4-241e-46673b593c94.png)
  
初回インストールであれば、すべてチェックを入れて、**次へ(N)＞**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192565/ba1dcd74-758d-0a7d-73a7-a961fd69b447.png)


インストール先はとりあえず`C:\Users\Owner\Downloads\PocketMine-MP`で問題ないので、　**インストール(I)** をクリックします



:::note info
インストール中、2回の権限昇格がありますが、両方とも許可します。
1回目はVisual C++ Runtimeのインストール、
2回目はAllow loopback connectionの構成です。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192565/fb55fd18-7244-c0a7-e85a-2aede5cd603d.png)

次の画面では、 **完了(F)** をクリックします。すると**コマンドプロンプトが起動**しpmmpの初期設定に移行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192565/17ce157a-d001-ae85-c780-cf1bfad92c90.png)

次の画面はpmmpの初期設定です。

:::note warn
2回目以降の起動方法は後ほど説明します。間違えて閉じてしまった場合は2回目以降の手順で起動してください。
:::


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192565/8891ad7c-dbec-bb26-7725-1ede2671114a.png)

:::note info
ここからはテキストで紹介します。
:::


このメッセージでは、jpnを入力します。

```
Deleted stale phar cache at C:\Users\Owner\AppData\Local\Temp/PocketMine-MP-phar-cache.0/PMM9077.tmp
Preparing PocketMine-MP.phar decompressed cache...
Cache ready at C:\Users\?????\AppData\Local\Temp\PocketMine-MP-phar-cache.0\PMM2DCB.tmp.tar in 0.42s
[*] PocketMine-MP set-up wizard
[*] Please select a language
 中文 (简体) => chs
 Deutsch => deu
 Ελληνικά => ell
 English => eng
 Français => fra
 Hrvatski => hrv
 Italiano => ita
 日本語 => jpn
 한국어 => kor
 Latviešu => lav
 Nederlands => nld
 Русский => rus
 Español => spa
 Türkçe => tur
 Tiếng Việt => vie
[?] Language (eng): jpn

```


次のメッセージでは、yを入力します。
```
[*] 日本語が正しく選択されました。
[*] PocketMine-MP へようこそ!
新しいサーバーのセットアップを開始する前に、ライセンスに同意する必要があります。
PocketMine-MP は LGPL ライセンスに基づいて許諾されており、
このフォルダーで LICENSE ファイルを読むことができます。

  This program is free software: you can redistribute it and/or modify
  it under the terms of the GNU Lesser General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.

[?] ライセンスに同意しますか? (y/N): y
```

次のメッセージでは、Nを入力します。
```
[?] セットアップ ウィザードをスキップしますか? (y/N): N
```

ここでは、サーバ接続画面で表示される名前を構成します
my development serverなど適当な名前にしましょう。
```
[*] サーバーのセットアップを開始します。
[*] デフォルト値を変更しない場合は、Enter キーを押してください。
[*] これらの設定は後で server.properties ファイルで編集できます。
[?] サーバーの名前を付けてください (PocketMine-MP Server): my development server
```

このメッセージはそのままエンターを押します。サーバーのポートを19132以外に変更したい場合の設定です。
```
[*] これが初めてのサーバーの場合は、デフォルトのポート値を変更しないでください。
[?] サーバー ポート (IPv4) (19132):
```

同じくエンターを押します
```
[?] サーバー ポート (IPv6) (19133):
```

デフォルトのゲームモードを指定します。オペレーション権限(以下op権限)がある人は自由にゲームモードを変更できるのでそのままエンターでも問題ありません。
```
[*] クリエイティブ (1) またはサバイバル (0) のいずれかを選択してください
[?] デフォルトのゲーム モード (0):
```

同時接続数は、100人など任意の数にします。
```
[?] 最大オンライン プレイヤー数 (20): 100
```

サーバ側で送信を許可する**描画距離**(1チャンクは16ブロックx16ブロックx16ブロックです)の制限を構成します。
16チャンクの場合、マインクラフト(クライアント)側で100チャンクにしても16チャンクしか表示されません。
増やせば増やすほどチャンクを非常広くしているプレーヤーにネットワーク、cpuなどのリソースが消費されるので、公開サーバーではそのままエンターします。
```
[?] 最大表示距離 (チャンク) (16):
```

**オペレーター権限**というサーバー内で**クリエイティブモードなどのチートが使える権限**を最初から追加するオプションです。
**これがないとクリエイティブモードを使ったり飛ぶことが出来ません。**
ログインするxboxのゲーマータグを入力します。日本語の場合は設定後に`ops.txt`に行を追加して日本語を入れると動くかもしれません。
```
[*] OP はサーバーのプレイヤー管理者です。OP は通常のプレイヤーよりも多くのコマンドを実行できます
[?] OP プレイヤー名 (例: あなたのゲームの名前): rab**********
```

ホワイトリストは特定のユーザーのみがサーバーに入ることができるモードです。開発サーバーかつ、外部に公開するのであれば必要でしょう。
```
[*] ホワイトリストではリストに含まれているプレイヤーのみが参加できます。
[?] ホワイトリストを有効にしますか? (y/N): y
[!] ホワイトリストにプレイヤーを追加する必要があります
```

これはデフォルトでいいのでエンターします
```
[!] Query はサーバーとログインしているプレイヤーの情報を取得するためにさまざまなツールで使用されるプロトコルです。
[!] 無効にすると、サーバー リストを使用できなくなります。
[?] Query を無効にしますか? (y/N):
```

外部ipは**ポート解放**という手段(一部のネットワークプロバイダーは有料だったり対応してない。モバイル回線、無線系のプロバイダーサービスの場合非対応かつ接続の度に変動する場合がある)を踏むと**ネットワーク外のプレーヤーが参加**できるようになり、その際に相手の方が入力することになるipアドレスです。
一部のプロバイダーでは、固定ipは有料である場合があり、その場合はホスト名が固定であればそこから参加することになります。
ipアドレスはプロバイダーによって固定ではないことがあるので、メモしてもあまり意味はありません。
**外部ipは絶対に絶対に外部に公開しないでください。**


**内部ipはあなたが他のデバイスから同じルーターを経由して、サーバーにログインするために必要な情報**です(パソコン本体からパソコンで動かしてるサーバーに入る場合`127.0.0.1`)。メモしておいてください。これは起動毎に変動する可能性があります。

:::note warn
外部ipは絶対に外部(SNS、チャットアプリなど)に公開しないでください。
:::

:::note alert
ポート解放をしないとネットワーク外の人は参加できません
:::

```
[*] 外部 IP と内部 IP を取得しています
[!] あなたの外部 IP は ***.***.***.*** です。ポートをあなたの内部 IP 192.168.***.** に転送する必要がある場合があります
[!] 必ず確認してください。ポートを転送する必要があるがスキップすると、外部プレイヤーは参加できません。[Enter キーを押し てください]
```

エンターを押すとサーバーが起動します。

windowsディフェンダーは **プライベートネットワークにチェックを入れ、アクセスを許可します(正しく許可しないと接続できません)**

:::note warn
ウイルス対策ソフトが入っていて、それが独自のファイアウォールを構成しており、ローカルサーバーにログインできない場合、ウイルス対策ソフトの構成と、ループバックの構成の管理者権限に許可したかどうか確認してください
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192565/f98ed077-1204-875b-36ea-2dd238787347.png)


```
[*] セットアップ ウィザードは正しく終了しました
[*] サーバーに新機能、ミニゲーム、または高度な保護を追加するには、プラグイン リポジトリを確認してみてください
[*] PocketMine-MP を開始します。使用可能なコマンドの一覧を表示するには /help と入力してください。


[06:01:47.112] [Server thread/INFO]: Loading server configuration
[06:01:47.121] [Server thread/INFO]: 日本語 (jpn) を基本言語として選択しました
[06:01:47.123] [Server thread/INFO]: Minecraft: Bedrock Edition サーバー バージョン v1.21.50 を開始しています
[06:01:47.129] [Server thread/INFO]: オンライン モードが有効になっています。サーバーは、プレイヤーが Xbox Live に認証さ れていることを確認します。
[06:01:47.277] [Server thread/INFO]: このサーバーは PocketMine-MP バージョン 5.23.3 を実行しています
[06:01:55.491] [Server thread/INFO]: PocketMine-MP は LGPL ライセンスに基づいて配布されています
[06:01:56.055] [Server thread/INFO]: Loading resource packs...
[06:01:56.072] [Server thread/INFO]: DevTools v1.17.1 を読み込んでいます
[06:01:56.081] [Server thread/INFO]: [DevTools] Registered folder plugin loader
[06:01:56.082] [Server thread/INFO]: DevTools v1.17.1 を有効にしています
[06:01:56.320] [Server thread/INFO]: ワールド "world" を準備しています
[06:01:56.348] [Server thread/NOTICE]: ワールド "world" のスポーン地形がバックグラウンドで生成されています
[06:01:57.085] [Server thread/INFO]: Minecraft ネットワーク インターフェイスは 0.0.0.0:19132 で動作しています
[06:01:57.086] [Server thread/INFO]: GS4 Query リスナーは 0.0.0.0:19132 で動作しています
[06:01:57.112] [Server thread/INFO]: Minecraft ネットワーク インターフェイスは [::]:19133 で動作しています
[06:01:57.112] [Server thread/INFO]: GS4 Query リスナーは [::]:19133 で動作しています
[06:01:57.114] [Server thread/INFO]: デフォルトのゲームの種類: サバイバル モード
[06:01:57.116] [Server thread/INFO]: If you find this project useful, please consider donating to support development: https://patreon.com/pocketminemp
[06:01:57.117] [Server thread/INFO]: 完了 (10.009 秒)! ヘルプを表示するには、「help」または「?」と入力してください
[06:01:57.937] [Server thread/INFO]: [World: world] スポーン地形の生成: 1 / 224 (0%)
[06:02:02.106] [Server thread/INFO]: [World: world] スポーン地形の生成: 23 / 224 (10%)
[06:02:03.078] [Server thread/INFO]: [World: world] スポーン地形の生成: 45 / 224 (20%)
[06:02:03.895] [Server thread/INFO]: [World: world] スポーン地形の生成: 68 / 224 (30%)
[06:02:04.328] [Server thread/INFO]: [World: world] スポーン地形の生成: 90 / 224 (40%)
[06:02:04.693] [Server thread/INFO]: [World: world] スポーン地形の生成: 112 / 224 (50%)
[06:02:04.873] [Server thread/INFO]: [World: world] スポーン地形の生成: 135 / 224 (60%)
[06:02:05.052] [Server thread/INFO]: [World: world] スポーン地形の生成: 157 / 224 (70%)
[06:02:05.258] [Server thread/INFO]: [World: world] スポーン地形の生成: 180 / 224 (80%)
[06:02:05.489] [Server thread/INFO]: [World: world] スポーン地形の生成: 202 / 224 (90%)
[06:02:05.790] [Server thread/INFO]: [World: world] スポーン地形の生成: 224 / 224 (100%)
```

# コマンド紹介

コンソール権限はデフォルトでop権限があり、全てのコマンドを実行する権限がありますが、コンソールはゲーム内のプレーヤーオブジェクトではないのでメッセージ送信等しかできないため、プラグインによってはクラッシュを回避するために実行できないものも存在します。
デフォルトのものを紹介します。

:::note info
しばらくの間コンソールの場合で紹介します。ゲーム内で実行するにはスラッシュ(/)をつけます。
これらのコマンドは基本的にop権限の人以外は使えません。
ここでは誤解されそうな単語は扱いません。helpを直接見てください
:::

### help
サーバーに存在する全てのコマンドを出力します。マインクラフト側で表示されるのはクライアント側で処理されているので、基本的に形式が違います
```
help
```

# 重要ホワイトリスト関連
```
Command output | 使用法: /whitelist <on|off|list|add|remove|reload>
```
ホワイトリストにSteveを追加します。
```
whitelist remove Steve
```
ホワイトリストからSteveを削除します。
```
whitelist add Steve
```
ホワイトリストを有効化します
```
whitelist on
```
ホワイトリストを無効化します
```
whitelist off
```



## ban関連
### ban

引数で指定したユーザーをサーバーから追放し、参加できなくします。
なお名前で照会するため、サブアカウントなどでこれを回避することができます。
いわゆるサブアカウントを検出する賢いbanなどは、後述するプラグインで実装することになります。
```
ban
Command output | 使用法: /ban <名前> [理由 ...]
```


### pardon
banを解除します。これはサーバー停止時に`banned-players.txt`を直接編集する事でも可能です。
```
pardon
Command output | 使用法: /pardon <名前>
```

### ban-ip
引数で指定したipアドレスをサーバーから追放し、参加できなくします。
なおipアドレスをローカルで照会するため、モバイル回線、vpsなどでこれを回避することができます。
```
ban-ip
/ban-ip <アドレス|名前> [理由 ...]
```

### pardon-ip
ipbanを解除します。これはサーバー停止時に`banned-ips.txt`を直接編集する事でも可能です。
```
pardon-ip
Command output | 使用法: /pardon-ip <アドレス>
```

## その他

### say

管理者限定の非常に目立つメッセージをサーバー全体に送信します
```
say
Command output | 使用法: /say <メッセージ ...>
```

### stop

サーバーを停止します。基本的にctrl+cで止まるので使う事はありません。
```
stop
```

## op
指定したユーザーにop権限を付与します。サーバー停止中にops.txtを直接弄ることもできます。サーバーにopにしたいユーザーがいる場合、多分途中まで入力すればいけます
```
op
Command output | 使用法: /op <プレイヤー>
```

### deop
指定したユーザーのop権限をはく奪します。サーバー停止中にops.txtを直接弄ることもできます
```
deop
Command output | 使用法: /deop <プレイヤー>
```

## ゲーム内関連

:::note info
ゲーム内で実行するにはスラッシュ(/)をつけます。
:::


### gamemode
自分のゲームモードを変更します。pmmpでは数字や略称を使うのが一般的です。
```
gamemode
Command output | 使用法: /gamemode <モード> [プレイヤー]

# クリエイティブモード
/gamemode 1
/gamemode c
# サバイバルモード
/gamemode 0
/gamemode s
```

### time
```
Command output | 使用法: /time <set|add> <値> または /time <start|stop|query>

time set 0
time stop
time start
```

### clear

所持しているアイテムをすべて消去します。
```
clear
Command output | 使用法: /clear [プレイヤー] [アイテム] [最大数]
```

# サーバーへの入り方



## フレンドから入る場合

ループバックの構成をちゃんとし、ルーターが優秀であれば、そのままフレンドから入ることができます。
この場合、**後述する設定によりxboxログアウト状態でもログイン**できます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192565/7d1947bc-6fa2-ad4d-d8f6-813b5498edbd.png)

## サーバータブからはいる場合(xbox正規ログイン状態のみ)

ワールド選択画面に行き、サーバータブを開きます
サーバータブのAdd Serverをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192565/30843ac9-fef5-c41e-42a4-b014cf7f65db.png)

### win10版統合版で同じパソコンのサーバーに入る場合(xbox正規ログイン状態のみ)

:::note info
インストーラの管理者権限昇格を両方とも許可、またはAllow loopback connectionの構成にチェックを入れなかった場合、同じパソコン内のサーバーには絶対に入れません
:::

下記のアドレスを入力します。
```
Server Name: わかりやすい名前
Server Address: 127.0.0.1 (入力間違え注意！)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192565/4e38aa05-b7bd-66d4-2e2a-bcd1db63869b.png)

Saveを押し、追加された項目からサーバーに入ります。

## xbox正規アカウントでスマホから入る場合(同じルーター経由)


**内部ipを入力して**接続します。ルーターの性能によっては入れないことがあります。
ルーターによっては内部ipは接続ごとに変動します。次の手段で固定するか、毎回確認してください。

https://ascii.jp/elem/000/001/542/1542012/

:::note info
この場合、後述する開発サーバー向け回避手段を使わない場合、正規のxboxサブアカウントかxboxメインアカウントで入る必要があります。

**whitelist add Steve**のようにそのアカウント名を追加しておいてください
:::

:::note alert
microsoftはサブアカウントを作ろうとすると、認証するまで本アカウントまでロックがかかるので、安直にサブアカウントを作ろうとしないでください。
購入したゲームたちが台無しになっても私は責任を取りません。
下記で非ログイン環境でも接続できるかもしれない方法を解説します。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192565/3336731d-096b-663b-7493-c2bac7a7b2c9.png)


## ログアウト状態でも入れるようにする方法(スマホ向け)
:::note info
下記の方法と組み合わせて使います。
:::
:::note alert
公開サーバーでは絶対にオンラインモードを無効化しないでください。オンラインモードが無効の場合、ハッカーはあなたや友達に自由になりすまして、サーバーや人間関係をめちゃくちゃにすることができます。
:::

- サーバーを停止します。
- `サーバーのフォルダ(PocketMine-MP)/server.properties`をメモ帳で開きます。
- `xbox-auth=on`を探します。
- `xbox-auth=off`に書き換えます
- ctrl+sを同時押しして、保存し、メモ帳のアスタリスク(\*)が消えてることを確認します。
- 下記の2回目以降の方法でサーバーを起動します。
- フレンドタブからサーバーを見つけ、参加します(ログアウト状態だとサーバータブは使えません。)
- whitelistで弾かれた場合、**whitelist add 弾かれた名前**でホワイトリストに追加します。

## モバイルホットスポットから入る方法(パソコンが対応している場合)
:::note warn
モバイルホットスポットはルーターへのフルアクセス(パケットに制限はありません)を提供します。
必ずクラックされにくい12文字以上の記号などを含むランダムなパスワードを設定してください。

パスワード生成:
https://www.luft.co.jp/cgi/randam.php

**whitelist add Steve**のようにそのアカウント名を追加しておいてください
:::

モバイルホットスポットを構成します。

https://www.pc-koubou.jp/magazine/23187


- モバイルホットスポットに接続します。
- フレンドタブで待機しながらサーバーを再起動したりすると、フレンドタブにサーバーが現れるので、ログインします。
- 上手くいかない場合、サーバーを再起動する。モバイルホットスポットに再接続するなどしてください。
    - どうしてもうまくいかないなら、使ってるルーターが外れです。
- whitelistで弾かれた場合、**whitelist add 弾かれた名前**でホワイトリストに追加します。


# 2回目以降の起動方法
サーバーのフォルダ(PocketMine-MP)を探します。変更していなければ
```
%USERPROFILE%\Downloads\PocketMine-MP
```
にあります。**ダウンロードフォルダ内**の**PocketMine-MPフォルダ**です。

## 分からない場合
下記の方法で探します。
- winキー+Eを同時押しし、エクスプローラを開きます。
- 左などからダウンロードを探します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192565/43d3a418-4462-a662-817b-1f1eba3eee42.png)
- 正常に展開できていれば、ダウンロードフォルダにPocketMine-MPというフォルダがあるはずです。

## 起動方法
**PocketMine-MPフォルダ**内の、**start.cmd**というファイルをダブルクリックします。これで起動します。同時起動はできません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192565/d09169c0-c189-3b7f-990b-8c73639271dd.png)


to be continued

## 追記

vscodeで補完が動くようになるまでの記事を書きました

https://qiita.com/DaisukeDaisuke/items/51aabed275d05654e112