しろうとのメモ

しろうとがなんかメモするところ

資源ワールドを作るには

Minecraft Java Edition でサーバを立てて遊ぶ際に、通常のワールドに加えて、資源ワールドを追加する方法についてまとめる。(Realms では出来ません。)

ざっくりまとめると

  • Java版であること、Realmsでは出来ないこと、Spigot系サーバプログラムで動かしていることが前提であることを理解する。
  • 資源"サーバ"ではなく資源"ワールド"であること、オーバーワールド、ネザー、エンドが本来ならばワンセットであることを理解する。
  • MultiVerseプラグインからMultiverse-Core, Multiverse-NetherPortals, 必要に応じて MultiVerse-Portalsをダウンロードしてサーバプラグインとしてインストールする。
  • メインのワールドそれぞれに対し、スポーン地点の紐付けを行う。
  • mv create 命令で資源ワールドのそれぞれを作成する。
  • 作成したワールドの環境(難易度)設定を行う。
  • 各ワールドのリスポーン地点を確認する。
  • メインワールドと資源ワールドとの移動手段をなんとかする。

大前提

MultiVerseプラグインは、Bukkit-API を用いてワールドを生成するので、サーバプログラムは Spigot 系のものである必要がある。この記事では、サーバとして paperMC-1.17.1 以降を想定している。

最低限必要となるプラグインは MultiVerse-core, Multiverse-NetherPortals である。新しいプラグインであれば、ディメンションを移動してもアイテムは維持されるようだが、うまくいかない場合は MultiVerse-Inventories も必要になるかもしれない。コマンドではなくゲートを作ってワールドを移動したければ、Portals や SignPortals プラグインも入れるとよいだろう。

Basics · Multiverse/Multiverse-Core Wiki · GitHub

Files - Multiverse-Core - Bukkit Plugins - Projects - Bukkit

( 最新は 4.3.1 / Sep 18, 2021 )

Home (NetherPortals) · Multiverse/Multiverse-Core Wiki · GitHub

Files - Multiverse-NetherPortals - Bukkit Plugins - Projects - Bukkit

( 最新は 4.2.1 / Oct 8, 2020 )

LuckPerms など、プレイヤーの権限を管理するプラグインを併用するとよいだろう。

文字列の先頭に / のないコマンドは、サーバコンソール(サーバプログラムが動作中にコマンドを受けつけるところ)からの入力を想定している。文字列の先頭に / のあるコマンドは、op権限を持つプレイヤーが入力することを想定している。

『資源サーバーの作り方』『資源ワールドの作り方』『資源鯖』『資源サーバー』『作り方』などというワードで検索されることが多いが、厳密には『サーバー』ではなく『複数のディメンションから成るワールド』を追加している。語義通り、資源ワールドしか有していないサーバを作って相互乗り入れを行う場合、おそらく paperMC の場合は waterfall (a fork of BungeeCord) が必要となるが、この記事では取り上げない。

この記事には一部未確認の事項を含むので、実運用しているサーバに適用する場合、事前に十分予行していただきたい。

インストール方法は公式にも説明があるとおり、サーバの plugins フォルダに jar ファイルを入れるだけである。(もちろんマイクラのサーバは止まっている状態で)

github.com

資源ワールドの定義

資源ワールドは、資源オーバーワールド、資源ネザー、資源エンド、の3つのディメンションを有するものとする。

資源ワールドのそれぞれのディメンション名につく接頭辞を resource とし、以下のように命名する。

  • 資源オーバーワールド resource
  • 資源ネザー resource_nether
  • 資源エンド resource_the_end

また、資源ワールドに対し、通常プレイしているワールドをメインワールドと呼ぶことにする。 メインワールドにも、それぞれ メインオーバーワールド world メインネザー world_nether メインエンド world_the_end の3つのディメンションがある。(特別な名付けをしていなければ)

既存ワールドのインポート?

導入後のチュートリアルによれば、既存ワールドの設定を導入直後に1回だけインポートする必要がある。

github.com

