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 を使うことで、エンコード関数とデコード関数を別々に書く必要がなく、フィールドの並び順の不一致バグを防ぐことができます。