Skip to content

はじめに & インストール

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/packetBedrockプロトコルにおける全パケットの構造体定義パケットの送受信、パケットID判定、パケット生成
minecraft/protocolプリミティブなデータ型、VarInt/VarLong、NBTエンコードなど低レベルIOカスタムパケットやバイナリの読み書き
minecraft/authMicrosoft / Xbox Live 認証トークンの取得・キャッシュ管理公式サーバーやオンラインサーバーへのログイン
minecraft/resourceリソースパック・ビヘイビアーパックの読み込みとパースサーバーからのパック配信、クライアントへの適用
queryUT3 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) を参照してください。

Released under the MIT License.