変更点

パッチノート

Storia の各リリースで追加された機能・改善・修正を、新しい順にまとめています。

Storia 26.2-7-beta Beta

Storia Cluster を軽くしました。Relay の CPU 使用量が約 23% 減り、Relay を再起動してもプレイヤーの位置を覚えています。

改善#

  • チャンクを二重に圧縮しないようにしました。 チャンク・プレイヤーデータ・データファイルは元から圧縮されているのに、 暗号化した通信でもう一度圧縮していました。サイズは縮まず(100.1%)、送る側と受ける側の CPU を使うだけでした。 これからはそのまま送ります。ワーカー 1 台で 2,601 チャンクを事前生成して測ると、Storia Relay の CPU 時間が 約 23% 減りました(18.6 秒 → 14.4 秒、それぞれ 2 回の平均)。ほかのメッセージは今までどおり圧縮します。 通信の形は変わっていません。
  • Relay がプレイヤーの最後の位置を覚えるようにしました。 Relay を再起動したあとも、戻ってきたプレイヤーは 自分のいた場所を動かしているワーカーに入ります(Cluster のワールドの storia-cluster-positions.txt)。
  • 回路のつながりの報告と移動の確認で、毎回スレッドを作るのをやめ、共通の処理役にまとめました。
  • 公式サイト:GitHub への問い合わせを、ビルドごとに 8 回から 1 回に減らしました。

その他#

  • テスト:ボットでの 2 台のワーカー間の移動・合流・偏りの調整・/stop、直るまで書き込みを断る Relay(1 件も失われない)、 共有データ(同時に 400 回足して 400)、Relay の再起動後の位置の読み込み。

GitHub でダウンロード

Storia 26.2-6-beta Beta

コード全体を見直して見つかった問題の修正。Relay が書き込めないときにデータを失わないようにしました。

修正#

  • Relay が書き込めないときに、データを失わないようにしました。 Relay が止まっている間にワーカーに貯めた書き込みは、 Relay が戻ってから送ります。このとき Relay がエラー(ディスクがいっぱいなど)を返すと、これまではその書き込みを 捨てていました。これからは捨てずに残し、数秒ごとに送り直します。10 分たっても断られる書き込みは、 消さずに cluster-spool/failed/ に移します。
  • スコアボードの変更が Relay を待つようにしました。 Relay が止まっている間の変更は捨てられ、ワーカーごとに スコアがずれることがありました。これからは順番を保って待ち、Relay が戻るとほかのワーカーに届きます。
  • 時刻・天気の報告がたまらないようにしました。 Relay の応答が遅いとき、毎秒新しいスレッドを作っていたのを、 1 つずつ送るようにしました。
  • 回路のつながりを見つけたとき、引き渡しの待ち時間を守るようにしました。 別のワーカーが手放した直後のセルを すぐに渡さないので、そのワーカーの最後の保存が断られることがなくなりました。
  • Relay:名乗らないまま黙っている接続は、10 秒で切るようにしました。
  • Relay:止めるとき(コンソール、Ctrl+C、systemd)に、ワールドのファイルを確実にディスクへ書き込んでから終わるようにしました。

改善#

  • プラグイン API(共有データ) で、名前空間やチャンネルの名前が正しくないときのエラーメッセージを分かりやすくしました。
  • 公式サイト:ドキュメント検索で、amp などの言葉のハイライトが崩れる問題を直しました。「昨日」「今日」の表示を、日付で数えるようにしました。

その他#

  • テスト:Relay の停止中に貯まった 638 件の書き込み、直るまで書き込みを断る Relay(1 件も失われない)、ボットでの 2 台のワーカー間の移動・合流・偏りの調整・/stop、スコアボード、時刻と天気、ゲームルール、共有データ (同時に 400 回足して 400)、ワーカー名の重複、単体のサーバー。

GitHub でダウンロード

Storia 26.2-5 Latest

匿名の統計を、Storia 専用の bStats ページに送るようにしました。

