Minecraft Server の 管理は意外と大変?
この記事は、Kogakuin Univ Advent Calender 2015 の21日目 の記事だったりします。
事の始まり
2015/11/24 にこんなツイートがきっかけでマイクラサーバを立てました。
そうです、脅迫がきっかけで、マイクラサーバを立てました。
これまでも、Minecraftサーバは立てて来ました。立てたバージョンはこちら↓
- Bukkit : MC 1.7.10
- Vanilla : MC 1.8
- Vanilla : MC 1.8.3 (For [Sbutatoon old edition])
で、今回は、The 工業化がしたいという要望から、必然的に Forge1.7.10 を採用することに。初めてのForgeサーバでした。
サーバ構築
細かいことを紹介し始めると、すごく長い記事になりそうなので、簡単&簡潔に書いていくつもりです。まあ、Fラン大学生でも分かる程度って感じです。後はGoogle先生に頼ってください。
構築環境
今回は、テストと本設置環境がちょっと異なります。
テスト環境
本設置環境
まあ、Javaのバージョンが同じなので、なんとかなるということで。
実際の流れ
テスト環境下
- Minecraft Forge をダウンロードする。
- ダウンロードした
forge***.jar
をWindows 上で一度起動、必要なファイル群を作業用ディレクトリにインストール。(扱いは保存)。 forge-**.jar
を起動、eula.txt
にeula=true
を記述(falseをtrueに書き換え)- mods ディレクトリに必要なModを導入。world ディレクトリは削除しておくのが吉(Modで追加されたブロックを反映させるため)
forge-**.jar
を再度起動、ワールドを生成させる。
ここまで、正常に起動できたら、minecraft.exe(ゲーム本体)を起動して、localhost
でサーバに接続してみて、問題なく動いているかを確認する。
問題がなければ、本設置環境に、作業用ディレクトリをまるごとコピーする
本設置環境下
- テスト環境からコピー(転送)してきたディレクトリを、本設置環境で実行したいディレクトリに移動させる。
- テスト環境同様、
forge-***.jar
実行してみる。 - 正常に稼働したら、minecraft.exe(ゲーム本体)から サーバIP でサーバに接続してみる。接続できれば成功。
この時、CentOS7は25565/tcp
のファイアーウォールを開放しておくこと。
ここまでで、ひとまずMinecraft Serverの構築は終了です。簡単でしょ?
Dynmap で Mod で追加されたブロックが表示されない
今回のメインのお話。
Forge のサーバを運用し始めた翌日、ある異変に気が付きました。 それは、modとして導入していたdynmapでのブロック表示です。
なんと、天井がないじゃないですか。
本当はこんな感じ。
ちゃんと天井はあります。屋根もね。
ですが、表示されません。なんででしょうか?
今回の登場Mod達
- Minecraft Forge
- mod を使うための前提。こいつが居ないと始まらない。
- Dynmap
- Dynamic web-based Map の略称。Webからマップが見れて、誰がいるのかが分かるし、そこからチャットが送れるすぐれもの。
- EnderIO
- minecraftの工業化Modの一種。今回初めて導入されたもの。とても便利(らしい)
- RailCraft
- minecraft の鉄道系mod。様々な鉄道系のアイテムを追加してくれる奴。面白そう。
なぜ、このようなことが起こっているのか
家の天井が無い間抜け仕様に関して
これは涙目でした。最初は仲間内から、
「なに、このセーフハウスの屋根なしはわざとなの?」
とか言われてました。違います、これはDynmapのバグです
この家の材料
せっかく、Modが入ったワールドなので、建材の一部にModで追加されたブロックを使ってもいいよね~とかいう気持ちで、
天井は RailCraft で追加されたブロックを使っています。これが、バグが見つかった原因です。
マップに点在する黒い点
当初はありました。ここには何があったのかと、当時一番ログインしていた人(かつ、脅迫してマイクラサーバを建てさせた某氏)に聞いたところ、
「RailCraft の露出ブロックだよ」
なるほど、RailCraft か...
Dynmap でのテクスチャ表示
ここから、ちょっと技術的なネタ。と、言っても、私は完全に理解している訳ではないので、あくまで推測論ですが。
ソースコード探しの旅
Dynmap の ソースコードは、Githubにて公開されていました。
Wiki もありますので、詳細はそちらを参考にしてください。
ちなみに、WikiのModサポートページによると、今回導入しているRailCraft
は、対応している事になっています。ナッテコッタイ
※EnderIO
はなぜか消滅しています。謎ですが。
このソースコードを見つける前に、別のMod:豆腐Modにて、Dynmapのカスタムモデルデータがあるということを知りました。
ここで、豆腐Modのカスタムモデルデータのテキストデータを見て、パターンを記憶しつつ、Dynmapのソースコードから、同じようなテキストデータがあるかどうかを探してみると...
バージョンの壁
ひとまず、RailCraftのテキストデータ、Railcraft-models.txtを眺めると...
(効果音:仁のテーマ、一番盛り上がるあれ)
待て待て待て、バージョンが古すぎるじゃないか。(※今回導入は9.8.0.0)
Dynmapは認識してるのに...?
そうです、起動時のログを確認すると、Forge経由でDynmapはちゃんとRailCratのバージョンを認識しているのです。
ですが、テクスチャが表示されません。なぜでしょうか?
マイクラのアイテムID
そろそろオチを考えないと、永遠に書いていそう(他にも、色々と検証していて、、それも書きたいのですが...) なので、解決の方向へ。
マイクラのアイテムIDに関しては、個人的印象では、1.8 にバージョンアップしてからうるさく言われるようになった気がします。
マイクラのIDが番号から文字列に順次変更していくということです。
これにより、giveコマンドで、ブロック指定するとき、番号だったものが、minecraft : **
みたいな指定になるようです。
閑話休題。
Modのバージョンのが上がっているということは、ブロックのIDも書き換わっているという可能性があるということです。
と、いう訳で調べてみることに。
ブロックIDを調べてみる
- 使ったmod : IDChecker-1.7.10d
比較対象
- RailCraft
- 9.2.1.0 : 1.7.10 で対応している最古のRailCraft。訳あってDynmapではブロックが表示されているのを確認している。
- 9.8.0.0 : 現状導入しているMod
- EnderIO
- 2.1.7.254 : 同上。
- 2.2.8.381 : 現状導入しているMod
比較結果
右が新、左が旧
RailCraftの場合
EnderIOの場合
EnderIOは同一ですが、RailCraftはアイテムID(ブロックID)が変わっているではありませんか。
ちなみに、Dynmap のソースでは、次のようになってました。
解決策
さてはて、とてつもなく長いネタになってきた気がしますが、あと少しで解決です。
最初は馬鹿をしました。
同じ轍を踏まないように書いておきますが、 .jarに固めようなんて考えないでくださいね!!!(やらかした顔)
豆腐Modを参考に。
カスタムモデルデータを配布している豆腐Modを参考に、RailCraftのモデル・テクスチャデータを上書きしました
実際にやったこと。
新旧のモデル・テクスチャデータの相違点は、tile.railcraft.
があるかないか。
なので、まずは、githubのdynmap-forgeソースから、RailCraftのモデル・テクスチャデータ(RailCraft-models.txt
/ RailCraft-texture.txt
) をコピペ保存する。
次に、今まであるモデル・テクスチャデータ(RailCraft-models.txt
/ RailCraft-texture.txt
) の該当箇所(tile.railcraft.
)を削除して、別途保存。
保存後、minecraft サーバの dynmap/renderdata
に、2つのテキストデータを突っ込んで、サーバをリスタートさせます。
祝解決
再起動後、マイクラサーバ内のOP権限で、/dynmap fullrender
をかけると...
なんと、上手く行きました。やったね。
総括
DynmapでのMod対応が遅れてたせいで、個人的に治すはめになりました。まあ、対処療法ですけど...
これで、快適なマイクラ生活が送れそうです。
マイクラサーバの管理は大変です。が、適当にやってるとなんとかなるもので。
でも、本当はワールドのバックアップとか、プレイヤーの行動記録とか取っておくのがいいんでしょうけどね...
すごく長くなりましたが、マイクラサーバの管理者ってこういう感じなのかなみたいなのかな?これでいいのかわし??