サイト案内

運営してるひと: @sters9

妻と娘と猫と神奈川県に住んでいます。最近は Go, Ruby, Rails, Kubernetes, GCP, Datadog あたりをしていますがもっといろいろやりたい!

サイト案内

開発環境の紹介

プライバシーポリシー

tools.gomiba.co

サイト内検索

アーカイブ

2024/04 (5) 2024/03 (4) 2024/01 (3)

2023/12 (1) 2023/11 (3) 2023/10 (1) 2023/09 (1) 2023/08 (2) 2023/05 (4) 2023/04 (4) 2023/03 (4) 2023/02 (2) 2023/01 (1)

2022/12 (1) 2022/11 (4) 2022/10 (3) 2022/09 (2) 2022/08 (4) 2022/07 (5) 2022/06 (4) 2022/05 (9) 2022/04 (8) 2022/03 (10) 2022/02 (21) 2022/01 (8)

2021/12 (11) 2021/11 (1) 2021/10 (4) 2021/09 (2) 2021/08 (1) 2021/07 (2) 2021/06 (5) 2021/05 (10) 2021/04 (1) 2021/03 (8) 2021/02 (12) 2021/01 (8)

2020/05 (2) 2020/04 (2) 2020/02 (2) 2020/01 (1)

2019/12 (3) 2019/11 (2) 2019/10 (5) 2019/09 (3) 2019/07 (6) 2019/06 (4) 2019/04 (3) 2019/01 (2)

2018/12 (6) 2018/10 (4) 2018/09 (6) 2018/08 (7) 2018/07 (16) 2018/06 (7) 2018/05 (7) 2018/04 (5) 2018/03 (3) 2018/02 (10) 2018/01 (6)

2017/12 (8) 2017/11 (6) 2017/10 (10) 2017/09 (12) 2017/08 (12) 2017/07 (3) 2017/06 (1) 2017/01 (4)

2016/12 (5) 2016/10 (3) 2016/09 (1) 2016/07 (2) 2016/06 (1) 2016/04 (1) 2016/02 (1) 2016/01 (2)

2015/12 (1) 2015/10 (1) 2015/09 (3) 2015/06 (1) 2015/01 (1)

2014/08 (2) 2014/07 (3) 2014/05 (1) 2014/01 (7)

2013/12 (2) 2013/11 (4) 2013/10 (1) 2013/09 (1) 2013/08 (3) 2013/07 (4) 2013/06 (5) 2013/05 (2) 2013/04 (7) 2013/03 (1)

Minecraft をやり始めて、サーバを立てて、ここまでのまとめ

この記事は公開されてから1年以上経過しており、最新の内容に追従できていない可能性があります。

新規に工業で遊び始めました。 工業的 Minecraft プレイ日記 #0 / またもや工業生活を始める | ごみばこいん Blog


こんにちは。ごみばこです。

半年くらい前から嫁と2人でふわーっと Minecraft をやり始め、サーバや mod をあれこれいじくり回ってきたので、ここいらでいっかいまとめておこうかと思います。

 

Minecraft の始まり

始め方や細かい情報 wiki に乗っているのでそちらを見てもらうとして。

Minecraft Japan Wiki - Minecraftトップページ

そんなこんなで Minecraft の準備が整い、ローカルでぽちぽちやっていましたが、毎回サーバ上げて、っていうのはどちらかがいないときに面倒だよね、ということになりサーバを別途用意することにしました。以前 Terraria も2人でやっていたということもあって、それ専用で使っていた CentOS7 なサーバがいるので、これをそのまま利用することにしました。

ちなみに Minecraft サーバ とかでググると「物理サーバを自宅に用意しよう!」「UPSやNASを使って~」「メモリが~」「batファイルを作成して」とかって書いてあって、なかなか激しいなって思いました。と、いうかこのせいでググっても英語情報ばっかりで(これはこれでわかりやすいものが多くてうれしいけど)、あまり参考になるような情報と出会うことも少なかったということも併記しておきます。もっと Linux やろうぜ。

 

