1 Datapack Reload and Merge
AttODao edited this page 2026-08-13 18:37:39 +09:00

マージ・検証・再読込

読込対象

Mob Lifeはdata/mob_life/mob_life/morphs/<形態ID>.jsonのリソーススタックを、低優先度パックから高優先度パックの順に読みます。既知の形態IDと完全一致しないファイルは警告して無視します。

マージ規則

  • JSONオブジェクトはキー単位で再帰的にマージします。
  • 数値、文字列、真偽値は上位パックの値で置換します。
  • 配列は連結せず、上位パックの配列で丸ごと置換します。
  • foodspredatorstraitspreyなどの空配列は一覧を明示的に消します。
  • abilitiesは例外で、要素がちょうど1個でなければ組み込み能力へ戻ります。
  • 未指定値は対象形態の組み込み値へフォールバックします。
  • 未知のキーはゲーム動作に使われません。

例として、下位パックがmovement.rabbit_hop.enabled、上位パックがmovement.rabbit_hop.sprint_cooldownを指定した場合は両方が残ります。一方、双方がtraitsを書けば上位側の配列だけが残ります。

不正値の扱い

状態 結果
JSON構文エラー、ルートがobjectでない そのリソース全体を無視し、直前の有効なマージ結果を維持
数値が範囲外 定義済み範囲へクランプ
数値キーへ文字列など型違い そのフィールドを形態の組み込み値へ戻す
objectであるべきセクションが別型 そのセクション内を形態の組み込み値へ戻す
一覧内の不正要素 要素を無視できる一覧ではその要素だけ除外
未知の列挙値 対応する組み込み値へ戻す、または未知traitなら無視

型違いのフィールドはリソース全体の失敗にはなりません。上位パックの型違い値が下位パックの正常値を隠し、結果だけ組み込み値へ戻る点に注意してください。整数欄へ小数を指定した場合はJavaの整数変換で小数部を切り捨ててから範囲を適用します。

/reload時の反映

形態が確定済みのワールドで再読込に成功すると、サーバーは次を行います。

  1. 全形態の解決済み設定を置換する
  2. 現在のワールド形態に対応する設定を再取得する
  3. 本能状態、輪郭状態、近傍Entityキャッシュ、形態ごとの一時状態をクリアする
  4. 参加中プレイヤーへ形態属性と形態状態を再適用する
  5. 現在の形態JSONを各クライアントへ再同期する

データパック再読込自体が失敗した場合はこの再適用を行いません。ワールドに保存済みの形態IDやNBTは/reloadでは変更しません。

再読込されないもの

  • config/mob_life-server.json/reload対象外です。
  • config/mob_life-client.jsonはローカルのクライアント設定です。
  • Javaコードで固定された対応形態、キー操作、NBT制限はデータパックから追加・変更できません。

設定ごとの反映時点は同期と反映タイミングを参照してください。