純規の暇人趣味ブログ

広くて浅い知識の湖

[Minecraft]1.11対応のSpigot(Bukkit)を用意する

      HimaJyun

どうも、@HimaJyunです、やってまいりましたね、定期的に発生するプラグイン淘汰イベント、メジャーアップデート……

1.9、1.10とこの記事を書いたので恒例(期待している方も居るかも?)ですが、1.11もきちんと書きますよ、もちろんですとも。

1.11...

ついにオブザーバーブロック追加でBUD回路不要になりました、個人的にはラマも気になります。

MOBの密集で窒息死すると言うのも、露骨なTT潰しですが負荷軽減と言う面では嬉しいです。(TTの構造を考え直す必要はありますが)

と、色々ありますが、クライアント側のアップデート情報は他所にお任せしましょう、ここはサーバ屋さんの読み物ですからね。

Spigotチームの1.11対応アナウンスは以下のページです、見ておいた方が良いかと思われます。

https://www.spigotmc.org/threads/bukkit-craftbukkit-spigot-1-11-released.193887/

ここを読んでいるからにはJavaはインストール済み、と仮定してしまいたいのですが、最近のMinecraft(Win版だけ?)はJavaなしで動作(自分でJavaをDLして実行)するので、「java: command not found」とか出る場合には本当にJavaがインストールされているか確認しましょう。

Windowsでのビルド準備

WindowsにはBashがないので、そこに対応する必要があります。(Bash on Ubuntu on Windowsを使えばないことはないんですけど……)

と言っても、「Git for Windows」をインストールして、後は各種コマンドを「Git Bash」で実行するだけです。

Windows用だと「BuildToolsGUI」なんてものもあります、私は使った事がないので詳しくは知りませんが、こちらでも出来るみたいです。

Linux、Macでのビルド準備

要はBash(CUI)からjavaとgitコマンドが利用できれば良い訳です。

Ubuntuでしたらapt-getで

sudo apt-get install git

CentOSならyumで

sudo yum install git

Macならbrewでインストール出来るでしょう。

brew install git

ビルドする

Windowsの方、コマンドは「Git Bash」で実行して下さいね。(コマンドプロンプトではありませんよ)

spigotはビルドした時にカレントディレクトリにファイルを作成するので、サブディレクトリを作成してそこで作業した方が良いでしょう。

mkdir spigot
cd spigot

ビルド

まずはBuildTools.jarをダウンロードします、もし、1.10の時にダウンロードしているのであればそれをそのまま利用したので構いません。

curl -L -O https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar

後は、BuildToolsにrev引数で1.11を指定してやれば1.11対応版がビルドされます。

java -jar BuildTools.jar --rev 1.11

少し時間が掛かります(初回は特に)、弾幕ごっこでも楽しんでいれば良いでしょう。

ビルドが完了するとカレントディレクトリに色々作成されています、いつも通りですね。

  • apache-maven-3.2.5/
  • BuildData/
  • Bukkit/
  • CraftBukkit/
  • Spigot/
  • work/
  • BuildTools.jar
  • BuildTools.log.txt
  • craftbukkit-1.11.jar
  • spigot-1.11.jar

いつも通り「craftbukkit-1.11.jar」と「spigot-1.11.jar」がありますが、よほど特別な理由でもない限りはSpigotを利用する方が軽くて良いでしょう。

spigot-1.11.jarがサーバのjarです、他の物は消してしまっても良いですが、アップデートの時の時間短縮のために置いておきましょう。

アップデート

ここで言うアップデートとはSpigotのマイナーアップデートの事です。

Spigotは、同じ1.11でも細かいバグ修正などを含むアップデートが何度も行われています、アップデートが来ていた場合はアップデートを行いましょう。

サーバから「/version」コマンドを実行するとバージョン確認が可能です、「You are n version(s) behind」と表示されればアップデートがあります。(nは数字、現在のバージョンと比べてどれくらいアップデートされたかを示す)

ビルドの時の様にBashを起動し、以下の様にもう一度ビルドすればOKです。

cd spigot
java -jar BuildTools.jar --rev 1.11

そうして出来上がった(上書きされた)spigot-1.11.jarを現在利用している物と入れ替える、いつも通りですね。

極稀にですが、利用しているバージョンに混入してるバグを踏んでクラッシュする事があるので要注意です(2回経験アリ)

(for Windows)アップデートを更に楽にする

アップデートのたびにGit Bashを起動して、java -jar...なんてめんどくさくてやってらんない。

そう思う方はプログラマの三大美徳の内の一つ、「怠慢」の気質があると言えるでしょう。

と言う訳で、Git Bashのショートカットをクリックしただけで自動的にアップデート出来る様にしてしまいましょう。

Yes,簡単です、Git BashのショートカットをBuildTools.jarがあるディレクトリに作成しましょう。
spigot-1-11-001

作成したショートカットのプロパティを開いて……
spigot-1-11-002

