⛏️

【Minecraft】Yatopiaの導入と小規模サーバ向けのチューニング【2021年6月19日追記】

2021/02/16に公開

2021年6月19日追記

2021/06/19、Yatopiaの開発を終了するとのアナウンスがありました。
私はこのプロジェクトを以前から注目しており、Minecraftサーバのパフォーマンスの改善に熱心に取り組むプロジェクトとして応援していたと同時に、実際に私の身内用のサーバで運用しておりました。

事実、様々なサーバソフトやModのパッチを統合する関係上、そのパッチの上流に問題があった際に、同じ問題が発生してしまうこともありました。確かに、この問題は対処が難しいことかもしれませんが、それでもYatopiaのチームは上流へのフィードバックを積極的に行い、一時的にパッチを削除するといった対応をとりながら、彼らなりに上手く対応していたと私は思っています。

複数のパッチを取り込んで開発する以上、安定性に疑問を持っていた方がある程度いらっしゃったのは事実です。しかし、その意見に便乗するかのように、理不尽な誹謗中傷をYatopiaのチームに対して行った方もいました。今日に至るまで、開発チームの方々がそれを理由でチームを去ったこともありましたし、今回の開発終了の件もそれが理由でした。

現在、私はYatopiaのリーダーが移行先として推奨したAirplaneへの移行を検討していますが、今回の決定に至るまでに起きた悲しい出来事を大変遺憾に思うと共に、この記事をMinecraftコミュニティへの問題提起として、そして素晴らしいプロジェクトが生きていた証として残していこうと思います。

今回はYatopiaに限った記事ではありますが、他のサーバソフトでも有用な情報が含まれているはずです。ぜひ、引き続きお読みください。


どうもGenbuです。マイペースにMinecraftで遊んでたりします。

さて、私は身内用の小規模なMinecraftサーバ(〜10人程度)を動かして遊んでいるのですが、それにあたって動作の軽いサーバソフトを探していたところ、非常に良いものを発見したので、今回はその紹介と導入方法の解説を行っていきます。

Yatopiaとは

今回紹介するサーバソフトは「Yatopia」という名称なのですが、このサーバソフトは動作が軽く設定項目が多いというのが大きな特徴です。

しかし、2021年2月16日現在、その知名度はあまり高くなく、日本での採用事例は私以外知らないのが現状です。なので、身内鯖を中心に採用事例が広がることを期待して、本記事を投稿する次第となりました。

次に、Yatopiaの主な機能について紹介していきます。

主な機能

  • CraftBukkit / Spigot / Paperとの高い互換性
  • 豊富な設定項目
  • 強力な最適化パッチの統合

CraftBukkit / Spigot / Paperとの高い互換性

世界的にも有名なCraftBukkit・Spigotといった有名なサーバソフトをベースに開発されており、ほとんどのプラグインをそのまま持ち込む形で導入することができます。

豊富な設定項目

Spigotをはじめて導入した人は、公式のサーバと比較して設定項目の多さに圧倒された人もいるかと思われますが、Yatopiaはそれよりも設定項目が多く、ニーズに応じてサーバを最適化することができます。

たとえば、Paper由来の

  • プレイヤーごとのMobスポーン (シングルプレイの仕様に最も近い)
  • レッドストーン処理の最適化
  • 爆発の処理の最適化

こういった機能をカバーしつつ、従来のserver.propertiesによる設定や、bukkit.ymlspigot.ymlを用いた設定もサポートしており、既存のサーバソフトからの移行も大変しやすくなっているのが特徴です。

また、SpigotやPaperから派生したTuinity、Purpurの設定項目だけでなく、Yatopia独自の設定項目もカバーしており、CraftBukkit系のサーバソフトウェアの中でも最強クラスと思われるカスタマイズ性の高さを誇ります。

強力な最適化パッチの統合

お気づきの人もいらっしゃるかもしれませんが、Spigotは公式のサーバソフトよりも動作が軽いのが特徴です。

ところが、Yatopiaはその上をいく動作の軽さを誇り、設定を駆使すればバニラらしい挙動を維持したまま、負荷のかかりやすい処理を最適化することができます。

何も設定しなくとも、ネザーの読み込みの高速化、チャンク読み込みの非同期化といった恩恵を受けることができるので、とりあえず導入するだけでも効果は抜群だと思います。

他にもCraftBukkit系のサーバソフトの中には様々な最適化パッチを施したものがありますが、Yatopiaはそれらのパッチも内包しており、その点においても最強クラスと言えるでしょう。

Yatopiaの導入

では、実際にYatopiaを導入し、動かしてみましょう。

今回使用する動作環境は下記の通りです。

  • Raspberry Pi 4B 4GB
  • Manjaro Linux Minimal 20.12.1
  • Java 11 (AdoptOpenJDK build 11.0.10+9)
  • Minecraft 1.16.5

動作させるOSを問わず、Java 11またはそれ以上のJDKを事前に導入しておいてください。