MC 1.10 Spigotの利用

Minecraft を始めたとき、バージョンは 1.10 でした。

MOD にも魅力を感じていたところですが、クライアント側で用意するの面倒じゃんね、とか、いやいや、意外とサーバ側だけでもできるんちゃう?というところから調べていると(もとい Wiki を眺めると)、Spigot というよさそうなものがあるではありませんか。

SpigotMC - High Performance Minecraft

導入手順は wiki と公式サイトに書いてある通りで、まあ、そんなに難しいものでもなく。と投げっぱなしもあれなので簡単に説明を書いておきましょうか。

 

Spigot は Bukkit と呼ばれる Minecraft サーバをもとに作られたもので Bukkit プラグインもそのまま利用できます。Bukkit は DMCA 問題(配布するプログラムに Minecraft 公式の持っている著作権的な云々が絡んでいる)があり、Spigot も同じように影響を受けています。そのため、ソース(とビルドツール)が配布されているので、これを自分たちでビルドすることになります。

ビルドする方法は以下のページを参照してもらえばよろしくて。

BuildTools | SpigotMC - High Performance Minecraft

これまたちなみにですが、このくらいの英語なら Google 翻訳片手に戦えるはずなので、やろうと思っている人は頑張って戦おうね。投げっぱなしは鯖管としてどうなんかなーとか。(ググるとそんな人たちももりもり出てきてアレ)

 

そんなこんなで Spigot サーバが立ち上がり、常時稼働しながらちょっとずつプラグインを入れていきました。最終的には以下のようなプラグインが入っていました。

MOD名ざっくり説明
AutoSaveWorldワールドのバックアップを定期的に取る
BlockHat手に持っているブロックを頭に被ることができる
DTools3x3 を処理できる強化型のつるはし、斧、シャベルを作成できる
FarmProtect開墾した土地の上で走るジャンプするしても大丈夫にする
GlassDropperガラスが割れずにドロップする
HealthBarMob の頭上に体力ゲージを表示する
Multiverse-CoreMultiverse プラグインの前提プラグイン
Multiverse-Portals別ワールドに移動できるポータルが作れる
Multiverse-SignPortals別ワールドに移動できる看板が作れる
Original-Double-Jump空中でジャンプができる
PacketListenerAPI前提プラグイン
PermissionsEx権限管理。後々を考えてはいたが、まずは身内だけなのでフル許可!
PetOwnerペットの所有者を変更できる
ProperTime時間の流れを制御できる
ProtocolLib前提プラグイン
RampenDrills指定の組み合わせでブロックを組み立てると走行するドリルが出来上がる
SimpleSortチェストを棒でたたくと中身をソートできる
TreeAssist繋がっている原木を一括で刈れる
Vault前提プラグイン
WorldBorderワールドに境界線を設定できる
XPKeeper経験値を貯めておける看板が作れる
dynmapWeb で地図を見れる
dynmap-mobsDynMap に Mob 表示機能を追加する

 

いろいろなプラグインを見ていると、もはやそれチートだよねとかっていうものもある中で「バニラ環境(何も拡張を入れていないドノーマル状態)からは便利になるけど、チートにはならないように。ゲームバランスぶっ壊れないように」というところだけは気を付けていました。

「3x3ツール作れるけど、3倍の素材が必要で、耐久力は通常の3倍どころか、1.5倍程度」

「2段ジャンプできるけど、その分おなかが多く空いてくる」

などといった具合に、バランス調整をしていました。

 

しばらくはこんなで、ワールドを増やしてポータル作って飛んで遊んだり、なんてしていました。

 

が!!!!!

やはり、実況動画を見ていると、工業mod にも憧れをもつところです。

 

めっちゃ調べたのですが、やっぱり Spigot や Bukkit などでは追加ブロックはできないということで、なくなくあきらめて forge に移行することを決めました。

