Minecraft server で 複数のワールドをポータルを作って行き来する

#はじめに

Ubuntuに限らず、パソコン関連のやり方類はWebサイトをいくつか見る必要があり、場合によっては数十ものサイトを見比べて取捨選択する必要があります。 この記事はそうしたやり方類をまとめて書いていきます。 今回はMinecraftサーバー内で複数のワールドを作ってポータルで行き来する方法をまとめます。

###この記事でできること

Minecraft spigot server 内に複数のワールドを作って、ネザーゲートのようなポータルで行き来することができるようになります。 前回の記事で導入したプラグインを使って構築します。

###前回

https://qiita.com/Limitex/items/a9e4afa28bbb8d87fa69

###対象読者

* コマンド操作がわかる人
* コマンド操作がわからない人
* Minecraftサーバーで複数ワールドを行き来したい人

#目次

1. 権限
* ワールドを作る
* ワールド移動用ポータルを作る
* ユーザーにポータルの使用権限を与える
* リスポーン地点を設定する
* リスポーン地点を保護する
* 以上

#使用プラグイン

* LuckPerms
* LogoBlock - spigotmc
* Dynmap - bukkit
* WorldEdit - bukkit
* WorldGuard - bukkit
* Multiverse-Core - bukkit
* Multiverse-Portals - bukkit
* Multiverse-NetherPortals - bukkit

#0.権限
作業をする前に、権限を設定します。 Minecraftサーバーコンソールに行き以下のコマンドを実行します。

* オペレーター権限

```
op [プレイヤー名]
```

* LuckPermsの権限

```
lp user [プレイヤー名] permission set luckperms.*
```

以下からMinecraftを起動してサーバーに接続したプレイヤーから操作します。

#1.ワールドを作る

前回導入した`Multiverse-Core`を使ってワールドを生成し、`Multiverse-NetherPortals`を使ってそれぞれを繋げます。
Minecraftには通常世界、ネザー、エンドといったワールドが存在し、新しく作る場合はそれぞれを作る必要があります。また、それぞれのネザーゲートやエンドゲートはつながっていないため、別途接続する必要があります。
今回作るワールドの名前は`SubWorld`とします

###1. ワールドの作成
`create`の後の文字列は名前なのでなんでもいいですが、ワールドの種類がわかるように設定するといいでしょう

* 世界の生成コマンド

```
/mv create [ワールド名] [引数１]
```

引数１は
通常世界を生成する場合は`world`、
ネザーを生成する場合は`nether`、
エンドを生成する場合は`the_end`、
スーパーフラットを生成する場合は`flat`
を指定しましょう。

また、ワールド生成にシード値を用いる場合は、

```
/mv create [ワールド名] [引数１] -s [シード値]
```

のように```-s```ワードを使うことにより指定できます。

* 通常世界の生成

```
/mv create SubWorld world
```

* ネザーの生成

```
/mv create SubWorld_nether nether
```

* エンドの生成

```
/mv create SubWorld_the_end the_end
```

###2. 確認
ワールドがちゃんと生成されているかを確認します。

```
/mv list
```

各ワールドが２個ずつあれば成功です。

また、各ワールドへ移動する場合は、

```
/mv tp [ワールド名]
```

を使うことで移動できます。

###3. ワールド同士をつなげる

生成した各ワールドを繋げます。

ワールド同士を接続するコマンド

```
/mvnp link [ワールドタイプ] [ワールド１] [ワールド２]
```

ワールドタイプは
ネザーとつなげる場合は`nether`
エンドとつなげる場合は`end`
を指定します。

* ネザーの接続

```
/mvnp link nether SubWorld SubWorld_nether
```

```
/mvnp link nether SubWorld_nether SubWorld
```

* エンドの接続

```
/mvnp link end SubWorld SubWorld_the_end
```

```
/mvnp link end SubWorld_the_end SubWorld
```

#2.ワールド移動用ポータルを作る

