同じ赤文字がJavaとBedrockで壊れる理由
あるプラグインでは完璧に表示されるカラーコードが、別のプラグインではアンパサンドがそのまま表示される。原因はプラグインではなくフォーマットにある。§、&、MiniMessage、JSONなど5つの方言があり、統合版でも扱いが異なる。
§ コードと MiniMessage タグは同じ色を表現していても、同じサーバーに拒否されることがあります。サーバーの色付きテキストは単一のフォーマットではなく、少なくとも5種類が存在し、どの形式を受け入れるかはプラグインごとに異なります。
5つの方言
| 方言 | 見た目 | 通用する場所 |
|---|---|---|
| レガシーセクション | §cHello | バニラチャット、古いプラグイン |
| アンパサンドレガシー | &cHello | コンフィグファイル、多くのプラグイン |
| BungeeCord hex | &x&f&f&0&0&0&0 | プロキシプラグイン、一部のチャット |
| MiniMessage | <red>Hello</red> | モダンなPaperプラグイン |
| JSONコンポーネント | {"text":"Hello","color":"red"} | バニラコマンド、/tellraw |
アンパサンド形式は、何かが変換してくれるまではカラーコードですらありません。MiniMessage を期待するプラグインに &c を貼り付けると、プレイヤーにはそのままの文字が表示されます。
レガシーコードは色が足りない
セクション記号のシステムには、固定された色文字と書式設定のトグルしかありません。任意の色を表現する方法は存在しません。hex は後から登場し、BungeeCord 形式では1文字ずつエンコードします——&x の後に & を前置した6桁の hex 数字が続くため、あんなに長く見えるのです。
MiniMessage は #ff0000 を直接受け取ります。JSON は同じ hex を文字列値として受け取ります。
JavaとBedrockは一致しない
Bedrock もセクション記号を使いますが、その色セットと書式リセットの扱いは Java とは異なります。Java サーバーで正しく表示される文字列が、Bedrock クライアントでは余計な文字として表示されることがあり、クロスプレイプロキシはテキストをそのまま通すのではなく、しばしば両者間で変換を行います。サーバーが Bedrock プレイヤーを受け入れるなら、両方で出力をテストしてください。
ネストの罠
レガシーコードはステートフルです。カラーコードは書式をリセットするため、§c§lBold は赤かつ太字ですが、§l§cBold は赤のみです——太字の後のカラーコードがそれを消してしまいます。色を先に、書式を後に。MiniMessage はツリー構造であり、<red><bold>text</bold></red> はきれいに閉じます。ネストされた MiniMessage 文字列をレガシーコードに変換すると構造が失われます。レガシーには閉じタグが存在しないからです。
エスケープ
MiniMessage は < を構文として扱います。<Steve> という名前のプレイヤーは、その名前をコンポーネントとしてパースするあらゆるプラグインを壊します。レガシーフォーマットも & で同じ問題を抱えており、そのため多くのプラグインは && やエスケープ用のコンフィグフラグを要求します。
テキストは一度書いて、プラグインが実際にパースする方言を選び、Server Text Studio から正確な文字列をコピーしましょう。