これの続き。
一回トレーラを設置した後に処理範囲外まで離れて戻ってくると、連結した後に進んでもトレーラがだんだん離れて行ってしまう件。
あまりにも頻発してイライラするのでとうとう本腰入れることにしたのである。
半年くらいたってるけども。
まあそれで色々デバグ文入れて調べてみると、連結後移動したときクライアントとサーバで位置が違うことが直接の原因だと分かった。
さらに調べるとimmersive vehicleのクルマを管理しているサーバ、クライアントそれぞれのリストのうち、サーバのリストの更新ができてないことが根本の原因だと分かったのである。クライアントはリストの更新ができている。
minecraftにおいては、ある程度離れるとエンティティは処理から解放され、また近づくと処理が始まるのである。
そしてその処理開始時にエンティティとしてのIDが変更となる。
そのため、リストの更新をしないと存在しないエンティティのIDを持つクルマをずっと同リストに保持してしまうことになるわけ。
クライアントの場合、自分だけの話であるのである程度離れた時点でエンティティの開放がイベントとしてキャッチできる。
なのでそのとき同リストからクルマを開放して、再度近づいたときに再登録というのができるのだ。
しかし、サーバでは一プレイヤーが離れたとしても別のプレイヤーが近くにいるなどでその開放がイベントとして存在しないのである。
それでも開放、再登録自体はどこかのタイミングでされて、いつの間にかエンティティとしてのIDが変わっている。
なので昔のIDを使って連結しようとしてもサーバにおいては同IDを持つ車が存在しなくて連結できず、そのため移動してもサーバだけ位置が変わらなくなるという流れである。
ということでサーバでもリストの更新ができればすべて解決する。
エンティティの処理開始時点で同一のクルマがリストに存在する場合にはすべて削除してから登録するように改造した。
そうするとトレーラがだんだん離れていくことはなくなった。
爽快な気分だね。