ワールドの移動にいちいちコマンドを入力することはめんどくさいので、くぐったらワールドを移動するポータルを作ります。
前提知識として、それぞれの世界のポータルにしたい場所の座標範囲に名前を付けてポータルとし、それ同士を接続することでワールド間の移動が可能になります。

###1. ポータルを作る

先述通り、ポータルを作ります。

####0. 範囲指定用斧を出す

範囲指定には`WorldEdit`の範囲選択ツールの斧を使って選択することをお勧めします。 導入していなくても`Multiverse-Portals`に選択機能がありますが、後に述べる領域保護などでもこの選択ツールを使うため、 `WorldEdit`の範囲選択ツールで統一するようにしましょう。 一応`Multiverse-Portals`の範囲選択ツールを出す方法も記載します。 以下のコマンドを使用して、範囲指定用斧を出します。

* WorldEditを導入している場合

```
//wand
```

* Multiverse-Portalsだけの場合

```
/mvp wand
```

####1. 範囲指定

範囲指定用斧を使ってポータルの場所を指定します。

1. ポータルにしたい場所の右上か、左上を ""左クリック"" でクリックします。
2. 右上をクリックしたなら左下、左上をクリックしたなら右下を ""右クリック""でクリックします。

これでポータルにしたい場所が選択された状態になります。

####2. ポータルの作成

この状態で、以下のコマンドを実行してポータルを作成します。

```
/mvpc [ポータル名]
```

ポータル名は自由ですが、わかりやすいように今回は以下の名前にしました。

* ポータル作成

```
/mvpc MainToSub
```

####3. ワールドを移動してポータルの作成

さきほど作成した`SubWorld`に移動して、同じように 1.範囲指定 から繰り返します。

ワールド移動コマンド

```
/mv tp [ワールド名]
```

* 移動

```
/mv tp SubWorld
```

SubWorldのポータルは以下のように設定しました。

* ポータル作成

```
/mvpc SubToMain
```

####4.確認

ポータルが作成されているかを確認します

```
/mvp list
```

作成した二つのポータル名が表示されれば成功です。

###2. ポータル同士の接続

ポータルの作成が終了したら、次はそのポータル同士を接続します。

####1. ポータルを選択する

ポータルを選択します。
以下のコマンドを使用してポータルを選択した状態にします。

```
/mvps [ポータル名]
```

* 選択

```
/mvps MainToSub
```

####2. ポータル同士を接続する

選択した状態から以下のコマンドを使用してポータル同士を繋げます。
この接続は選択されているポータルからの移動だけであり、接続先ポータルからは移動できません。
ですので、接続先ポータルから同じように接続する必要があります。

```
/mvpm dest p:[ポータル名]
```

また、ポータルから出た際のプレイヤーの向き置を指定する場合は、

```
/mvpm dest p:[ポータル名]:[方角]
```

と記述します。

方角

|方角|値(英字)|値(数字)|
|:---:|:---:|:---:|
|北|n|2|
|南|s|0|
|東|e|3|
|西|w|1|

北の場合は`n`または`2`というようにどちらかを選んで記述します。 北東を指定したい場合は`ne`または`23`と記述します。

* 接続

```
/mvpm dest p:SubToMain:w
```

####3. 設定したポータルの逆側から接続

先述通り、一方通行のポータルが完成しました。
次は逆方向で同じように作成します。

* 選択

```
/mvps SubToMain
```

* 接続

```
/mvpm dest p:MainToSub:n
```

これでポータルの作成は完了しました。

#3. ユーザーにポータルの使用権限を与える

ポータルの作成は見事に完了しましたが、このままではOP権限を持ったプレイヤーのみがこのポータルを使える状態にあります。

すべてのユーザーがポータルを使えるようにするには、権限グループの`default`にポータルの使用権限を与える必要があります。 `default`グループはすべてのユーザーが最初に所属するグループであり、そのグループに権限を与えることによってすべてのユーザーがポータルを使えるようになります。 以下のコマンドで許可します。