ちなみに、情報があまり多くないですが Slime Fun という Spigot で使える工業的なものもあります。こいつもいろいろ調べてみて検討はしました。結果としては、ビルド系のプラグインの RampenDrills で体感したのですが、既存ブロックを組み合わせて配置すると、何かのメカニズムが動くよ!というものがどうも難しいねっていう話になり、あきらめることにしました。

 

MC 1.8.9 Forgeの利用

Forge は Minecraft そのものを拡張していくようなタイプのものになります。原理はよくわかんないんですけど、 Minecraft の jar を読み込んでいい具合に展開して上書きしていくんですかね。マルチプレイヤー時には、サーバ側とクライアント側で基本的には同じものを入れる必要があります。その中でもサーバ側だけで動くもの、クライアント側だけで動くものがあったりします。

Minecraft Forge

 

Forge 自体は 1.10 にも対応していたのですが、「工業mod をする」という前提で調べると一番近いものではどうも 1.8.9 になるようでした。また、移行するにあたり、今まで動いていたものはなるべくそのまま使いたいなあという思いもあり、それができる Sponge というものがあるのですが、それの対応も 1.8.9 以降だったのでちょうど都合よくいけそうでした。

Sponge は Forge の上で動く mod になっており、Spigot の API をいくつかエミュレートして、同時に Spigot 側の有名なプラグインたちを Sponge 向けに移植するようなこともしているそうです。つまり Sponge を使うことで、Forge の上で Spigot プラグインが動く!(ようなもの)が出来上がります。

Sponge - Minecraft Modding API

 

ここでちょっと用語を整理すると、Spigot や Bukkit などで拡張するためのものは「プラグイン」と呼ばれていて、Forge では 「mod」と呼ばれています。ちょっとややこしいですね。

 

プラグインの移行については、ちょっと古いですが下記のスレッドを見たり。

Plugins to be ported! - Plugins / Plugin Requests - Sponge Forums

どうしてもないものもあったりしたので一部あきらめたりもしました。 結果として、以下のような プラグイン、mod になりました。

MOD名ざっくり説明
DoubleJumpSponge プラグイン。Original-Double-Jump の Sponge 版。たぶんこれ → DoubleJump Plugin - Plugins / Plugin Requests - Sponge Forums
DynmapWeb 上で地図が見れる mod
Hammerz3x3 ピッケル mod
InventoryTweaksインベントリの整理 mod
TreeDestroyageSponge プラグイン。 TreeAssist の Sponge 版
buildcraft工業 mod
pexSponge プラグイン。 PermissionsEx の Sponge 版
projectportalsSponge プラグイン。 Multiverse-Portals の Sponge 版
projectworldsSponge プラグイン。 Multiverse-Core の Sponge 版
spongeforgeSponge 本体

だいぶ数が減りました。

Forge では利用する Forge や mod のバージョンはサーバとクライアントがすべてバージョンが揃っている必要があります。(要出典)その都合もあって、DLリンク を準備したり zip にまとめたりして、簡単に指定バージョンを集められるようなものを提供していました。

参考程度にですが Forge は forge-1.8.9-11.15.1.1890 を利用していました。

 

移行するものはプラグインだけでなく、ワールドもあります。

Spigot と Forge とでフォルダ構成が違ったりするのですが、Sponge を入れていると、Spigotの設定をみていい具合に設定ファイルやワールドをうまく移行してくれます。って、書いてあったのですが、うまくできなく、結局ワールドについては、自分のPC上で新しく作ったワールドのフォルダ構成と目比べしながら、手作業でフォルダ移動して設定を合わせていきました。

実際のサーバ上の移行については、いきなりえいやーではなく、自分のPC上で何度か確認してこれでオッケー!という状態で、実際のサーバ上の反映をしていきました。そのおかげもあり、特に大きなトラブルなく、Spigot から Forge + Sponge 環境へ移行することができました。

 

