Skip to content

protocol & packet

Bedrock プロトコルのパケット定義および低レベルシリアライズ層のリファレンスです。


packet.Packet インターフェース

すべてのパケット型が実装しているインターフェースです。

go
type Packet interface {
    ID() uint32
    Marshal(io protocol.IO)
}

protocol.IO

読み込み時(protocol.Reader)と書き込み時(protocol.Writer)の双方を抽象化するインターフェースです。

go
type IO interface {
    Varuint32(x *uint32)
    Varint32(x *int32)
    Varuint64(x *uint64)
    Varint64(x *int64)
    Float32(x *float32)
    String(x *string)
    Bool(x *bool)
    Bytes(x *[]byte)
    Vec3(x *mgl32.Vec3)
    BlockPos(x *BlockPos)
    // ...
}

自作パケットの定義例

独自パケットを作成する場合、次のように ID()Marshal(io protocol.IO) を実装します。

go
package main

import (
    "github.com/sandertv/gophertunnel/minecraft/protocol"
)

type CustomPacket struct {
    Message string
    Value   uint32
}

func (pk *CustomPacket) ID() uint32 {
    return 0xFF // 任意の独自ID
}

func (pk *CustomPacket) Marshal(io protocol.IO) {
    io.String(&pk.Message)
    io.Varuint32(&pk.Value)
}

protocol.IO を使うことで、エンコード関数とデコード関数を別々に書く必要がなく、フィールドの並び順の不一致バグを防ぐことができます。

Released under the MIT License.