……ということになっているのだが、最近ではプラグインを入れた状態で初回起動したとき自動的にインポートされているように見える。

[00:30:53 WARN]: [Multiverse-Core] Cannot load worlds.yml
[00:30:53 INFO]: [Multiverse-Core] Loading World & Settings - 'world' - Env: NORMAL - Type: NORMAL & seed: -1567987408914851738
[00:30:54 INFO]: [Multiverse-Core] Loading World & Settings - 'world_nether' - Env: NETHER - Type: NORMAL & seed: -1567987408914851738
[00:30:54 INFO]: [Multiverse-Core] Loading World & Settings - 'world_the_end' - Env: THE_END - Type: NORMAL & seed: -1567987408914851738
[00:30:54 INFO]: [Multiverse-Core] 3 - World(s) loaded.    

mv list を実行しても、ちゃんと

[00:41:29 INFO]: ====[ Multiverse World List ]====
[00:41:29 INFO]: world_the_end - THE_END
[00:41:29 INFO]: world - NORMAL
[00:41:29 INFO]: world_nether - NETHER    

などと表示されるので、この手順は省いても構わなくなっているのかもしれない。

MV-core プラグインを入れたら真っ先にやるべきこと

資源ワールドを作る前に、既存のオーバーワールド、ネザー、エンドのリスポーン設定を行う必要がある。

shirohtoda.hatenablog.jp

おそらく以下のようなコマンドを入力する必要があるだろう。

mvm set respawnWorld world world
mvm set respawnWorld world world_nether
mvm set respawnWorld world world_the_end

正しく設定されれば、各ワールドの情報を mv info で表示させると、以下のような設定が増えていることが確認出来るだろう。

> mvm set respawnWorld world world_nether
[00:44:59 INFO]: Success! Property respawnWorld was set to world
> mvm set respawnWorld world world_the_end
[00:45:03 INFO]: Success! Property respawnWorld was set to world   
> mv info world_nether
[00:53:31 INFO]: --- General Info ---
[00:53:31 INFO]: World Name: world_nether
(略)
[00:53:31 INFO]: Price to enter this world: FREE!
[00:53:31 INFO]: Players will respawn in: world
(略)
> mv info world_the_end
[00:54:07 INFO]: --- General Info ---
[00:54:07 INFO]: World Name: world_the_end
(略)
[00:54:07 INFO]: Price to enter this world: FREE!
[00:54:07 INFO]: Players will respawn in: world
(略)

また、mvtp コマンドでのディメンション移動を一般プレイヤーにも許可する場合、既存のネザーにおける初期スポーン地点が(玄武岩の中とかマグマの真上など)危険な可能性があるので、 移動直後にクリエ/インスペクターモードに切り替えられる管理者が、ゲーム中で

/mvtp world_nether

などとして初期スポーン地点を確認しておくとよいだろう。危険なところであれば安全なところまで移動し、スポーン地点を

/mvsetspawn

で設定しなおしておくとよい。

資源ワールドの作り方と初期設定

MultiVerse-coreプラグインの機能を用いて、サーバーコンソールから以下のコマンドを用いて作成する。(NORMAL, NETHER, END は大文字)

mv create resource NORMAL
mv create resource_nether NETHER
mv create resource_the_end END

このままだと死亡時にリスポーンする位置が「各ディメンションの初期スポーン地点」になっているので、一般的なルール(オーバーワールドで復活する)に合わせるなら、 さらに以下のコマンドを実行する。

mvm set respawnWorld resource resource
mvm set respawnWorld resource resource_nether
mvm set respawnWorld resource resource_the_end

資源オーバーワールドに作成したネザーポータルやエンドポータルが、正しく資源ネザー・資源エンドに向くようにするために、Multiverse NetherPortal-Plugin が必要である。MV-NetherPortal プラグイン によって、オーバーワールドに作られたネザーポータルやエンドポータルが、どのディメンションに接続されるかを関連付けることが出来る。オーバーワールドを X, ネザーを X_nether, エンドを X_the_end という命名規則にしており、かつMV-NetherPortal プラグインを入れておけば、ポータルの関連付けは プラグインが自動的に行う。

