Skip to content

🐛 TSB 経路の outdated_rig と variant gate を修正し headless 検証基盤を追加 - #2

Merged
EllaCoat merged 10 commits into
mainfrom
fix/tsb-outdated-rig-variant-gate
Aug 2, 2026
Merged

🐛 TSB 経路の outdated_rig と variant gate を修正し headless 検証基盤を追加#2
EllaCoat merged 10 commits into
mainfrom
fix/tsb-outdated-rig-variant-gate

Conversation

@EllaCoat

@EllaCoat EllaCoat commented Aug 2, 2026

Copy link
Copy Markdown
Owner

概要

v1.10.2 の取り込み作業中に見つかった TSB 経路のバグ 2 件を修正し、あわせて Blockbench と Minecraft サーバを起動せずに datapack の生成物を検査するテスト基盤を新設する。

主な変更点

バグ修正

dir remove/outdated_rig が古い locator / camera を削除できていなかった (1.20.4-tsb/global.mcb)

3 つの誤りが重なっていた。

内容
UUID 一覧の読み先 entity NBT を読んでいたが、entity の保存 NBT に該当の compound は存在しない。data_manager が読み込んだ storage 側から取るのが正しい
要素の型 list の要素を compound 扱いしていたが、実際は UUID 文字列そのもの
マクロ引数名 呼び先が期待する key と食い違っていた

1 番目の時点で対象が空になり、直後の execute store result でカウンタが 0 に落ちるため、ループが一度も回らない状態だった。rig を更新しても前の export の locator / camera が残り続ける。

default Variant のみの blueprint で root On-Apply Function が出力されない (1.20.4-tsb/main.mcb, datapackCompiler/index.ts)

variant の一覧には default が常に含まれるため、従来の「2 個以上」という条件は実質「カスタム variant がある」を意味していた。加えて variant metadata の生成が animation の有無で囲われており、animation を持たない blueprint では dispatch 用のフラグ自体が書かれていなかった。

needs_variant_functions (カスタム variant / On-Apply Function / variant keyframe のいずれかがある) を導入し、variant 関連の出力を animation の有無から独立させた。metadata は空でも毎回上書きし、出力しない構成では明示的に削除する (この経路は on_load で cleanup を呼ばない方針のため、上書きされない path が残り続ける)。

発火は apply 時のみで、summon 直後の自動実行はしない。

テスト基盤

compileMcbProject を Node から直接呼び、.mcb から生成された mcfunction の内容を検査する。plugin 本体の export 処理は Blockbench の runtime に依存して Node 上では動かないが、テンプレートのコンパイル部分は入力を自前で組めば回せる。

  • 生成物全体の snapshot は取らず、名前の付いたファイルへの意味的な assert のみ書く (匿名関数の連番が分岐数で動くため)
  • 上記 2 件の修正に対して、修正前の状態に戻すと落ちることを確認済み

動作確認

  • yarn test = 4 files passed / 1 skipped、43 passed
  • yarn prod = 0 warnings / 0 errors
  • 独立した LLM によるレビューを 1 巡実施

実機 (Blockbench / Minecraft サーバ) での検証は未実施。

注意

テストで deepslate の一部 subpath が解決できないため、vitest.config.ts に alias を追加している。production のビルドでは同等の解決を独自 plugin が行っており、参照先の実体は同一。

未対応

作業中に見つかった以下はタスク管理へ記録し、本 PR のスコープ外とした。

  • bone の ID を管理する objective の生成が animation の有無で囲われており、animation を持たない blueprint でカスタム variant を適用しても model / display config が更新されない可能性がある
  • 通常経路 (TSB 以外の 6 バージョン) における locator の初期 pose 永続化
  • display config の NBT 化で、呼び出し側が渡している 2 番目の引数を実装側が受け取っていない

テスト側では、variant 適用の呼び出し経路のうち wrapper 経由のみを検証しており、アニメーションのキーフレームから切り替わる経路は未整備。

@EllaCoat
EllaCoat merged commit a886b10 into main Aug 2, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant