Spigot 1.17 リリース
Spigot 1.17がリリースされました!!このリリースに関する情報を解説します。
Minecraft 1.17そのものに関する解説は行いませんので、それに関しては巷のWikiサイトなどを参考にしてください。
スポンサーリンク
目次
Spigot 1.17
1.17はシステム面の変更を多数含む巨大なアップデートになる予定だったのですが、開発が間に合わないと判断され多くの機能が1.18へ見送りになりました。
その関係から1.17ではブロックやMOBや地形の追加がメインとなる、中規模程度のアップデートになっています。
APIの大幅な変更などはありませんが、Minecraft本体がJava 8から16へ更新された関係もあり、一部のプラグインは動かなくなる可能性があります。
Spigot 1.17の入手
--rev
に1.17
を指定するだけです。
java -jar BuildTools.jar --rev 1.17
後述しますがMinecraftがJava 16以上必須となった事で、SpigotにもJava 16が必要になっています。そしてSpigotのビルドにもJava 16が要求されます。
Spigotをビルドしている端末にJava 16が入っていない場合は先にJava 16をインストールする必要があります。
毎度のお知らせですが、Spigotは自分でビルドして利用しましょう。Spigotの開発コミュニティでは配布サイトなどから古いSpigotをダウンロードして利用する(そしてすでに修正されているバグを報告してくる)ユーザーが以前から問題になっています。(今回のお知らせでも、「配布するならせめて最新バージョンを配布してくれ」というmd_5氏の悲痛な叫びが掲載されています)
アップグレード
毎度の事ですが、Spigot開発者のmd_5氏は1.16.xから1.17へアップグレードする事を推奨しています。
つまり、サーバーが1.16未満の場合は最初に1.16.5のjarを用意して--forceUpgrade
し全データを1.16にアップグレード、そのあとで1.17にしましょう。という意味です。
すでに1.16.xなら1.17のjarに入れ替えて--forceUpgrade
するだけで十分です。
(各バージョンで「前のバージョンからのアップグレード」が推奨されているため、1.14->1.15->1.16->1.17のように順に--forceUpgrade
していく方が安全でしょう。)
用語解説: --forceUpgrade
起動時の引数に--forceUpgrade
を追加して起動すると全データをアップグレードする処理が実行されます。
java -jar server.jar --forceUpgrade
この処理はマップのサイズに比例して時間が掛かります。そこそこ時間が掛かる処理なので十分な準備をしたうえで時間に余裕のある時に行いましょう。
1.17からそれ以前のバージョンへのダウングレードはできません。バックアップはお忘れなく。
その他注意点
1.18で実装予定の機能やブロックの中には実験的なデータパックやコマンドなどで1.17から使用できる物もあり、Spigotもそれらに対応したAPIを提供しています。
しかし、これらの機能には実験的扱い/無効化されている理由があります。これらに関しては将来的に互換性のない変更が行われる可能性もあります。
もしそのようなデータを使用したワールドがある場合、将来的に1.18にアップグレードできない、いわば「壊れた」データになってしまう可能性があります。
実運用環境ではそのような要素は使わない/使わせないようにしましょう。強力な機能を持つコマンドをユーザーに解放している場合にはとくに注意です。
Javaバージョンが16に
Minecraft本体の最小Javaバージョンが16以上になりました。それに伴いSpigotの動作にもJava 16以上が必要になります。
これに関しては要注意ポイントです。サーバーにインストールされているJREが古いと「Unsupported Java detected (55.0). This version of Minecraft requires at least Java 16. Check your Java version with the command 'java -version'.
」というエラーが出て起動しなくなります。
Java 16は2021年3月17日にリリースされたバージョンです。かなり新しいバージョンのため、おそらくほぼすべてのサーバーでJavaのアップデート作業が必要になるでしょう。ディストリビューションによってはそもそもJava 16のパッケージが提供されていない可能性すらあります。
Ubuntu 20.04では次のようにすればOpenJDK 16をインストールできます。
sudo apt install openjdk-16-jre
8から16へ
8から16まで一気に駆け上がるため、今までJava 8縛りでSpigotプラグインを開発していた方は8から16の間で追加された機能に目を通しておくと良いでしょう。
- Java新機能メモ(Hishidama's Java up-to-date)
- Java9の新機能とサンプルコード - 本日のお裾分け
- Java 10新機能まとめ - Qiita
- Java10のJEP以外の変更まとめ - Qiita
- Java 11 で追加されたAPIの一覧とサンプルコード - Qiita
- Java 12新機能まとめ - Qiita
- Java 13新機能まとめ - Qiita
- Java 14新機能まとめ - Qiita
- Java 15新機能まとめ - Qiita
- Java 16新機能まとめ - Qiita
var
の追加やswitch
とinstanceof
の機能強化だけでも覚えておくと開発がはかどるでしょう。
リフレクションの使用
Java 9以降はsetAccessible(true)
を使用して特定の(主にJava内部の)パッケージが持つ非public
なメンバーにアクセスすると「WARNING: An illegal reflective access operation has occurred
」の警告が出るようになりました。これに関してはすでに気付いている人も居るかもしれません。
Java 16ではこの挙動がさらに厳しくなり、デフォルトでロードに失敗するように変更されました。(--illegal-access
オプションのデフォルトがpermit
からdeny
になりました)
この変更により一部のプラグインは動作しなくなる可能性があります。これは--illegal-access=permit
オプションを使用することで回避できます。
java --illegal-access=permit -jar ./server.jar -nogui
ただし、この回避策はその場しのぎでしかなく、--illegal-access
オプションは将来的に削除される予定です。
プラグイン開発者はこのようなエラーが出る強引なリフレクションは行わないようにしましょう。(大抵の場合は同じ事を実現するためのより安全なAPIが用意されています)
サーバー管理者は極力--illegal-access=permit
を使わないようにし、プラグイン開発者がこの問題に対処する意思を見せない場合はプラグインの入れ替えを検討しましょう。
将来的に使えなくなってから「代わりになるプラグインは?!」と混乱するよりも、今の内から心構えして準備しておく方が良いでしょう。
関連情報:
- JDK 16 Release Notes, Important Changes, and Information
- JEP 396: Strongly Encapsulate JDK Internals by Default
個人的な見解
個人的に何よりも嬉しいのはJava 16以上が必須になった事です。
以前までのバージョンはJava 8以上があれば十分だった。つまりプラグインを配布する場合はJava 8で動作するように作る必要があり、後のバージョンで便利なAPIが多数追加されているにもかかわらず、それを指を咥えて眺めなければならない状況でした。
今回の更新により16以上必須となったことで、以前から使いたいと思っていたさまざまなAPIが使用可能になりました。
旧バージョン向けのサポートも続けるプラグインでは依然としてJava 8で動作するように作り続ける必要が生じてしまうので、これを機にプラグインのサポートバージョンを1.17以上とするのもひとつの選択肢ではないでしょうか?
playersSleepingPercentage
個人的に「これいいな」と思った機能はplayersSleepingPercentage
です。
数字を設定します。主に0~100の範囲で設定します。(デフォルトは100)
ここで指定した割合のユーザーが寝れば夜をスキップできます。たとえば50に設定したのであれば、50%の人が寝れば朝が訪れます。
0に設定すれば1人でも寝た時点で朝が訪れます。101以上に設定すると夜のスキップができなくなります。
より"民主的"な睡眠が可能になるため、特別な理由がないのであれば50に設定して夜をスキップするかどうかを多数決で決めるようにすると良いと思います。
参考
公式情報も読んでみてください。
- JAVA 版 CAVES & CLIFFS (洞窟と崖) 第 1 弾 (minecraft.net)
- Spigot & BungeeCord 1.17 (spigotmc.org)