改善#

  • 匿名の統計(bStats)を、Folia・Velocity ではなく Storia 専用のページに送るようにしました。 集まった統計は誰でも見られます:Storia・Storia Proxy。
  • 送るもの:サーバーの台数・人数、Storia・Minecraft・Java のバージョン、OS、CPU のコア数、単体か Cluster か、RAM ワールドを使っているか。
  • プレイヤー名・IP アドレス・チャット・ワールドの中身は送りません。Storia Relay は何も送りません。
  • 止め方は今までどおりです。安全性と互換性

その他#

  • 公式サイトに 安全性と互換性 のページと、このパッチノートのページを追加しました。

GitHub でダウンロード

Storia 26.2-4

プラグインのデータを全ワーカーで共有できる、プラグイン API を追加。

新機能#

  • プラグイン API(共有データ):Cluster の全ワーカーで、プラグインのデータとメッセージを共有できます。プラグイン API(共有データ)
  • プラグインごとのキーと値の保存場所(get・set・delete・keys)。
  • 1 台だけが勝つ compareAndSet(ロックなど)と、同時に呼んでも数がずれない increment(残高、カウンター)。
  • 変更の通知と、全ワーカーに届くメッセージ(publish・subscribe)。
  • どれも非同期で、ゲームの処理を止めません。
  • 単体のサーバーでも同じ API が動くので、プラグインは 1 通りのコードで済みます。
  • プラグイン開発用に storia-api-26.2-4.jar を配布します。
  • テスト:2 台のワーカーから同時に 200 回ずつ足すと、ぴったり 400。

修正#

  • 同じ cluster.node-name のワーカーを 2 台起動すると、お互いを追い出し合っていた問題を直しました。 2 台目は、名前を変えるようにというメッセージで断られます。

GitHub でダウンロード

Storia 26.2-2

Storia Cluster を含む最初の安定版。コード全体を見直し、データを守る修正を加えました。

26.2 からの変更をすべて含みます(26.2-1-beta、26.2-2-beta、26.2-3-beta)。

新機能#

  • Storia Cluster:複数のサーバーで 1 つのワールドを動かし、読み込み画面なしで移動します。複数サーバーで 1 つのワールド
  • Tick Guard:混んだ場所で、プレイヤーではなくモブの判断を間引きます。Tick Guard

改善#

  • プレイヤーごとの予算は、高速で移動している人だけを制限します。
  • Cluster をベータから正式版にしました。

修正#

  • Relay から読めなかったプレイヤーデータ・進捗・統計・共有データを、空のデータで上書きしないようにしました。 そのプレイヤーのログインを断ります。
  • Relay からの通知を 1 つのスレッドで順番に処理するようにしました。スコアボードや時刻の変更の順番が入れ替わらなくなりました。
  • Relay:空きを作るために閉じたリージョンファイルを読み書きしようとすると失敗していた問題を直しました。
  • 新しいワーカーに送るワールドの設定から、Relay 自身のファイルと書き込み中のファイルを除きました。
  • ハンドシェイクが 10 秒で打ち切られるようにしました。応答しない接続が Relay のスレッドを占有しなくなりました。
  • /storia cluster が、ゲームの処理とは別のスレッドで Relay に問い合わせるようにしました。
  • Proxy:おかしな移動の指示を受けても、Relay との接続を切らないようにしました。

削除#

  • 地形だけを別のマシンで計算する機能(26.2-3-beta で Cluster に置き換え)。

GitHub でダウンロード

Storia 26.2-3-beta Beta

Storia Worker が Storia Cluster のサーバーになりました。地形だけを計算する機能は削除。

新機能#

  • Storia Worker が Cluster のサーバーになりました。ワーカーを足すだけで、処理できるプレイヤーを増やせます。Storia Worker
  • 新しいワーカーにワールドのコピーは不要:初回起動時に、ワールドの設定(level.dat、生成設定、データパック)を Relay から取り寄せます。

改善#

  • Storia Relay は Cluster のまとめ役に専念します。
  • 暗号化した通信の最初に、お互いを確かめる手順(ハンドシェイク)を加えました。

削除#

  • 地形だけを別のマシンで計算する機能(storia.yml の offload.*、-Dstoria.worker=true、/storia offload)を削除しました。 古い offload: の設定は無視されます。古い設定のサーバーが Relay につなぐと、その旨のメッセージで断られます。 コードは GitHub の archive/terrain-offload ブランチに残しています。

