Minecraftサーバーを動かす知識

Spigot 1.14 リリース

投稿:  更新:  By: HimaJyun

Spigot 1.14がリリースされました!!このリリースに関する情報を解説します。

Minecraft 1.14そのものに関する解説は行いませんので、それに関しては巷のWikiサイトなどを参考にしてください。

スポンサーリンク

アップグレード

あるバージョンから1.14へのアップグレードは開発者のmd_5氏曰く「技術的には可能」ですが、1.13.2からアップグレードすることが推奨されています。

(エンジニアが「技術的には可能」と言ったときは「オススメしない」「頑張ればできる(=頑張らないとできない)」「多分行けるはずだけど確認してない」くらいの意味合いです。要するに非推奨)

つまり、1.13.2未満のサーバーを利用している場合は、最初に1.13.2のSpigotで--forceUpgrade引数を付けた状態でサーバーを実行して1.13.2に完全アップグレードしてください。

1.13.2から1.14のアップグレードでも同様の操作を行う方がいいでしょう。

CraftBukkitに関するメモ

開発チームによると、多くのユーザーがspigot.jarではなくcraftbukkit.jarを実行している模様です。

2つのjarはさまざまな(主に開発関連の)理由で存在しますが、SpigotMC.orgでサポートしているのはspigot.jarです。

そのため、1.14以降からBuildToolsがCraftBukkitのjarファイルを出力ディレクトリにコピーしなくなりました。(当分の間はCraftBukkit/targetに含まれる可能性があります)

もしあなたがSpigotの使用を妨げるような何らかの非互換性(CraftBukkitだと出ないエラーがSpigotで出る……など)があると感じるなら、あなたはこれをバグとして扱い、それに関するバグ報告を行うべきです。

(もちろんですが、バグ報告を行う相手は「私=HimaJyun」ではないですよ?「Spigotの開発チームに」です。私にバグ報告されてもどうしようもないので。)

APIの変更

1.14でのAPI変更はわずかです。重要なポイントは次の通りです。

  1. エンティティの種類分けがバニラに近づいています。
    とくにこれはARROWのクラスがTippedArrowになり、SPLASH_POTIONのクラスがThrownPotionになったことを意味します。
    WEATHER、COMPLEX_PART、TIPPED_ARROWなどのダミーエンティティは削除されました。
    つまり、EntityTypeはKeyedを実装します。
  2. 新しいRegistryクラスは、多くのKeyed型への統一アクセスをサポートします。
  3. 村人とそれに関連するイベントはバニラの変化に合わせて小さな変更がありました。
  4. TravelAgentは内部の変更により保守が困難だったため削除されました。
    それは将来的に再び追加されるかもしれませんが、保守可能な方法で実行できる場合に限ります。
  5. イベントは厳密に同期、または非同期になりました。
    同期イベントはメインサーバースレッドからのみ発行され、非同期イベントは別のサーバースレッドからのみ発行されます。
    (以前は混在していた?ようです)

NMSに関する注意事項

NMSはAPIをサポートしていません。それは今までもなく、そしてこれからもありません。

NMSで可能なことのいくつかはAPIではできませんが、それ以外の多くはAPIで可能であるか、またはごくわずかな機能要求で可能になるでしょう。

何らかの理由でNMSを使用する前に、本当に使用する必要があるかどうかを慎重に検討する必要があります。

1.14のリリースでは、前回のリリースサイクル中にNMSを変更する際の自由が限られていたため互換性の維持が著しく困難になりました。NMSの更新は、保守可能かつ確実に新しいバージョンのSpigotを提供できるという重要な側面です。
(要するにNMSを変更するからSpigotが維持できる、という意味だと思われる)

NMSを使用している開発者はプラグインが予期しない状況を適切に処理しなければなりません。
(要するに例外を握りつぶさずきちんとtry-catchしろ、という意味だと思われる)

NMSについての唯一の保証は、CraftMagicNumbers.getMappingsVersion()です。マッピングが変更された場合は変更されます。(頻繁に変更される可能性があります)

ライブラリに関する注意

以下のライブラリはSpigotに含まれるライブラリであり、すべてのプラグインで利用できます。

メジャーバージョンごとに安定していることを意図しており、何らかの理由で更新された場合でもpublicなAPIは以前のバージョンと互換性のあるバージョンになります。

  • Google guava: バニラと同じバージョン (21.0)
  • Google gson: バニラと同じバージョン (2.8.0)
  • SnakeYAML: 1.23、もしくはそれと互換性のあるバージョン
  • Apache Commons Lang: 2.6、もしくはそれと互換性のあるバージョン
    非推奨ではありませんが、Guavaを使用するかApache Commons Lang3などの使用が推奨されています。

以下のライブラリは非推奨のライブラリです。以前まではAPIとして使用可能でしたが、現在は実行時にのみ使用可能です。将来のバージョンで削除される予定です。
(要するに、MavenなどにSpigotAPIを追加してもこれらのAPIが参照できなくなる)

  • json-simple 1.1.1
    すべてのユーザーがGoogle gsonに移行する必要があります。

以下のライブラリはランタイムライブラリです。それらは一般的にデータベースドライバーであり、実行時にすべてのプラグインに利用可能です。

  • mysql-connector-java: 5.1.47、互換性のある5.xシリーズのバージョンに更新される可能性があります。
  • sqlite-jdbc: 3.27.2.1、それ以降のバージョンに更新される可能性があります。

その他のライブラリはサポートされているライブラリではありません。どのバージョンやクラスが利用可能か、それがどこに配置されるかなどの保証はありません。

他のライブラリを使用する際はそれをmaven-shade-pluginなどでshadeする必要があります。

個人的な見解

個人的な見解ですが、1.14は1.13に比べても追加される要素が少しであるため、プラグインの互換性はとても高いでしょう。

すでにカビが生えて腐ってるようなプラグインを使っていたり、プラグイン内部でめちゃくちゃな事をやっていたりでもしない限り、新しいバージョンへ移行するのはそう難しくないと思います。

ただ、バニラ1.14自体にバグが多いので急いでアップデートするとバグを踏んでクラッシュします。(実際に何度かクラッシュしました)

プラグインの互換性自体は高いですが、1.14.1まで待った方がいいでしょう。

当然ですが、バックアップはお忘れなく。

参考

このページは原文とイコールではありません。部分的な切り取りや意訳が含まれるのでより正確な情報を知りたい人は原文を読みましょう。