この命名ルールに反し、例えば資源オーバーワールドを res, ネザーを res_n 、エンドを res_e などという名前で作成すると、ポータルが機能せずディメンションが孤立する。この場合、関係性を手動で設定するには、

mvnp link nether res res_n
mvnp link nether res_n res
mvnp link end res res_e
mvnp link end res_e res

などと(逆方向の設定も必要なことに注意)入力すればよい。

あるいは、資源ワールドの命名規則は基本に従っておいて、ワールドに別名(エイリアス)をつけてしまえば、mvnp link の設定は不要になる。たとえば以下のように設定すると楽だろう。

mvm set alias reso resource
mvm set alias reso_nez resource_nether
mvm set alias reso_end resource_the_end

応用として、通常のワールドにも、例えば「メイン」として別名をつけるなら、以下のようにすればよい。

mvm set alias main world
mvm set alias main_nez world_nether
mvm set alias main_end world_the_end

これらの別名は、 mvtp でテレポートするときや、チャットなどでディメンション名を表示するときなどに利用される。

もし MV-NetherPortal プラグインを導入しない場合、resouce から resource_nether や resource_the_end にはポータルで行くことが出来なくなる。上記の例だと resource オーバーワールドで作成されたネザーポータル(エンドポータル)は、すべて world_nether( world_the_end )に向けて作られてしまう。その状態で world_nether に抜けた直後にポータルに入り直すと、今度は world に向けてネザーポータルが作成されてしまい、resource オーバーワールドには戻れないネザーポータルとなってしまう。

作成したワールドの環境設定

multiverse-core を導入していると、 server.properties の difficulty や gamerule の設定は、メインワールドにのみ適用され、追加したワールドには反映されないので、個別に設定する必要がある。

標準では、難易度が 1(easy) となっているので、2(normal) にする場合は以下のコマンドを実行する。

mvm set difficulty 2 resource
mvm set difficulty 2 resource_nether
mvm set difficulty 2 resource_the_end

また、gamerule についても同様で、たとえば夜をやり過ごすための就寝者の割合を減らしたい場合、

mv gamerule playersSleepingPercentage 25 resource

などとしておくと、resourceにいるプレイヤーの25%(1/4) が就寝すれば夜が明ける。world 側よりも少ない値にしておくとよいかもしれない。

作成したワールドへの移動方法

プレイヤーに mvtp コマンドを使わせるのが楽である。必要となる権限は multiverse.teleport.self.* と multiverse.core.spawn.self である。(後者はmvtpコマンドを実行したワールドと、スポーン先のワールドが同じときに要求される権限。つまりスポーン地点に戻ることができる。)

/mvlist でユーザーにディメンションの一覧を見せたい場合は、multiverse.core.list.worlds も許可するとよい。info を許可するとディメンションのSeed値がバレてしまうので、おすすめはしない。

LuckPerms を導入しているなら、例えば以下のようにして権限を与える。

lp group default permission set multiverse.teleport.self.*
lp group default permission set multiverse.core.spawn.self
lp group default permission set multiverse.core.list.worlds

コマンドを使わせたくない場合は、MVに対応したポータル作成用プラグインを用いて、適切なポータルを管理者、もしくは権限を持っている人が作る必要がある。

Multiverse-Portals プラグイン
Basics (Portals) · Multiverse/Multiverse-Core Wiki · GitHub
Multiverse-SignPortals プラグイン
Portal Style (SignPortals) · Multiverse/Multiverse-Core Wiki · GitHub

スポーン地点の確認(特にネザー)

mvプラグインでネザーやエンドのディメンションを作成した場合、各ディメンションの初期スポーン地点の安全性は保証されない。ネザーの場合はマグマの中になることがあるし、エンドの場合はエンドの中心(出口ポータルになるところ)に設定される。