しかし、工業を楽しもうとし始めたころ、急に Minecraft サーバが重くなったり、落ちるような現象が多発するようになりました。サーバが重いながらも、プレイヤーの移動はできるので、既存ワールドの光景を見て回ると、ある村が工業で追加された「クァーリー」だらけになっていて、こいつが原因となって重くなっているようでした。

Minecraft はバージョンによって利用しているブロックの ID が異なることがあるそうで、 1.10 のあるブロックの ID が 1.8.9 の buildcraft で追加されたクァーリーの ID と被っていたために起きた現象でした。

MCEdit と呼ばれるマップ編集ソフトがあったりするので、個別に対応していくこともできたのですが、どこまで影響が出ているかわからなかったのもあり、泣く泣く既存ワールドをあきらめて、新規に始めることにしました。

 

新規ワールドでもクァーリーを動かして、もりもり掘削し始めるくらいには資源や環境が整いつつありましたが、そんなとき、これまた突然に Minecraft サーバが高負荷になり、反応が遅くなることが頻発するようになりました。

特に新しい mod を入れたわけでもなく、なんのことなしに、急に重くなったので原因もすぐにはわからず…。

Sponge で追加されるコマンドの中に /sponge timings report というものがあり、これを実行すると外部のサーバに Tick の詳細が送られ、分析レポートを見ることができます。

 

そもそも Minecraft の世界では、その世界の時間や処理を進める Tick というものがあります。これはサーバパフォーマンスに問題がなければ 20回/秒 ほどの速度で実行されていくと言われています。

サーバの動作がめっちゃ重たいということは、この Tick の中で何かしらの環境や mod が影響を及ぼしているものだと判断ができます。

例えばよくある話(要出典)を挙げると、水を高いところから大量に撒くとサーバが重いとか、大規模なトラップタワーを作ったり、レッドストーン回路を大量に作ると大変だとか。これらは、水やレッドストーンなど、プレイヤーや mob の動きに関係なく更新しなければいけない状態が多数あるために、1回の Tick でやることが増え、結果としてサーバ負荷が上がっている、というところになると思います。

 

というわけで、Tick の中で何が起こっているかの判断ができれば、原因となる mod や 環境がわかるのでは?と思い実施しました。すると以下のようなレポートが出来上がりました。

これを見ると buildcraft|core:bcresizcuboid が Tick 上で何か悪さをしていそう、ということが分かったので、実際にどこにいるのかを MCEdit で探しました。すると Buildcraft のポンプの部分にこの bcresizcuboid エンティティがくっついていることが分かりました。MCEdit 上でこのエンティティを消し、再度サーバに上げると特に問題も無さそうなほど快適な工業生活を再び迎えることができました。

が、この平穏な生活も長く続かず、やはり同じ問題が再発しまくるようになっていました。原因はポンプではなくて、そもそも Buildcraft なのでは?と思うようになり、安定版である 1.7.10 対応のことを考えるようになりました。それに合わせて、Buildcraft 以外にも Forestry for Minecraft や 豆腐Craft など、他の mod にも手を出してみたい、という話もあり、これもまたちょうどよいタイミングなので、思いきって移行していきます。

 

MC 1.7.10 Forge の利用

MC 1.7.10 では Sponge を利用することができません。代わりに Forge 上で動く mod ですべて行っていく必要があります。 まずは使いそうな mod だけ選んでいってみて、こんな感じです。

MOD名ざっくり説明
BedrockLayer岩盤を平らに整地してくれる
CodeChickenCoreNotEnoughItems で必要な mod
CraftingEX複数の mod で重なるレシピについて選んで実行できる
CutAll木こり
Hammerz3x3 ピッケル
InventoryTweaksインベントリ整理
MoSkeletonsスケルトン追加
NotEnoughItemsレシピ確認(チート無効)
SmashBatsMod敵を吹き飛ばすバット
TofuCraft豆腐もぐもぐ
buildcraft工業
coroutilMovePlus で必要な mod
forestry工業 + 農業 + 養蜂
moveplusダッジ、二段ジャンプ