* ポータルの使用を許可.

```
/lp group default permission set multiverse.portal.access.*
```

#4. リスポーン地点を設定する

次にリスポーン地点を設定します。
ポータルの近くにリスポーン地点を置くことでポータル建築物などをつくり、見栄えが良くなります。
それだけです。
ですがやる価値はあります。たぶん。

以下にやり方を示します。

###1. スポーン地点を見つける

おすすめはポータルの近くに設定することです。

リスポーン地点を決めたら、その場所の座標を調べてメモします。
また、視線の位置を設定したい場合は以下を参照し、メモしておいてください。

|方角|値|
|:---:|:---:|
|北|180|
|南|0|
|東|-90|
|西|90|

###2. ワールドごとにリスポーン地点を設定する

以下のコマンドで各ワールドのリスポーン地点を設定することができます。
"1."でメモした座標と方向をもとにリスポーン地点を設定します。
リスポーン地点に設定する座標は小数点以下第２位まで記述してください。
ブロックの中央をリスポーン地点に設定したい場合はX座標とZ座標の数字に`0.5`または`-0.5`をプラスすると中央になります。

リスポーン地点設定コマンド

```
/mv set spawn [ワールド名] [X座標] [Y座標] [Z座標] [横の視線の向き] [縦の視線の向き]
```

* リスポーン地点を設定

```
/mv set spawn MainWorld -220.00 64.00 -80.00 180 0
```

```
/mv set spawn SubWorld -160.00 75.00 200.00 90 0
```

#5.リスポーン地点を保護する

せっかくポータルを作っても壊されたら終わりです。 また、Minecraftの自然現象でエンダーマンに持っていかれたり、クリーパーに爆られたりしたりで簡単に壊れては困ります、 なので、`WorldGuard` プラグインを使って地形、建造物を保護します。

###1.保護する範囲を指定して名前を付けて保存

ポータルを作ったときの選択用斧を出して領域を選択して名前を付けます。

```
//wand
```

斧を出したら、保護したい領域を立方体として囲い、その対角を右クリック、左クリックで選択します。 選択したら、以下のコマンドで保護領域に名前を付けて保存します。

```
/rg claim [保護領域名]
```

* 保護領域を設定

```
/rg claim mwPortal
```

###2. 保存した保護領域の許可を設定する。

保存した保護領域はまだ何も設定されていません。
以下のコマンドで領域の許可を設定します。

```
/rg flag [保護領域名] {フラグ名] [許可]
```

保護領域名には保存した領域の名前を挿入します。
フラグ名は以下に示すフラグを指定します。今回は必要な分だけ書いていますが、ほかに必要な許可がある場合は記事下記の参考サイトを参照ください。
許可にはそフラグの設定を許可するか拒否にするかを設定します
許可の場合は `allow` 、拒否にする場合は `deny` を挿入します。

|コマンド|説明|
|:---:|:---:|
|build|ブロックの設置・破壊などの許可|
	
* 許可を設定

```
/rg flag mwPortal build deny
```

これで管理者権限がないと領域におけるブロック操作ができなくなりました。

#6. 以上

これで複数のワールドをポータルで行き来するようにする方法は終了です。
次は Minecraft Javaサーバーで統合版とのクロスプレイを実現する方法を書きます。

#参考サイト

https://seesaawiki.jp/perominecraft/d/LuckPerms%20-%20%BB%C8%CD%D1%CA%FD%CB%A1%28%BD%E9%BF%B4%BC%D4%B8%FE%A4%B1%29

https://wiki.craftportal.jp/view/%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E8%A7%A3%E8%AA%AC:Multiverse-Core

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13237801468

https://w.atwiki.jp/penpenserver/pages/13.html

https://wikiwiki.jp/shirakobato/WorldGuard%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9

https://zedlabo.com/worldguard-flag-list/

http://tt0.link/minecraft/plugins/?c=WorldGuard