LoginSignup
19
12

More than 3 years have passed since last update.

docker経由でMinecraft資源(Spigot)サーバーを立てる

Last updated at Posted at 2020-10-12

WSL2の真骨頂

ヾ(・ω<)ノ" 三三三● ⅱⅲ コロコロ♪

------------------- ↓ 余談はここから ↓-------------------

Minecraft触るのは何年ぶりだろう。
(ボートがぶつかるとすぐ壊れてた頃)
創った建築物をクリーパーに破壊されて辞めたのは覚えてる。

久々に触ってみようということになり、
どうせなら複数サーバーでサーバー間移動できるようにしておきたいと、
Minecraftサーバーを立てる遊びを始める
(なにやってんねん (・ω・) )

折角WSL2が入ってるし、
Linux上にインストールしてみよう。
ビルドがいるらしいからdocker使おう。
MODも使えるようにしよう。
サーバーも複数立てれるようにしよう。
と仕様が欲張りになり、
時間だけが過ぎていくことに。

なんとか形になったからここに残す。


------------------- ↓ 本題はここから ↓-------------------

事前準備

Minecraftをインストールするのは当然。
Java Edition(Windows版)でいいと思う。
(無料じゃないよ!)

WSL2とUbuntu、dockerが入ってるのが前提
この辺でも見て入れといて。

WSL2+docker+PHPのWindows開発環境構築(1) WSL2編
WSL2+docker+PHPのWindows開発環境構築(2) docker編

PowerShellから以下のようにコマンドが通れば成功

PS C:\> wsl -d Ubuntu-20.04
$ docker --version
Docker version 19.03.13, build 4484c46d9d

データ保存用にディレクトリを切っておく

$ mkdir ~/minecraft_data

dockerからコンテナ生成

SpigotというサーバーMODがあるそうな。
(よくわかってない)
spigotのdockerは別のが見つかるが、
よく使われる方にパラメータだけで設定できそうだからこちらを採用

itzg/minecraft-server

$ docker run -d -v ~/minecraft_data:/data -p 25565:25565 -e TYPE=SPIGOT -e EULA=TRUE --name mc itzg/minecraft-server
# プラグイン指定 -e MODS=http://hogehoge.com/plugin01.jar,http://hogehoge.com/plugin02.jar
# シード値指定 -e SEED=7314490960418706833

起動はすぐだけど、
追加のダウンロードとかバイオーム生成とか諸々かかるので、
3分ぐらい待つ
( ˘ω˘ )スヤァ…

起動確認

Minecraftを起動してMultiplayerから「Direct Connection」で接続を試す。

Minecraft 1.16.3 2020_10_09 9_04_25_r.png

Minecraft 1.16.3 2020_10_09 9_04_13_r.png

Minecraft 1.16.3 2020_10_09 9_14_31_r.png

接続を確認してみる。

Minecraft 1.16.3 - Multiplayer (3rd-party Server) 2020_10_09 15_32_31_r.png

よしログインでけた (`・ω・´)キリッ

別ワールド生成

プラグイン追加

プラグインに関する詳細説明は後書きにするとして、
ここでは必要な分だけ書いておこう。

$ docker stop mc
$ cd ~/minecraft_data/plugins
$ wget http://ci.onarandombox.com/job/Multiverse-Core/Release%20Build/artifact/target/Multiverse-Core-4.2.2.jar # マルチワールド管理
$ wget http://ci.onarandombox.com/job/Multiverse-Portals/Release%20Build/artifact/target/Multiverse-Portals-4.2.0.jar # ワールド間移動
$ wget https://ci.lucko.me/job/LuckPerms/lastStableBuild/artifact/bukkit/build/libs/LuckPerms-Bukkit-5.1.107.jar # プラグイン権限管理
$ docker start mc

( ˘ω˘ )スヤァ…

( ゚д゚)ハッ!

プラグイン権限調整

ユーザー名をDozoとすると

$ docker exec -i mc rcon-cli
> lp user Dozo permission set luckperms.* true
> lp user Dozo permission set minecraft.command.* true
> lp user Dozo permission set multiverse.* true
> ^C (ctrl+c)

コンソールからは無反応だがユーザー名さえ間違ってなければこれでよい

マイクラにログインして以下のコマンドを実行

/gamerule doDaylightCycle false

実行できていれば成功
これは時間停止コマンドで作業中に夜が来てゾンビにやられることを防げる

ワールド生成

すべての準備ができたのでワールド生成といこう。
rcon-cli上でも生成はできるが、
実感が薄いのでマイクラ上で行う

/mv create asset NORMAL
Starting creation of world 'asset'...
Complete!

これでassetという名称の新しいワールドが生成された
移動は以下のコマンド

/mvtp asset

試しにネザーを創って移動してみると

Minecraft 1.16.3 - Multiplayer (3rd-party Server) 2020_10_10 12_58_03_r.png

よし!成功だ! (`・ω・´)キリッ

とりあえず形にはなったので、
あとは細かい設定だけだな。

docker経由でMinecraft資源(Spigot)サーバーを立てる(2)


------------------- ↓ 後書はここから ↓-------------------

プラグイン設定

保存用ディレクトリにpluginsというのがあるが、
ここにビルド済みのプラグインファイル(jar)を置くことで、
プラグインを追加することができる
記事の頭の方にちょろっとあったデータ保存用ディレクトリがここで利いてくる。

cloneしてmavenでビルドという流れだが、
ビルド済みなものを直接使う方が簡単でいい。