「リンク先」を以下の様にします。(git-bash.exeを別の場所にインストールした場合は下のパスを書き換えて下さい)

"C:\Program Files\Git\git-bash.exe" -c "java -jar BuildTools.jar --rev 1.11"

「作業フォルダ」は今のフォルダ(BuildTools.jarがあるフォルダ)を指定しましょう。

こうする事で、ショートカットをダブルクリックするだけでアップデートが開始されるようになります、楽です。

要はBashの引数に-cを与えて、実行するコマンドを指定しているだけです。

注意点

今回はいつもの注意点に加えて、ロードマップの所からもう一つ。

自分でビルドして使う

毎度書いている事ですが、今回も念のために書いておきましょう。

Spigot開発チームはBuildTools.jarを利用して自分でビルドする以外の入手方法を快く思っていません。

「○○からビルド済みのjarがDL出来る」とか言う方は必ず沸くと思われますが、そのやり方はSpigotチームに一番嫌われる入手方法です。

先程のアップデートの項目で説明した通り、同じバージョン(1.11)でも細かなバグ修正が何度も行われています、必ず自分でビルドしたサーバを利用しましょう

古いバージョン、囚人のジレンマ

Spigotチームは毎日非常に多くの時間を開発やバグ修正、サポートなどに割いています。

md_5氏(Spigotの開発者)はなるべく早く、出来るだけ多くのサーバに最新で素晴らしい物を取り入れて欲しいみたいです。

が、実際に統計を見てみると、最新版である1.10.2を利用しているのは実に30%以下(150日以上前にリリースされているにも関わらず)

すなわち、残りの70%の連中は1日はおろか、下手したら1年以上更新していないと言う事。

新しいバージョンのために開発を行っているSpigot(や、Mojang)の開発者はその事(大多数がバージョンアップをしていない事)に失望している。

新しく用意されたAPIを利用出来ない開発者にとっても、非常に残念な事

そして、それらのサーバの管理者がとっくに修正されたバグの事を質問してくる事に失望している。

とかなんとか、とにかく失望しているみたいです。

要は「新しいバージョン使って」と言う事です、最新版で解決しているバグを聞きに行くなんて以ての外です。

あと、SpigotもMojangも基本的に最新版以外はサポートしないつもり(だったはず)、現に、1.8などのクラッシュバグはサポート切れなので放置している。

全てのバージョンに対応したい気持ちも分かりますが、サーバがアップデートすればユーザも付いて来ます、出来るだけ新しい物を利用しましょう。

変更点

Google翻訳で読んでいるので正確性の保証はなし、今の所の変更点はAPIドラフトページに記載されています。(と言う事は、特筆するほど大きな変更はないって事かな?)

どちらかと言うと開発者向けの変更が多い

古い非推奨APIが削除

非推奨のAPI達が削除されたみたいです。

そもそも、更新が行われていない様な古いプラグインを使わなければ問題になる様な事は無いでしょう。

一部のMOBのクラスが変更された

ガーディアン、馬、スケルトン、ゾンビのクラスが変更されたみたいです。(要は同じIDで違うパターンを持つ物)

互換性を維持しようとしたが、~1.10と比べていくつかの違いが出来ているみたいです。

それらを扱うプラグインは更新する必要があるかも知れません。(特に馬は色々変更されたっぽい)

1.11に合わせて変わった所

新しいアイテムやエンティティ、サウンドに合わせてAPIが追加されました。

また、Minecraft側のエンティティIDの変更に合わせてEntityType名の再マッピングが行われています。

あまり大きな問題ではないみたい。

ItemStackがnullにならなくなった

NMS(net.minecraft.server)の開発者は注意するべき点があるみたい。(プロトコルハックとかする人の事かな?)

ItemStackがnullではなくなったみたいです。

「どのような状況においてもItemStackのメソッドにnullを渡さないでください」らしい(null安全、みたいなのを目指したのかな?)

そのため、常にItemStack.isEmptyがfalse(空ではない)事を確認してから操作してね、との事。

isEmptyがtrueのItemStackを弄っちゃダメだよ、とか書かれてある。

普通のBukkit開発には関係ないのかな……?

SQLiteドライバが新しくなった

Spigotに内包されているSQLiteのドライバが3.7系から3.14系に変更されました。

基本的にそのままですが、場合によってはデータベースファイルに非可逆的な(ダウングレード出来なくなる)変更があるかも知れないので注意してね。と書かれてあります。

大丈夫だけど念のため言っておこう、くらいの物ですね。

個人的な意見

1.11は1.10とか言うブロック数個追加アップデートとは違って、そこそこデカい規模でのアップデートになります。

プラグインの互換性や、「Forge/Optifine出るまで待って」と言う人も居るかも知れないので、アップデートは慎重に検討しましょう。

少なくともリリースからしばらくの間は頻繁にバグ修正アップデートが行われると予想。

 - サーバ運営 ,