はじめに & インストール
gophertunnel(ゴファートンネル)は、Go言語で開発された Minecraft: Bedrock Edition(統合版) 向けのプロトコル・通信ライブラリです。
Bedrock版サーバー・クライアント・プロキシの実装に必要なネットワーク層(RakNet/NetherNet)、ハンドシェイク、暗号化、パケットシリアライズ、Microsoft/Xbox Live認証などをすべてワンストップで提供します。
対象読者
- Go言語でBedrockの通信パケットを調べたい、MITM(中間者)プロキシを作りたい
- Bedrockサーバーへ接続するBotや監視ツールを作りたい
- Go言語で軽量なBedrock専用サーバーを作りたい
動作要件
- Go: 1.22 以上推奨
- 対応Minecraftバージョン: 接続先のサーバーやクライアントと互換性のあるバージョン(gophertunnelのリリースごとに最新パージョンに対応)
インストール
Go Modules が有効なプロジェクトで次のコマンドを実行します。
bash
go get github.com/sandertv/gophertunnel@latestパッケージ構成
gophertunnel は主に以下のパッケージ群で構成されています(すべて github.com/sandertv/gophertunnel/ 配下)。
| パッケージ | 概要 | 主な利用場面 |
|---|---|---|
minecraft | 中核パッケージ。接続(Conn)、ダイヤラー(Dialer)、リスナー(ListenConfig)を提供 | クライアント接続、サーバー待受、プロキシ構築 |
minecraft/protocol/packet | Bedrockプロトコルにおける全パケットの構造体定義 | パケットの送受信、パケットID判定、パケット生成 |
minecraft/protocol | プリミティブなデータ型、VarInt/VarLong、NBTエンコードなど低レベルIO | カスタムパケットやバイナリの読み書き |
minecraft/auth | Microsoft / Xbox Live 認証トークンの取得・キャッシュ管理 | 公式サーバーやオンラインサーバーへのログイン |
minecraft/resource | リソースパック・ビヘイビアーパックの読み込みとパース | サーバーからのパック配信、クライアントへの適用 |
query | UT3 Query プロトコルによるサーバー情報問い合わせ | 外部サーバーのステータス取得 |
最小限の接続コード
以下は、ローカルで稼働している Bedrock サーバーに接続し、サーバーの情報を取得する最小限のコードです。
go
package main
import (
"fmt"
"log"
"github.com/sandertv/gophertunnel/minecraft"
)
func main() {
// Dialer のゼロ値でローカル(認証なし)に接続
dialer := minecraft.Dialer{}
conn, err := dialer.Dial("raknet", "127.0.0.1:19132")
if err != nil {
log.Fatalf("サーバーへの接続に失敗しました: %v", err)
}
defer conn.Close()
// 接続成功後、サーバーから渡されたゲーム初期化情報を参照可能
data := conn.GameData()
fmt.Printf("接続成功!\n")
fmt.Printf("ワールド名: %s\n", data.WorldName)
fmt.Printf("スポーン地点: %v\n", data.PlayerPosition)
fmt.Printf("ゲームモード: %d\n", data.PlayerGameMode)
}オンライン認証が必要なサーバーへの接続
外部の公開サーバーや Realms に接続する場合、Microsoft アカウントによる Xbox Live 認証が必要です。認証設定については 認証 (Xbox Live / PlayFab) を参照してください。