GitHub でダウンロード

Storia 26.2-2-beta Beta

Storia Cluster のベータ版。複数のサーバーで 1 つのワールドを動かし、読み込み画面なしで移動。

新機能#

  • Storia Cluster(ベータ):複数の Storia サーバーで 1 つのワールドを分担して動かします。複数サーバーで 1 つのワールド
  • Storia Relay がワールドを保存し、どのサーバーがどこを動かすかを決めます。
  • 近くにいるプレイヤーは、お互いのチャンクが見える前に同じサーバーにまとめます。
  • プレイヤーは Storia Proxy を通して、読み込み画面なしでサーバー間を移動します。持ち物・進捗・統計も引き継ぎます。
  • 境目にまたがる回路を見つけて、常に同じサーバーで動かします。
  • 時刻・天気・ゲームルール・スコアボード・地図を共有します。
  • Relay が一時的に止まっても、書き込みをディスクに貯めて後で送ります。
  • /stop すると、先にプレイヤーをほかのサーバーへ移してから止まります。
  • Storia Proxy:Relay の指示で、プレイヤーを別のサーバーへ切り替えます(同じエンティティ ID のまま)。

修正#

  • Proxy が切り替えている途中のプレイヤーを、二重に移動させないようにしました。

削除#

  • 境目で押し戻す仕組みと、「Another Storia server runs the area ahead」というメッセージを削除しました。 エリアを早めにまとめるので、必要なくなりました。

その他#

  • 本物の Minecraft 26.2 クライアントで、サーバー間の移動を確認しました。
  • 26.2 と 26.2-1-beta には、Storia Cluster は入っていません。

GitHub でダウンロード

Storia 26.2-1-beta Beta

Tick Guard を追加。混んだ初期地点でも、近くにいるだけのプレイヤーが重くならないように。

新機能#

  • Tick Guard:1 つの場所が重すぎるとき、プレイヤーを制限する代わりに、密集したモブが行動を考え直す回数を減らします。 移動・重力・当たり判定は毎 tick 動き、レッドストーンなどのブロックには触れません。Tick Guard
  • テスト:モブ 1,400 体の初期地点で、1 tick 50〜55 ms → 32〜35 ms(TPS 20)。

改善#

  • プレイヤーごとの予算は、エリトラなどで高速で移動している人だけを制限するようになりました。 立っている・建築している・歩いているだけの人は制限されません。
  • /storia region で、重い原因の密集チャンク(場所とモブの種類)が表示されるようになりました。

GitHub でダウンロード

Storia 26.2

Minecraft 26.2 向けの最初のリリース。RAM ワールド、チャンクの事前生成、プレイヤーごとの予算、Storia Proxy。

新機能#

  • RAM ワールド:起動時にワールドを RAM にコピーして動かし、ディスクにはバックグラウンドで書き込みます。 プロセスが落ちても、次の起動時に RAM 上のコピーから復旧します。RAM ワールド
  • チャンクの事前生成:/storia pregen で、遊ぶ前にまとめてチャンクを作れます。チャンクの事前生成
  • 地形生成の高速化:ノイズの計算とブロックの数え方を速くしました。結果はバニラと 1 ビットも変わりません。
  • プレイヤーごとの予算:重いときに、tick の処理時間とメモリを公平に分けます。プレイヤーごとの予算
  • エンティティの押し合いの高速化:モブが密集した場所の処理を軽くしました。結果は同じです。
  • 地形の計算を別のマシンに任せる機能(Storia Worker・Storia Relay):新しいチャンクの地形ノイズを、別のマシンで計算できます。 通信は暗号化されます。※ 26.2-3-beta で Storia Cluster に置き換わりました。
  • Storia Proxy:Velocity のフォーク。50 個のプレースホルダー、MOTD、タブリスト、メッセージの設定。プロキシの導入
  • /storia コマンド:状態の確認、同期などをまとめました。コマンドと権限

その他#

  • 名前を Stolia から Storia に変えました。
  • バージョン番号を Minecraft に合わせました(26.2、次は 26.2-2、26.2-3 …)。

GitHub でダウンロード