ドキュメント › リファレンス
プラグインの互換性
Storia で動くプラグインと、プラグイン開発者が知っておくべきこと。
Storia は Folia の並列処理を使っているので、Folia に対応したプラグインだけが動きます。プラグインは plugin.yml の次の 1 行で対応を示します。
folia-supported: true
これがないプラグインは、Folia と同じく起動時に読み込まれません。シングルスレッドの Paper 向けに書かれたプラグインは、並列処理のサーバーでは データを壊したりクラッシュしたりするので、これはサーバーを守るための仕組みです。
対応プラグインの探し方#
- Hangar、Modrinth、SpigotMC で、説明や対応プラットフォームに「Folia」とあるものを探します。
- LuckPerms、spark、Chunky、CoreProtect(最近のバージョン)など、多くの有名プラグインが Folia に対応しています。
- Storia は自分を Folia 互換として報告します。
ServerBuildInfo#isBrandCompatible(Key.key("papermc", "folia"))はtrueを返すので、 Folia かどうかを確認するプラグインも、Folia 上と同じように動きます。
Chunky
Chunky も Storia で動きますが、たいていは /storia pregen のほうが速く終わります。実行中はチャンク生成スレッドをコア 1 つを残して
すべてに増やすからです。チャンクの事前生成 を参照してください。
プラグイン開発者の方へ#
Folia API(または Paper API のうち Folia が対応している部分)に対してビルドしてください。Folia で必要なことは Storia でもすべて必要です。
BukkitSchedulerではなく、リージョン対応のスケジューラーを使います:Bukkit.getRegionScheduler()、Bukkit.getGlobalRegionScheduler()、entity.getScheduler()、Bukkit.getAsyncScheduler()。- チャンク・ブロック・エンティティは、それを担当しているスレッドからだけ触ります。確認には
Bukkit.isOwnedByCurrentRegion(...)を使います。 - テレポートは
teleportAsyncを使います。
詳しくは Folia のドキュメント を参照してください。
Storia かどうかを判定する#
ServerBuildInfo info = ServerBuildInfo.buildInfo();
boolean storia = info.brandId().equals(Key.key("storia", "storia"));
boolean foliaLike = info.isBrandCompatible(Key.key("papermc", "folia")); // Folia でも Storia でも true
プレイヤーの描画距離#
プレイヤーごとの予算 は、Player#setViewDistance と同じプレイヤーごとの仕組みで描画距離(有効にした場合はシミュレーション距離も)を変えます。
プラグインでもプレイヤーごとに距離を設定していると、お互いに上書きし合います。予算機能をオフにするか、距離の管理を Storia に任せてください。