先日、友人と「マイクラしたいね~」という話をしたのをきっかけに、マイクラサーバを立てました。過去に何度かマイクラサーバの立て方を書いてきましたが、Spigot かつ 1.17.1 でのバージョンは初めてだと思いますので、まとめておきます。
ちなみに仮想マシンのサイズは B2ms を選択しました。RAMが8GiBある中では安いほうです。
Java 16 の導入
使用している OS は Ubuntu 20.04 です。マイクラは 1.17.1 の Spigot で動かすので Java 16 の導入も必要ですね。
Java 16 の導入
sudo add-apt-repository ppa:linuxuprising/java -y sudo apt update sudo apt install openjdk-16-jre -y
Spigot の導入
Spigot を導入するには git が必要ですが、Ubuntu にはすでに入っているのでそのまま進めます。Spigot は BuildTools を使用して自動でセットアップを行えます。
BuildTools のダウンロード
curl -L -O https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar
セットアップしたいマイクラバージョンのオプションをつけて実行
java -jar BuildTools.jar --rev 1.17.1
しばらくすると同ディレクトリ内にサーバファイルが配置されます。
プラグインの導入
サーバファイルと同じディレクトリ内に plugins
というディレクトリを作成し、この中にお好きなプラグインをダウンロードしていきます。
今回使用するプラグインは以下の通りです。
名称 | 説明 |
---|---|
Dynmap | マイクラの世界地図を見ることができる |
LuckPerms | パーミッションの管理ができる |
MultiverseCore | 別ワールドの作成(資源サーバ)が作れる |
MultiversePortals | 別ワールドへ移動するためのゲートが作れる |
UltimateTimber | 一気に木を伐ることができる便利ツール |
Geyser | マイクラ統合版とのクロスプレイを可能にする |
floodgate | 統合版からのログイン時に認証キーを利用した設定が行える |
資源サーバ(ワールド)設定
まずはプレイヤーに管理者権限を与え、次のコマンドを実行します。
/mv create world_resource NORMAL
ワールドが生成されたらその世界へテレポートします。
/mv tp <PlayerName> world_resource
資源サーバと生活サーバを行き来できるようにゲートを作成し、プレイヤーにゲートの範囲を指定できるアイテムを与えます。
/mvp wand
そのアイテムを持ったまま、ゲートの左上のブロックを左クリック、右下のブロックを右クリックしてゲートの有効範囲を指定します。この状態で
/mvp create gate_resource
というコマンドを実行すると gate_resource という名前のポータルが作られます。一度、生活サーバにもどります。
/mv tp world
生活サーバでゲートを作成し、同じようにしてゲート範囲を指定します。そして、そのゲートと資源サーバのゲートをつなげます。
/mvp create gate_world p:gate_resource:s
ここで、:s は資源サーバへ移動したときのプレイヤーの向きを指定しています。sは南向き、nは北向き、eは東向き、wは西向きに設定できます。作ったゲートを通って資源サーバに移動し、
/mvp select gate_resource
を実行して資源サーバに設置されているゲートを選択します。このゲートを生活サーバのゲートと接続します。
/mvp modify dest p:gate_world:n
これで資源サーバと生活サーバで行き来できるようになります。ただし、パーミッションで一緒に遊ぶプレイヤーに multiverse.portal.access.*
を有効にしないとゲートをくぐってもテレポートできないので注意が必要です。
サーバの自動再起動
メモリ解放を行うために、サーバを定期的に再起動するような設定をおこないます。
#!/bin/bash SCREEN_NAME="minecraft" RESTART="/home/takunology/start.sh" screen -p 0 -S $SCREEN_NAME -X eval 'stuff "say メモリ解放のため、5分後にサーバを再起動します。\015"' screen -p 0 -S $SCREEN_NAME -X eval 'stuff "say プレイヤーの皆さんは5分以内にログアウトを済ませてください。\015"' sleep 120 screen -p 0 -S $SCREEN_NAME -X eval 'stuff "say サーバ再起動まで残り3分です。\015"' sleep 120 screen -p 0 -S $SCREEN_NAME -X eval 'stuff "say サーバ再起動まで残り1分です。\015"' sleep 30 screen -p 0 -S $SCREEN_NAME -X eval 'stuff "say 30秒後にサーバを再起動します。\015"' sleep 20 screen -p 0 -S $SCREEN_NAME -X eval 'stuff "say 10秒後にサーバを再起動します。\015"' sleep 5 screen -p 0 -S $SCREEN_NAME -X eval 'stuff "say 再起動まで残り5秒\015"' sleep 1 screen -p 0 -S $SCREEN_NAME -X eval 'stuff "say 再起動まで残り4秒\015"' sleep 1 screen -p 0 -S $SCREEN_NAME -X eval 'stuff "say 再起動まで残り3秒\015"' sleep 1 screen -p 0 -S $SCREEN_NAME -X eval 'stuff "say 再起動まで残り2秒\015"' sleep 1 screen -p 0 -S $SCREEN_NAME -X eval 'stuff "say 再起動まで残り1秒\015"' sleep 1 screen -p 0 -S $SCREEN_NAME -X eval 'stuff "kick @a サーバが再起動中です。1分ほどお待ち下さい。\015"' screen -p 0 -S $SCREEN_NAME -X eval 'stuff "stop\015"' while [ -n "$(screen -ls | grep -o "$SCREEN_NAME")" ] do sleep 1 done $RESTART
あとは crontab を利用して、一定期間ごとにシェルスクリプトを実行するように変更すればいいですね。(ここでは毎週月曜日の早朝5:00に再起動するようにしています。)
0 5 * * mon /home/takunology/restart.sh
イベントのお知らせ
2021年8月27日(金)20:00 より、MS Tech Camp #10 を開催します!
今回は Azure Functions の .NET ランタイムとC#プログラミングを使用して、Minecraft で花火を打ち上げます。
Azure Functions や マイクラプログラミング(C#)に興味のある方、ぜひご参加ください!(Minecraft Java 版でも統合版でもご参加いただけます)
夏の思い出に「マイクラ花火」いかがでしょうか?