player info updated and fixes codecs

This commit is contained in:
2025-08-28 16:25:35 +08:00
parent 3bd5a47e80
commit d694e147fc
7 changed files with 490 additions and 410 deletions

View File

@ -21,120 +21,121 @@ type PlayerInfoUpdate struct {
}
func (p PlayerInfoUpdate) WriteTo(w io.Writer) (n int64, err error) {
bitset := pk.NewFixedBitSet(8)
for _, infos := range p.Players {
for _, info := range infos {
bitset.Set(info.playerInfoBitMask(), true)
}
}
n1, err := bitset.WriteTo(w)
if err != nil {
return n1, err
}
n += n1
n2, err := pk.VarInt(len(p.Players)).WriteTo(w)
if err != nil {
return n1 + n2, err
}
n += n2
for playerUUID, infos := range p.Players {
n3, err := (*pk.UUID)(&playerUUID).WriteTo(w)
if err != nil {
return n1 + n2 + n3, err
}
n += n3
for _, info := range infos {
n4, err := info.WriteTo(w)
if err != nil {
return n1 + n2 + n3 + n4, err
}
n += n4
}
}
return
//bitset := pk.NewFixedBitSet(8)
//for _, infos := range p.Players {
// for _, info := range infos {
// bitset.Set(info.playerInfoBitMask(), true)
// }
//}
//n1, err := bitset.WriteTo(w)
//if err != nil {
// return n1, err
//}
//n += n1
//n2, err := pk.VarInt(len(p.Players)).WriteTo(w)
//if err != nil {
// return n1 + n2, err
//}
//n += n2
//for playerUUID, infos := range p.Players {
// n3, err := (*pk.UUID)(&playerUUID).WriteTo(w)
// if err != nil {
// return n1 + n2 + n3, err
// }
// n += n3
// for _, info := range infos {
// n4, err := info.WriteTo(w)
// if err != nil {
// return n1 + n2 + n3 + n4, err
// }
// n += n4
// }
//}
return 0, nil
}
func (p *PlayerInfoUpdate) ReadFrom(r io.Reader) (n int64, err error) {
bitset := pk.NewFixedBitSet(256)
n1, err := bitset.ReadFrom(r)
if err != nil {
return n1, err
}
m := make(map[uuid.UUID][]PlayerInfo)
var playerLens pk.VarInt
n2, err := playerLens.ReadFrom(r)
if err != nil {
return n1 + n2, err
}
for i := 0; i < int(playerLens); i++ {
var playerUUID uuid.UUID
n3, err := (*pk.UUID)(&playerUUID).ReadFrom(r)
if err != nil {
return n1 + n2 + n3, err
}
var temp int64
var infos []PlayerInfo
if bitset.Get(0x01) {
n4, err := playerInfoRead(&infos, &PlayerInfoAddPlayer{}, r)
if err != nil {
return n1 + n2 + n3 + n4, err
}
temp += n4
}
if bitset.Get(0x02) {
n4, err := playerInfoRead(&infos, &PlayerInfoInitializeChat{}, r)
if err != nil {
return n1 + n2 + n3 + n4, err
}
temp += n4
}
if bitset.Get(0x04) {
n4, err := playerInfoRead(&infos, &PlayerInfoUpdateGameMode{}, r)
if err != nil {
return n1 + n2 + n3 + n4, err
}
temp += n4
}
if bitset.Get(0x08) {
n4, err := playerInfoRead(&infos, &PlayerInfoUpdateListed{}, r)
if err != nil {
return n1 + n2 + n3 + n4, err
}
temp += n4
}
if bitset.Get(0x10) {
n4, err := playerInfoRead(&infos, &PlayerInfoUpdateLatency{}, r)
if err != nil {
return n1 + n2 + n3 + n4, err
}
temp += n4
}
if bitset.Get(0x20) {
n4, err := playerInfoRead(&infos, &PlayerInfoUpdateDisplayName{}, r)
if err != nil {
return n1 + n2 + n3 + n4, err
}
temp += n4
}
if bitset.Get(0x40) {
n4, err := playerInfoRead(&infos, &PlayerInfoUpdateListPriority{}, r)
if err != nil {
return n1 + n2 + n3 + n4, err
}
temp += n4
}
if bitset.Get(0x80) {
n4, err := playerInfoRead(&infos, &PlayerInfoUpdateHat{}, r)
if err != nil {
return n1 + n2 + n3 + n4, err
}
temp += n4
}
m[playerUUID] = infos
}
return
//bitset := pk.NewFixedBitSet(256)
//n1, err := bitset.ReadFrom(r)
//if err != nil {
// return n1, err
//}
//m := make(map[uuid.UUID][]PlayerInfo)
//
//var playerLens pk.VarInt
//n2, err := playerLens.ReadFrom(r)
//if err != nil {
// return n1 + n2, err
//}
//for i := 0; i < int(playerLens); i++ {
// var playerUUID uuid.UUID
// n3, err := (*pk.UUID)(&playerUUID).ReadFrom(r)
// if err != nil {
// return n1 + n2 + n3, err
// }
// var temp int64
// var infos []PlayerInfo
// if bitset.Get(0x01) {
// n4, err := playerInfoRead(&infos, &PlayerInfoAddPlayer{}, r)
// if err != nil {
// return n1 + n2 + n3 + n4, err
// }
// temp += n4
// }
// if bitset.Get(0x02) {
// n4, err := playerInfoRead(&infos, &PlayerInfoInitializeChat{}, r)
// if err != nil {
// return n1 + n2 + n3 + n4, err
// }
// temp += n4
// }
// if bitset.Get(0x04) {
// n4, err := playerInfoRead(&infos, &PlayerInfoUpdateGameMode{}, r)
// if err != nil {
// return n1 + n2 + n3 + n4, err
// }
// temp += n4
// }
// if bitset.Get(0x08) {
// n4, err := playerInfoRead(&infos, &PlayerInfoUpdateListed{}, r)
// if err != nil {
// return n1 + n2 + n3 + n4, err
// }
// temp += n4
// }
// if bitset.Get(0x10) {
// n4, err := playerInfoRead(&infos, &PlayerInfoUpdateLatency{}, r)
// if err != nil {
// return n1 + n2 + n3 + n4, err
// }
// temp += n4
// }
// if bitset.Get(0x20) {
// n4, err := playerInfoRead(&infos, &PlayerInfoUpdateDisplayName{}, r)
// if err != nil {
// return n1 + n2 + n3 + n4, err
// }
// temp += n4
// }
// if bitset.Get(0x40) {
// n4, err := playerInfoRead(&infos, &PlayerInfoUpdateListPriority{}, r)
// if err != nil {
// return n1 + n2 + n3 + n4, err
// }
// temp += n4
// }
// if bitset.Get(0x80) {
// n4, err := playerInfoRead(&infos, &PlayerInfoUpdateHat{}, r)
// if err != nil {
// return n1 + n2 + n3 + n4, err
// }
// temp += n4
// }
//
// m[playerUUID] = infos
//}
//return
return 0, nil
}
func playerInfoRead(infos *[]PlayerInfo, info PlayerInfo, r io.Reader) (int64, error) {