書くプラグイン製作者はJenkinsを公開しているようで、
そちらから拝借しよう。
その際、最新のビルドではなく安定のビルドから取得

Multiverse-Core [Jenkins] - Vivaldi 2020_10_09 12_43_58_rr.png

マルチワールド

Multiverse

Multiverse was created at the dawn of Bukkit multiworld support. It has since then grown into a complete world management solution including special treatment of your nether worlds with Multiverse NetherPortals.

In the second delivery of Multiverse, we've broken it up into several smaller plugins that are each feature packed but not bloated! Multiverse provides the easiest to use world management solution for your Minecraft server, big or small, and with great addons like Portals and NetherPortals, what's not to love!

Multiverse is here and works for the latest server build! Is your server a Multiverse?
https://dev.bukkit.org/projects/multiverse-core/

複数のサーバーを管理するプラグイン。ワールドの作成、再生成、サーバー間の移動など複数サーバーによるメリットを享受することができる。
各種プラグインは

名称 詳細 Jenkins URL
Multiverse-core マルチサーバーのコアシステム http://ci.onarandombox.com/view/Multiverse/job/Multiverse-Core/
Multiverse-Portals サーバー間移動のポータルを構築 http://ci.onarandombox.com/view/Multiverse/job/Multiverse-Portals/
Multiverse-NetherPortals ネザーゲートを使ったサーバー間移動 http://ci.onarandombox.com/view/Multiverse/job/Multiverse-NetherPortals/
Multiverse-SignPortals 看板を使ったサーバー間移動 http://ci.onarandombox.com/view/Multiverse/job/Multiverse-SignPortals/
Multiverse-Inventories サーバー間のインベントリ管理 http://ci.onarandombox.com/view/Multiverse/job/Multiverse-Inventories/

どうせなら全部入れとくか。

$ cd ~/minecraft_data/plugins
$ wget http://ci.onarandombox.com/job/Multiverse-Core/Release%20Build/artifact/target/Multiverse-Core-4.2.2.jar
$ wget http://ci.onarandombox.com/job/Multiverse-Portals/Release%20Build/artifact/target/Multiverse-Portals-4.2.0.jar
$ wget http://ci.onarandombox.com/job/Multiverse-NetherPortals/Release%20Build/artifact/target/Multiverse-NetherPortals-4.2.1.jar
$ wget http://ci.onarandombox.com/job/Multiverse-Inventories/Release%20Build/artifact/target/Multiverse-Inventories-4.2.1.jar

ワールド生成のパラメータはこちら
https://github.com/Multiverse/Multiverse-Core/wiki/World-properties

コマンドはマイクラ上かRCON上で。

$  docker exec -i mc rcon-cli
> mvlist
§d====[ Multiverse World List ]====
§fworld§f§f - §aNORMAL
§fworld_the_end§f§f - §bTHE_END
§fworld_nether§f§f - §cNETHER

> mv create asset NORMAL
Starting creation of world 'asset'...
Complete!

> mv modify set weather false asset
§aSuccess!§f Property §bweather§f was set to §afalse

> mvrule doDaylightCycle false asset
§aSuccess!§f Gamerule §bdoDaylightCycle§f was set to §afalse§f.

> mv modify add creeper monsters asset
§aSuccess! §bcreeper§f was §cremoved from §amonsters

> mv create farm NORMAL -t FLAT
Starting creation of world 'farm'...
Complete!

> mv modify set gamemode creative farm
§aSuccess!§f Property §bgamemode§f was set to §acreative

> mv modify set difficulty hard farm
§aSuccess!§f Property §bdifficulty§f was set to §ahard

> mv modify set hunger false farm
§aSuccess!§f Property §bhunger§f was set to §afalse

サーバー管理

LuckPerms

LuckPerms is a permissions plugin for Minecraft servers. It allows server admins to control what features players can use by creating groups and assigning permissions.
https://luckperms.net

サーバーの権限などを管理するプラグイン

名称 詳細 Jenkins URL
LuckPerms https://ci.lucko.me/job/LuckPerms/
$ cd ~/minecraft_data/plugins
$ wget https://ci.lucko.me/job/LuckPerms/lastStableBuild/artifact/bukkit/build/libs/LuckPerms-Bukkit-5.1.107.jar

LuckPermsプラグインはデフォルトで管理ユーザーを設定していないので、
再起動後、minecraftコンソールにアクセスしてユーザー登録をする。
ユーザー名をDozoとすると

$ docker restart mc
$ docker exec -i mc rcon-cli
> lp user Dozo permission set luckperms.* true
ctrl+C

バグなのかわからないが入力しても反応はないが、
ちゃんと機能はしている。
動作確認をするためクライアントで接続する

/lp editor

Minecraft 1.16.3 - Multiplayer (3rd-party Server) 2020_10_09 20_50_45_r.png

記載のURLをクリックしてアクセスするとパーミッション変更のWeb UIに移動するので、
各種設定を行うことができる。
とりあえずこのぐらい設定して微調整という感じで。

グループ名 権限
Admin minecraft.command.ban minecraft.command.pardon some.cool.admin.perm someplugin.vanish
Mod minecraft.command.mute minecraft.command.unmute some.cool.mod.perm chatcolor.bold
Default minecraft.command.say minecraft.command.me

参考:
Using WSL2 in a Docker Linux container on Windows to run a Minecraft Java Edition

19
12
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
12