不可視アーマースタンドとパースエラーを片づける

Day12 では、古い仕組みが残した見えないものを整理しました。中心になったのは、古い乗り物プラグインが作った不可視アーマースタンドです。

問題は通路の引っかかりではなく、Robo 側のプロトコル処理でした。不可視アーマースタンドが装備や特殊な NBT を持っていると、bot が受け取るエンティティ関連パケットの中身が想定外になり、パーサーが落ちることがあります。

エンティティは、ブロックとは別の実体

エンティティは、世界の中に存在する実体です。アイテム、額縁、乗り物、表示のためのものなど、ブロックとは別の単位で扱われます。

古い世界では、昔のイベントや仕組みが残したエンティティが見えにくい形で残ることがあります。人間には気づきにくくても、Robo の接続や表示には影響します。

ロボの技術メモ:残骸
もともとは意味があったけれど、今の世界では役目を終えたものです。残骸か文化財かを見分けずに消すと、過去の工夫まで壊してしまいます。

不可視アーマースタンドは、古いプラグインの部品として残る

アーマースタンドは、ただの飾りではありません。プラグインによっては、不可視のアーマースタンドに装備品を持たせ、複数組み合わせて乗り物や飾りを表現します。

そのプラグインが動かなくなっても、アーマースタンド自体はワールドに残ります。見えないので人間は気づきにくい一方、bot はそれをエンティティとして受け取ります。

ロボの技術メモ:選別
種類、場所、見え方、役割を見て、消してよいものと残すものを分けることです。安全な掃除は、選別から始まります。

パースエラーは、読めないパケットで止まること

Robo はサーバから送られてくるパケットを読み、世界の状態を理解します。ところが、古いプラグイン由来の装備データや NBT が、今の bot ライブラリの想定とずれることがあります。

このとき起きるのがパースエラーです。つまり「見えない壁にぶつかった」のではなく、「古い実体の情報を読む途中で、データの形が想定と違って止まった」という問題です。

テレポートは、向きと足場まで含めて考える

テレポートは、ある場所へ移動するだけでは完成しません。移動後にどちらを向くか、足元が自然か、閉じ込められないかも重要です。

到着した瞬間の違和感は小さく見えますが、初めて来る人には大きく効きます。移動先の片づけは、案内の品質にもつながります。

ロボの技術メモ:足場
移動した直後に立つ場所です。安全で、向きが分かり、次に進める足場になっているかを確認します。

表示と実体は、ずれることがある

見えているものと、内部で残っている実体は同じとは限りません。表示が消えていても実体が残る、あるいは見えているものに別の実体が重なることがあります。

だから、見た目だけで判断せず、動いて、ぶつかって、必要なら記録から確認します。

ロボの技術メモ:回帰テスト
直したつもりの変更で、別の機能が壊れていないか確かめるテストです。片づけたあとも、Robo が入れるか、スクリーンショットが撮れるか、入口の表示が壊れていないかを見ます。
← 技術記事の一覧へ  ・  ← Day12 に戻る