1. サーバディレクトリの作成と準備

※ 他のサーバソフトから移行する方は、事前にサーバ全体のバックアップを取ってから実施してください。

まず、サーバディレクトリを作り、そのディレクトリに入りましょう。名前は好きなディレクトリで構いませんが、今回はyatopiaというディレクトリを作成します。

既にSpigotサーバをお持ちの方は、ディレクトリの作成をスキップしていただいても構いません。

$ mkdir yatopia
$ cd yatopia

Yatopiaのダウンロードとインストール

次に、Yatopiaをダウンロードします。下記のリンクから該当するバージョンを選び、見つかったバージョンを選びます。

https://yatopiamc.org/download.html

安定版をお求めの方は、Latest stable buildをダウンロードします。

今回はMinecraft 1.16.5対応の安定版 #24 を使用します。

$ curl -Lo yatopia-1.16.5.jar "https://api.yatopiamc.org/v2/build/24/download?branch=ver/1.16.5"

Yatopiaのダウンロードが終わったら、サーバを起動するためのシェルスクリプトを作成します。
せっかくなので、JVMのチューニングもこの段階で行っておきましょう。

お好みのエディタで、下記の内容のシェルスクリプトを作成してください。ファイル名は問いませんが、ここではシェルスクリプトのファイル名をserver.shとします。

※ ParallelGCThreadsとConcGCThreadsの値は、お使いのプロセッサのコア数に応じて変更してください。

#!/bin/bash

cd `dirname %0`

java -server -Xms2560M -Xmx2560M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:ParallelGCThreads=2 -XX:ConcGCThreads=2 -XX:+DisableExplicitGC -XX:+UseStringDeduplication -XX:+DisableExplicitGC -XX:-UseBiasedLocking -XX:+UseTLAB -XX:MaxGCPauseMillis=100 -XX:TargetSurvivorRatio=90 -XX:+AlwaysPreTouch -XX:+ParallelRefProcEnabled -jar yatopia-1.16.5.jar

シェルスクリプトを作成したら、実行権限を付与します。

$ chmod +x server.sh

Yatopiaの起動

サーバの起動にあたり、Mojangの利用規約に同意する必要があるため、下記のリンクの利用規約を読み、同意する場合先に進みます。

https://account.mojang.com/documents/minecraft_eula

利用規約に同意する場合、下記のコマンドを実行します。

$ echo eula=true > eula.txt

それでは、一旦サーバを起動してみましょう。screenコマンドを用いてバックグラウンド実行したい方は、お好みの名前でセッションを作成し、server.shを起動してください。

$ ./server.sh

ログにDone!と表示されれば、起動完了です。

とりあえずこの段階で遊ぶことはできますが、次はサーバの設定を変更し、小規模サーバ向けのチューニングを施します。

小規模サーバ向けのチューニング

サーバが稼働中の場合、一旦stopコマンドを実行し、サーバを停止します。

お好みのテキストエディタを開き、下記のファイル名の設定ファイルに記載されている項目を変更してください。

server.properties

項目名 設定する値
allow-flight true
view-distance 8〜16の値

bukkit.yml

項目名 設定する値
period-in-chunks 400

spigot.yml

項目名 設定する値
save-user-cache-on-stop-only true
tick-inactive-villagers false

paper.yml

※ もしレッドストーンの挙動に問題が発生した場合、use-faster-eigencraft-redstoneの値をfalseに設定してください。

項目名 設定する値
max-auto-save-chunks-per-tick 6
optimize-explosions true
per-player-mob-spawns true
use-faster-eigencraft-redstone true

yatopia.yml

※ Minecraftの統合版と共にプレイすることを想定し、かつGeyserとFloodgateを導入した方は、下記の設定を変更してください。
※ 項目がない場合は読み飛ばしてください。

項目名 設定する値
using-floodgate true

以上で設定は完了です。それでは、もう一度サーバを起動してみましょう。

$ ./server.sh

ここまでの設定おつかれさまでした。

既存のCraftBukkit / Spigotプラグインはどうなるの?

ほとんどのプラグインはそのままお使いいただけますが、もし問題が発生した場合、そのプラグインの使用を停止し、開発者に問題をフィードバックするか、各自の判断で対応してください。

総括

さて、ここまでYatopiaの紹介と導入、チューニングについて解説していきました。

比較的新しいサーバソフトですが、ほとんどの場合快適にMinecraftがプレイできるようになったと思います。

また、メモリが4GBの環境でも快適にプレイできるチューニングや、快適さとバニラの挙動のいいとこ取りをした設定も紹介したため、これをベースに用途に応じたチューニングを施すことも可能です。

ご家族やお友達の方と、快適かつ楽しいMinecraftライフを送ってください。

ここまでご覧いただき、ありがとうございました。またお会いしましょう。

参考文献

  1. https://github.com/YatopiaMC/Yatopia
  2. https://www.spigotmc.org/threads/guide-server-optimization⚡.283181/

Discussion