Skip to content

文字幅表の更新が必要な表示文言をCIで検出する #2312

Open

Description

@ChenCMD

lib:text は未収録の文字を、1 UTF-16コード単位あたり送り幅9px・太字加算0.5px(表の符号値146)として計算します。これと異なる幅の文字を文言へ追加すると、表を更新しなくても計算が成功し、配置がずれる可能性があります。関連する実装は #2307 です。

文章を追加する開発者が更新漏れに気づけるよう、配布フォントの実値と収録表を照合するCIを用意します。146と一致する文字は表に追加する必要がありません。

検査対象

  • Assetの神器Loreとその追記、Condition・ConsumeItemなどLoreへ組み込む文言、EffectのName・Description、MobのName・BossbarName
  • TheSkyBlessingのLore生成用loot tableと、表示文言を組み立てる関数
  • TSB-ResourcePackのdefault・uniform・space定義と、その参照先

Assetでは data/asset/functions/、本体では TheSkyBlessing/data/asset_manager/loot_tables/artifact/generate_lore/ と TheSkyBlessing/data/asset_manager/functions/artifact/ が調査の入口です。registerだけに限定せず、後から名前やLoreを変更する箇所も対象にします。導入時に収集対象のフィールドとコマンドを列挙し、検査できている範囲を明示してください。

実装時に決めること

SNBT内のJSONとNBT形式のTextComponentを読み、text・文章を直接指定したtranslate・with・extraとフォント継承を扱います。翻訳キー、動的参照、macroで組み立てる部分、未対応フォント、解析できない入力は、対応済みとせず別に報告します。任意のコマンドのデータフローを完全に評価することは要求しません。

比較には縮小済みの表だけでなく、Minecraft 1.20.4と配布リソースパックから読み取った元の送り幅・太字加算・UTF-16長を使います。依存repoのcommitと取得素材のハッシュを固定し、同じ入力で再検証できるようにします。

まずは更新の必要性を通知し、再生成手順または修正差分を提示する方式を検討します。自動更新を採用する場合は、別repoへの更新先と承認方法も決める必要があります。

完了条件

  • 未収録の146文字は許可し、未収録または値が異なる非146文字を検出できる
  • ファイル・文言・文字・フォント・実際の幅と表の値を報告し、再生成箇所を特定できる
  • 動的入力や解析失敗を見落とさず、検査対象外として報告できる
  • Assetの文言変更、本体の表示文言変更、リソースパックのフォント変更のどこで検査を動かすかが決まっている
  • 既存文言と、146文字・非146文字・補助文字・位置調整スペース・translateを含む入力で検証されている

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions