Skip to content

アーキテクチャ概要

gophertunnel がどのように Bedrock Edition のネットワーク通信・パケット処理を抽象化しているかを理解すると、クライアント・サーバー・プロキシの実装が非常にスムーズになります。


全体レイヤー構造

Minecraft Bedrock Edition の通信スタックと、gophertunnel の各モジュールの対応関係は下図のようになっています。


minecraft.Conn の役割

minecraft.Connnet.Conn を実装した接続オブジェクトですが、バイトストリームではなくMinecraft パケット単位でのやり取りを前提として設計されています。

  1. パケットハンドシェイクの自動処理:
    • Dialer.DialListener.Accept を呼んだ時点で、ログインリクエスト、暗号化ハンドシェイク、リソースパックのダウンロード/合意、StartGame パケットの処理までが自動的に完了しています。
  2. パケットのシリアライズ & デシリアライズ:
    • ReadPacket() を呼ぶだけで、生のUDPパケットから復号・解凍され、対応する packet.Packet 型にパースされた構造体が返されます。
    • WritePacket(pk) を呼ぶと、バッファリングされ、適切なタイミングで圧縮・暗号化されて送信されます。
  3. ゲームコンテキストの保持:
    • conn.GameData() によって、スポーン位置やエンティティランタイムID(RuntimeID)、ワールド名などをいつでも参照できます。

パケット処理のライフサイクル

gophertunnelDialer は上記の複雑なシーケンスをすべて内部で自動実行し、成功した段階で呼び出し元に *minecraft.Conn を渡却します。 そのため、ユーザーはゲーム内ロジックやパケットの解析だけに集中できます。

Released under the MIT License.