ポータルや地図はなくなりました。まあいいかなと。そんな頻繁にポータル作るようなわけでもないので。そのうちでいいので、資源ワールドとかあったら便利だなーと思う程度なので、その時にまた調べて導入したらいいかなあと思っています。

 

さすがに移行も2回目になると、ワールドがだめだろうな、という予想もついています。実際にそのまま持っていくと、パイプが謎の液体に代わっていたり、木の柵が何かの工作機械になっていたりと、完全に使い物にならなくなっていました。というわけで、このワールドもポイして、新規ワールドです。逆に mod も入れ替わったりしているので、そっちのほうが資源を探しやすかったりして、都合がいいのです。

いまのところ、まだ鉱石があまり掘れていなくて、がっつり工業!とか豆腐!とかってほどじゃないのですが、順調に資源が集まりつつあり、これからの光景が楽しみです。1.7.10 でやっている人も多いようなので、きっと大丈夫だろうと思ってます!

 

おわりに

Minecraft を初めて半年くらい経ちました。これまで 1.10 → 1.8.9 → 1.7.10 とバージョンを変更してきて、それに合わせてサーバ環境も Spigot → Forge + Sponge → Forge と移り変わりました。不具合的なこともありましたが、やりたいことをベースに移ってきて、実際にやりたいことができていて、とても満足している状態です。

結果、Forge やるなら 1.7.10 にしておこう!という気持ちです。

 

最近はいろんな人の mod を見てたりして、自分も何かやってみたいなーと思っていたりします。mod 作るのは Java かーと思いつつ Scala や Kotolin が使えるとの情報もあって、どんな mod を作ろうかなーとワクワクしています。出来たらどこぞにこっそりと上げていこうかなーと。

というわけで Minecraft な生活はこれからもしばらく続きそうです…!

 

おまけ

今の使っているスクリプトをくっつけておきます。 参考程度にどうぞ!

// ★start.sh
// 初回起動用スクリプト
// screen コマンドを使ってシェルスクリプトを起動する

#!/bin/sh
cd "${0%/*}"
screen -AmdS minecraft-server-forge17 ./start_forge_server.sh
// ★start_forge_server.sh
// 常時起動スクリプト
// screen コマンド内で動き続けるスクリプト。
// minecraft が落ちてもこのスクリプトが生きていれば60秒後に再起動する。
//
// java のオプションとして以下のものを設定
//   メモリ割り当て:1GB
//     -Xms1G -Xmx1G
//   よりよいGC機能の利用
//     -XX:+UseConcMarkSweepGC
//     -XX:+CMSIncrementalPacing
//     -XX:ParallelGCThreads=3
//   最適化フラグの有効
//     -XX:+AggressiveOpts

#!/bin/bash

while true; do
    echo "Starting the server"
    java -Xms1G -Xmx1G\
         -XX:+UseConcMarkSweepGC \
         -XX:+CMSIncrementalPacing \
         -XX:ParallelGCThreads=3 \
         -XX:+AggressiveOpts \
         -jar forge-1.7.10-10.13.4.1614-1.7.10-universal.jar nogui

    echo "Waiting 60 seconds before starting the server again"
    sleep 60
done
// ★attach.sh
// screen に接続するためのスクリプト
// 毎回 screen コマンドやるのも嫌なので…

#!/bin/sh
screen -r minecraft-server-forge17
// ★cron_forge_server_restart1.sh
// crontab によって毎朝09:00に起動される
// サーバを落としますよーという告知

#!/bin/bash
screen -S minecraft-server-forge17 -p 0 -X stuff "say Restarting the server in 1 minutes^M"
// ★cron_forge_server_restart2.sh
// crontab によって毎朝09:01に起動される
// なんとなくスッキリしたいので minecraft を強制終了している

#!/bin/bash
ps ax | grep java | grep -v grep | awk '{ print $1 }' | xargs kill -9