この際、mvtp で初期スポーン地点に移動してくるプレイヤーが危険なので、何らかの方法で安全なスポーン地点を設定する必要がある。例えば以下のいずれかのような調整が必要になるだろう。ここでは特に危険なネザーを例にして説明する。

(1) ディメンション生成後に管理者がゲームにログインし、

/mvtp resource_nether

などとして初期スポーン地点を確認する。(移動直後にクリエ/インスペクターモードに切り替えないと、すぐ死ぬような)危険なところであれば安全なところまで移動し、スポーン地点を

/mvsetspawn

として設定しなおす。

(2) resource の初期スポーン地点近くでネザーポータルを作成(ネザーポータル周辺は基本的に安全になる)してネザーに入ってから、その近くをネザーの初期スポーン地点として設定しなおす。

作成したディメンション(ワールド)の確認

作成したワールドの設定がきちんと出来ているかどうか確認するには、 mv info コマンドや mv gamerules で確認するとよい。以下に、サーバコンソールで mv info コマンドなどを実行したときの様子を示す。> はサーバコンソールのプロンプトである。

> mv info resource 
[11:28:39 INFO]: --- General Info ---(以下所々中略)
[11:28:39 INFO]: World Name: resource
[11:28:39 INFO]: World Alias: reso (←別名を設定した場合)
[11:28:39 INFO]: Difficulty: NORMAL (←難易度を変更した場合)
[11:28:39 INFO]: Players will respawn in: reso (←重要)
> mv gamerules resource
[11:30:30 INFO]: === Gamerules for resource ===
[11:30:30 INFO]: (中略)playersSleepingPercentage: 25, (以下略)

さらに、mvnp link を設定した際は、mvnp show コマンドを使って

> mvnp show nether
[00:42:11 INFO]: --- NetherPortal Links ---
[00:42:11 INFO]: res_n -> res
[00:42:11 INFO]: res -> res_n
> mvnp show end
[00:42:13 INFO]: --- EnderPortal Links ---
[00:42:13 INFO]: res_e -> res
[00:42:13 INFO]: res -> res_e

などと表示されているか見ればよい。

資源ワールドの再生成

まずなにより全体のバックアップを必ず行う。コマンドの入力ミスなどでメインワールドとの関係性を破壊した場合でも戻せるようにしておく。

ゲームルールを調整したまま世界を再生成するには

mv regen resource --keep-gamerules
mv regen resource_nether --keep-gamerules
mv regen resource_the_end --keep-gamerules

とすればよい。seedを設定したい場合は -s オプションを使う。

再生成後は、mv info, mv gamerules, mvnp show コマンドなどで、ディメンションの設定が消去されていないか確認する。特に、リスポーンするワールドが適切か、難易度や独自のgamerule設定が適切か、ネザーやエンドのポータルとオーバーワールドの関係性は適切か、であろうか。これらの設定が消えていたら、再度設定すればよい。

Seedが異なる値で再生成された場合、ディメンションの初期スポーン地点の安全性は保証されない(特にネザー)ので、管理者がログインして、安全な初期スポーン地点を設定する。

一通り作業し終わったら、paperMCを再起動し、実際に再生成されたワールドに入ってみるとよいだろう。

他のプラグインを併用している場合:dynmapの例

ワールド全体に影響するようなプラグインについても確認や調整が必要かもしれない。たとえば dynmapを用いて地図を作成している場合は、dynmap のリセットと組み合わせる。dynmap を pause して地図の描画を抑制したあと、地図データを消去してから、ディメンションを再生成する。

dynmap pause all
dynmap purgeworld resource
mv regen resource --keep-gamerules
dynmap purgeworld resource_nether
mv regen resource_nether --keep-gamerules
dynmap purgeworld resource_the_end
mv regen resource_the_end --keep-gamerules

再生成後のディメンションの確認、paperMCの再起動、各ディメンションに入ってみてスポーン地点の調整などを行ったら、スポーン地点付近で管理者権限を持つユーザーが、周囲64ブロック程度の範囲をレンダリングしておくとよいだろう。

/mvtp resource
/dynmap radiusrender 64