メインコンテンツまでスキップ

リロードと設定検証

EasyMenu 7は、サーバーの稼働中にメニュー設定を安全に再読み込みできる /menu reload 機能を備えています。


アトミックリロードの仕組み​

/menu reload を実行すると、EasyMenuは実行中のメニューには一切触れず、メモリ上で 完全に独立した「リロード候補(Candidate)」 を作成して事前検証を行います。

/menu reload 実行
↓
1. YAML解析・設定読み込み (バックグラウンド非同期)
2. 単一メニュー内検証 (ID重複、スロット重複、無効な素材)
3. メニュー間検証 (open-menuの遷移先メニューが実在するか)
4. コマンド登録計画 (他プラグインとの重複チェック)
↓
すべての検証に合格した場合のみ、実行中の状態を原子的に差し替え (Commit)
ロールバック保証

検証中に1箇所でもエラー(ERROR)が見つかった場合、リロード候補は即座に破棄され、リロード前の設定、メニュー、コマンド、キャッシュが100%維持されます。設定ミスによって稼働中のメニューが壊れたり、サーバーがエラーで落ちることはありません。


診断メッセージ(Diagnostics)の形式​

リロード時、設定に問題がある場合はコンソールに次のような詳細な診断ログが出力されます。

[shop] menu-items[0].material (diamond) unknown or non-item material: DIMAOND [unknown-material]

ログには以下の情報が含まれます。

  • [shop]: 対象のメニューID
  • menu-items[0].material: YAML内のパス
  • (diamond): 対象の要素ID
  • unknown or non-item material: DIMAOND: エラー原因の説明
  • [unknown-material]: 安定した診断コード

重大度(Severity)​

  • ERROR: 構文不正、素材名の間違い、スロット重複、存在しないメニューへの遷移先など。リロードは拒否されロールバックされます。
  • WARNING: 未知のサウンド名など。警告が出力され、代替の安全な処理を用いてリロードは続行されます。
  • INFO: 読み込み完了や統計情報。config.yml の debug: true のときだけ出力されます。

WARNING は diagnostics.log-warnings-on-load: false で出力を止められます(動作は変わりません)。ERROR は常に出力されます。 診断コードの一覧と対処法は 診断コード一覧 にまとめています。


開いているメニューの保護(Stale Interaction Rejection)​

リロードが完了した瞬間、リロード前にプレイヤーが開いていた古いメニュー画面からのクリック操作は安全に拒否され、意図しない古いコマンドが実行されるのを防ぎます。 開いていたメニューは自動的に閉じられ、プレイヤーには reload.menu-updated のメッセージが送られます。

稼働中のファイル編集や新しいメニューの追加は /menu reload が成功した後に反映され、キャッシュが期限切れになったり追い出されたりしても、検証済みのメニュー定義が使われ続けます。 リロード成功時には、入力待ちと古いアクションの継続待ちもキャンセルされます。