player info updated and fixes codecs
This commit is contained in:
@ -4,6 +4,7 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
"net"
|
"net"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
@ -184,7 +185,7 @@ func (b *botClient) handlePackets(ctx context.Context) error {
|
|||||||
pkt := creator()
|
pkt := creator()
|
||||||
_, err := pkt.ReadFrom(bytes.NewReader(p.Data))
|
_, err := pkt.ReadFrom(bytes.NewReader(p.Data))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// fmt.Printf("Decoding: 0x%x %s %s\n", p.ID, pktID.String(), err.Error())
|
fmt.Printf("Decoding: 0x%x %s %s\n", p.ID, pktID.String(), err.Error())
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
b.packetHandler.HandlePacket(ctx, pkt)
|
b.packetHandler.HandlePacket(ctx, pkt)
|
||||||
|
@ -3633,6 +3633,10 @@ func (a *Int32VarIntArray) ReadFrom(r io.Reader) (n int64, err error) {
|
|||||||
return n, errors.New("array length less than zero")
|
return n, errors.New("array length less than zero")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if size > 32767 {
|
||||||
|
return n, errors.New("array length greater than 32767")
|
||||||
|
}
|
||||||
|
|
||||||
if cap(*a) >= int(size) {
|
if cap(*a) >= int(size) {
|
||||||
*a = (*a)[:int(size)]
|
*a = (*a)[:int(size)]
|
||||||
} else {
|
} else {
|
||||||
@ -3681,6 +3685,10 @@ func (a *Int32PrefixedArrayVarIntArray) ReadFrom(r io.Reader) (n int64, err erro
|
|||||||
return n, errors.New("array length less than zero")
|
return n, errors.New("array length less than zero")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if size > 32767 {
|
||||||
|
return n, errors.New("array length greater than 32767")
|
||||||
|
}
|
||||||
|
|
||||||
if cap(*a) >= int(size) {
|
if cap(*a) >= int(size) {
|
||||||
*a = (*a)[:int(size)]
|
*a = (*a)[:int(size)]
|
||||||
} else {
|
} else {
|
||||||
@ -3698,6 +3706,58 @@ func (a *Int32PrefixedArrayVarIntArray) ReadFrom(r io.Reader) (n int64, err erro
|
|||||||
return n, err
|
return n, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Int32VarIntVarIntArray a utility type for encoding/decoding packet.VarInt -> int32[packet.VarInt] slice.
|
||||||
|
type Int32VarIntVarIntArray []int32
|
||||||
|
|
||||||
|
func (a Int32VarIntVarIntArray) WriteTo(w io.Writer) (n int64, err error) {
|
||||||
|
size := len(a)
|
||||||
|
nn, err := packet.VarInt(size).WriteTo(w)
|
||||||
|
if err != nil {
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
n += nn
|
||||||
|
for i := 0; i < size; i++ {
|
||||||
|
nn, err := packet.VarInt(a[i]).WriteTo(w)
|
||||||
|
n += nn
|
||||||
|
if err != nil {
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return n, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *Int32VarIntVarIntArray) ReadFrom(r io.Reader) (n int64, err error) {
|
||||||
|
var size packet.VarInt
|
||||||
|
nn, err := size.ReadFrom(r)
|
||||||
|
n += nn
|
||||||
|
if err != nil {
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
if size < 0 {
|
||||||
|
return n, errors.New("array length less than zero")
|
||||||
|
}
|
||||||
|
|
||||||
|
if size > 32767 {
|
||||||
|
return n, errors.New("array length greater than 32767")
|
||||||
|
}
|
||||||
|
|
||||||
|
if cap(*a) >= int(size) {
|
||||||
|
*a = (*a)[:int(size)]
|
||||||
|
} else {
|
||||||
|
*a = make(Int32VarIntVarIntArray, int(size))
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := 0; i < int(size); i++ {
|
||||||
|
nn, err = (*packet.VarInt)(&(*a)[i]).ReadFrom(r)
|
||||||
|
n += nn
|
||||||
|
if err != nil {
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
|
||||||
// Float32VarIntArray a utility type for encoding/decoding packet.Float -> float32[packet.VarInt] slice.
|
// Float32VarIntArray a utility type for encoding/decoding packet.Float -> float32[packet.VarInt] slice.
|
||||||
type Float32VarIntArray []float32
|
type Float32VarIntArray []float32
|
||||||
|
|
||||||
@ -3729,6 +3789,10 @@ func (a *Float32VarIntArray) ReadFrom(r io.Reader) (n int64, err error) {
|
|||||||
return n, errors.New("array length less than zero")
|
return n, errors.New("array length less than zero")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if size > 32767 {
|
||||||
|
return n, errors.New("array length greater than 32767")
|
||||||
|
}
|
||||||
|
|
||||||
if cap(*a) >= int(size) {
|
if cap(*a) >= int(size) {
|
||||||
*a = (*a)[:int(size)]
|
*a = (*a)[:int(size)]
|
||||||
} else {
|
} else {
|
||||||
@ -3777,6 +3841,10 @@ func (a *BoolVarIntArray) ReadFrom(r io.Reader) (n int64, err error) {
|
|||||||
return n, errors.New("array length less than zero")
|
return n, errors.New("array length less than zero")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if size > 32767 {
|
||||||
|
return n, errors.New("array length greater than 32767")
|
||||||
|
}
|
||||||
|
|
||||||
if cap(*a) >= int(size) {
|
if cap(*a) >= int(size) {
|
||||||
*a = (*a)[:int(size)]
|
*a = (*a)[:int(size)]
|
||||||
} else {
|
} else {
|
||||||
@ -3825,6 +3893,10 @@ func (a *StringVarIntArray) ReadFrom(r io.Reader) (n int64, err error) {
|
|||||||
return n, errors.New("array length less than zero")
|
return n, errors.New("array length less than zero")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if size > 32767 {
|
||||||
|
return n, errors.New("array length greater than 32767")
|
||||||
|
}
|
||||||
|
|
||||||
if cap(*a) >= int(size) {
|
if cap(*a) >= int(size) {
|
||||||
*a = (*a)[:int(size)]
|
*a = (*a)[:int(size)]
|
||||||
} else {
|
} else {
|
||||||
@ -3841,51 +3913,3 @@ func (a *StringVarIntArray) ReadFrom(r io.Reader) (n int64, err error) {
|
|||||||
|
|
||||||
return n, err
|
return n, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Int32VarIntVarIntArray a utility type for encoding/decoding packet.VarInt -> int32[packet.VarInt] slice.
|
|
||||||
type Int32VarIntVarIntArray []int32
|
|
||||||
|
|
||||||
func (a Int32VarIntVarIntArray) WriteTo(w io.Writer) (n int64, err error) {
|
|
||||||
size := len(a)
|
|
||||||
nn, err := packet.VarInt(size).WriteTo(w)
|
|
||||||
if err != nil {
|
|
||||||
return n, err
|
|
||||||
}
|
|
||||||
n += nn
|
|
||||||
for i := 0; i < size; i++ {
|
|
||||||
nn, err := packet.VarInt(a[i]).WriteTo(w)
|
|
||||||
n += nn
|
|
||||||
if err != nil {
|
|
||||||
return n, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return n, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (a *Int32VarIntVarIntArray) ReadFrom(r io.Reader) (n int64, err error) {
|
|
||||||
var size packet.VarInt
|
|
||||||
nn, err := size.ReadFrom(r)
|
|
||||||
n += nn
|
|
||||||
if err != nil {
|
|
||||||
return n, err
|
|
||||||
}
|
|
||||||
if size < 0 {
|
|
||||||
return n, errors.New("array length less than zero")
|
|
||||||
}
|
|
||||||
|
|
||||||
if cap(*a) >= int(size) {
|
|
||||||
*a = (*a)[:int(size)]
|
|
||||||
} else {
|
|
||||||
*a = make(Int32VarIntVarIntArray, int(size))
|
|
||||||
}
|
|
||||||
|
|
||||||
for i := 0; i < int(size); i++ {
|
|
||||||
nn, err = (*packet.VarInt)(&(*a)[i]).ReadFrom(r)
|
|
||||||
n += nn
|
|
||||||
if err != nil {
|
|
||||||
return n, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return n, err
|
|
||||||
}
|
|
||||||
|
@ -343,54 +343,6 @@ func (c ConfigUpdateEnabledFeatures) WriteTo(w io.Writer) (n int64, err error) {
|
|||||||
return n, err
|
return n, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// StringIdentifierVarIntArray a utility type for encoding/decoding packet.Identifier -> string[packet.VarInt] slice.
|
|
||||||
type StringIdentifierVarIntArray []string
|
|
||||||
|
|
||||||
func (a StringIdentifierVarIntArray) WriteTo(w io.Writer) (n int64, err error) {
|
|
||||||
size := len(a)
|
|
||||||
nn, err := packet.VarInt(size).WriteTo(w)
|
|
||||||
if err != nil {
|
|
||||||
return n, err
|
|
||||||
}
|
|
||||||
n += nn
|
|
||||||
for i := 0; i < size; i++ {
|
|
||||||
nn, err := packet.Identifier(a[i]).WriteTo(w)
|
|
||||||
n += nn
|
|
||||||
if err != nil {
|
|
||||||
return n, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return n, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (a *StringIdentifierVarIntArray) ReadFrom(r io.Reader) (n int64, err error) {
|
|
||||||
var size packet.VarInt
|
|
||||||
nn, err := size.ReadFrom(r)
|
|
||||||
n += nn
|
|
||||||
if err != nil {
|
|
||||||
return n, err
|
|
||||||
}
|
|
||||||
if size < 0 {
|
|
||||||
return n, errors.New("array length less than zero")
|
|
||||||
}
|
|
||||||
|
|
||||||
if cap(*a) >= int(size) {
|
|
||||||
*a = (*a)[:int(size)]
|
|
||||||
} else {
|
|
||||||
*a = make(StringIdentifierVarIntArray, int(size))
|
|
||||||
}
|
|
||||||
|
|
||||||
for i := 0; i < int(size); i++ {
|
|
||||||
nn, err = (*packet.Identifier)(&(*a)[i]).ReadFrom(r)
|
|
||||||
n += nn
|
|
||||||
if err != nil {
|
|
||||||
return n, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return n, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Int8VarIntArray a utility type for encoding/decoding packet.Byte -> int8[packet.VarInt] slice.
|
// Int8VarIntArray a utility type for encoding/decoding packet.Byte -> int8[packet.VarInt] slice.
|
||||||
type Int8VarIntArray []int8
|
type Int8VarIntArray []int8
|
||||||
|
|
||||||
@ -422,6 +374,10 @@ func (a *Int8VarIntArray) ReadFrom(r io.Reader) (n int64, err error) {
|
|||||||
return n, errors.New("array length less than zero")
|
return n, errors.New("array length less than zero")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if size > 32767 {
|
||||||
|
return n, errors.New("array length greater than 32767")
|
||||||
|
}
|
||||||
|
|
||||||
if cap(*a) >= int(size) {
|
if cap(*a) >= int(size) {
|
||||||
*a = (*a)[:int(size)]
|
*a = (*a)[:int(size)]
|
||||||
} else {
|
} else {
|
||||||
@ -438,3 +394,55 @@ func (a *Int8VarIntArray) ReadFrom(r io.Reader) (n int64, err error) {
|
|||||||
|
|
||||||
return n, err
|
return n, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// StringIdentifierVarIntArray a utility type for encoding/decoding packet.Identifier -> string[packet.VarInt] slice.
|
||||||
|
type StringIdentifierVarIntArray []string
|
||||||
|
|
||||||
|
func (a StringIdentifierVarIntArray) WriteTo(w io.Writer) (n int64, err error) {
|
||||||
|
size := len(a)
|
||||||
|
nn, err := packet.VarInt(size).WriteTo(w)
|
||||||
|
if err != nil {
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
n += nn
|
||||||
|
for i := 0; i < size; i++ {
|
||||||
|
nn, err := packet.Identifier(a[i]).WriteTo(w)
|
||||||
|
n += nn
|
||||||
|
if err != nil {
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return n, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *StringIdentifierVarIntArray) ReadFrom(r io.Reader) (n int64, err error) {
|
||||||
|
var size packet.VarInt
|
||||||
|
nn, err := size.ReadFrom(r)
|
||||||
|
n += nn
|
||||||
|
if err != nil {
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
if size < 0 {
|
||||||
|
return n, errors.New("array length less than zero")
|
||||||
|
}
|
||||||
|
|
||||||
|
if size > 32767 {
|
||||||
|
return n, errors.New("array length greater than 32767")
|
||||||
|
}
|
||||||
|
|
||||||
|
if cap(*a) >= int(size) {
|
||||||
|
*a = (*a)[:int(size)]
|
||||||
|
} else {
|
||||||
|
*a = make(StringIdentifierVarIntArray, int(size))
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := 0; i < int(size); i++ {
|
||||||
|
nn, err = (*packet.Identifier)(&(*a)[i]).ReadFrom(r)
|
||||||
|
n += nn
|
||||||
|
if err != nil {
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
@ -6,11 +6,9 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"io"
|
"io"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
|
||||||
|
|
||||||
"git.konjactw.dev/falloutBot/go-mc/net/packet"
|
"git.konjactw.dev/falloutBot/go-mc/net/packet"
|
||||||
|
|
||||||
"git.konjactw.dev/patyhank/minego/pkg/protocol/component"
|
"git.konjactw.dev/patyhank/minego/pkg/protocol/component"
|
||||||
|
"github.com/google/uuid"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (c *AddEntity) ReadFrom(r io.Reader) (n int64, err error) {
|
func (c *AddEntity) ReadFrom(r io.Reader) (n int64, err error) {
|
||||||
@ -7100,6 +7098,10 @@ func (a *Int8VarIntArray) ReadFrom(r io.Reader) (n int64, err error) {
|
|||||||
return n, errors.New("array length less than zero")
|
return n, errors.New("array length less than zero")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if size > 32767 {
|
||||||
|
return n, errors.New("array length greater than 32767")
|
||||||
|
}
|
||||||
|
|
||||||
if cap(*a) >= int(size) {
|
if cap(*a) >= int(size) {
|
||||||
*a = (*a)[:int(size)]
|
*a = (*a)[:int(size)]
|
||||||
} else {
|
} else {
|
||||||
@ -7117,10 +7119,10 @@ func (a *Int8VarIntArray) ReadFrom(r io.Reader) (n int64, err error) {
|
|||||||
return n, err
|
return n, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Int64VarIntArray a utility type for encoding/decoding packet.Long -> int64[packet.VarInt] slice.
|
// StringVarIntArray a utility type for encoding/decoding packet.String -> string[packet.VarInt] slice.
|
||||||
type Int64VarIntArray []int64
|
type StringVarIntArray []string
|
||||||
|
|
||||||
func (a Int64VarIntArray) WriteTo(w io.Writer) (n int64, err error) {
|
func (a StringVarIntArray) WriteTo(w io.Writer) (n int64, err error) {
|
||||||
size := len(a)
|
size := len(a)
|
||||||
nn, err := packet.VarInt(size).WriteTo(w)
|
nn, err := packet.VarInt(size).WriteTo(w)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -7128,7 +7130,7 @@ func (a Int64VarIntArray) WriteTo(w io.Writer) (n int64, err error) {
|
|||||||
}
|
}
|
||||||
n += nn
|
n += nn
|
||||||
for i := 0; i < size; i++ {
|
for i := 0; i < size; i++ {
|
||||||
nn, err := packet.Long(a[i]).WriteTo(w)
|
nn, err := packet.String(a[i]).WriteTo(w)
|
||||||
n += nn
|
n += nn
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return n, err
|
return n, err
|
||||||
@ -7137,7 +7139,7 @@ func (a Int64VarIntArray) WriteTo(w io.Writer) (n int64, err error) {
|
|||||||
return n, nil
|
return n, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *Int64VarIntArray) ReadFrom(r io.Reader) (n int64, err error) {
|
func (a *StringVarIntArray) ReadFrom(r io.Reader) (n int64, err error) {
|
||||||
var size packet.VarInt
|
var size packet.VarInt
|
||||||
nn, err := size.ReadFrom(r)
|
nn, err := size.ReadFrom(r)
|
||||||
n += nn
|
n += nn
|
||||||
@ -7148,14 +7150,18 @@ func (a *Int64VarIntArray) ReadFrom(r io.Reader) (n int64, err error) {
|
|||||||
return n, errors.New("array length less than zero")
|
return n, errors.New("array length less than zero")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if size > 32767 {
|
||||||
|
return n, errors.New("array length greater than 32767")
|
||||||
|
}
|
||||||
|
|
||||||
if cap(*a) >= int(size) {
|
if cap(*a) >= int(size) {
|
||||||
*a = (*a)[:int(size)]
|
*a = (*a)[:int(size)]
|
||||||
} else {
|
} else {
|
||||||
*a = make(Int64VarIntArray, int(size))
|
*a = make(StringVarIntArray, int(size))
|
||||||
}
|
}
|
||||||
|
|
||||||
for i := 0; i < int(size); i++ {
|
for i := 0; i < int(size); i++ {
|
||||||
nn, err = (*packet.Long)(&(*a)[i]).ReadFrom(r)
|
nn, err = (*packet.String)(&(*a)[i]).ReadFrom(r)
|
||||||
n += nn
|
n += nn
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return n, err
|
return n, err
|
||||||
@ -7196,6 +7202,10 @@ func (a *StringIdentifierVarIntArray) ReadFrom(r io.Reader) (n int64, err error)
|
|||||||
return n, errors.New("array length less than zero")
|
return n, errors.New("array length less than zero")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if size > 32767 {
|
||||||
|
return n, errors.New("array length greater than 32767")
|
||||||
|
}
|
||||||
|
|
||||||
if cap(*a) >= int(size) {
|
if cap(*a) >= int(size) {
|
||||||
*a = (*a)[:int(size)]
|
*a = (*a)[:int(size)]
|
||||||
} else {
|
} else {
|
||||||
@ -7213,6 +7223,58 @@ func (a *StringIdentifierVarIntArray) ReadFrom(r io.Reader) (n int64, err error)
|
|||||||
return n, err
|
return n, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UuidUUIDUUIDVarIntArray a utility type for encoding/decoding packet.UUID -> uuid.UUID[packet.VarInt] slice.
|
||||||
|
type UuidUUIDUUIDVarIntArray []uuid.UUID
|
||||||
|
|
||||||
|
func (a UuidUUIDUUIDVarIntArray) WriteTo(w io.Writer) (n int64, err error) {
|
||||||
|
size := len(a)
|
||||||
|
nn, err := packet.VarInt(size).WriteTo(w)
|
||||||
|
if err != nil {
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
n += nn
|
||||||
|
for i := 0; i < size; i++ {
|
||||||
|
nn, err := packet.UUID(a[i]).WriteTo(w)
|
||||||
|
n += nn
|
||||||
|
if err != nil {
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return n, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *UuidUUIDUUIDVarIntArray) ReadFrom(r io.Reader) (n int64, err error) {
|
||||||
|
var size packet.VarInt
|
||||||
|
nn, err := size.ReadFrom(r)
|
||||||
|
n += nn
|
||||||
|
if err != nil {
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
if size < 0 {
|
||||||
|
return n, errors.New("array length less than zero")
|
||||||
|
}
|
||||||
|
|
||||||
|
if size > 32767 {
|
||||||
|
return n, errors.New("array length greater than 32767")
|
||||||
|
}
|
||||||
|
|
||||||
|
if cap(*a) >= int(size) {
|
||||||
|
*a = (*a)[:int(size)]
|
||||||
|
} else {
|
||||||
|
*a = make(UuidUUIDUUIDVarIntArray, int(size))
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := 0; i < int(size); i++ {
|
||||||
|
nn, err = (*packet.UUID)(&(*a)[i]).ReadFrom(r)
|
||||||
|
n += nn
|
||||||
|
if err != nil {
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
|
||||||
// Int32VarIntVarIntArray a utility type for encoding/decoding packet.VarInt -> int32[packet.VarInt] slice.
|
// Int32VarIntVarIntArray a utility type for encoding/decoding packet.VarInt -> int32[packet.VarInt] slice.
|
||||||
type Int32VarIntVarIntArray []int32
|
type Int32VarIntVarIntArray []int32
|
||||||
|
|
||||||
@ -7244,6 +7306,10 @@ func (a *Int32VarIntVarIntArray) ReadFrom(r io.Reader) (n int64, err error) {
|
|||||||
return n, errors.New("array length less than zero")
|
return n, errors.New("array length less than zero")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if size > 32767 {
|
||||||
|
return n, errors.New("array length greater than 32767")
|
||||||
|
}
|
||||||
|
|
||||||
if cap(*a) >= int(size) {
|
if cap(*a) >= int(size) {
|
||||||
*a = (*a)[:int(size)]
|
*a = (*a)[:int(size)]
|
||||||
} else {
|
} else {
|
||||||
@ -7292,6 +7358,10 @@ func (a *Int64VarLongVarIntArray) ReadFrom(r io.Reader) (n int64, err error) {
|
|||||||
return n, errors.New("array length less than zero")
|
return n, errors.New("array length less than zero")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if size > 32767 {
|
||||||
|
return n, errors.New("array length greater than 32767")
|
||||||
|
}
|
||||||
|
|
||||||
if cap(*a) >= int(size) {
|
if cap(*a) >= int(size) {
|
||||||
*a = (*a)[:int(size)]
|
*a = (*a)[:int(size)]
|
||||||
} else {
|
} else {
|
||||||
@ -7309,150 +7379,6 @@ func (a *Int64VarLongVarIntArray) ReadFrom(r io.Reader) (n int64, err error) {
|
|||||||
return n, err
|
return n, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// StringStringVarIntArray a utility type for encoding/decoding packet.String -> string[packet.VarInt] slice.
|
|
||||||
type StringStringVarIntArray []string
|
|
||||||
|
|
||||||
func (a StringStringVarIntArray) WriteTo(w io.Writer) (n int64, err error) {
|
|
||||||
size := len(a)
|
|
||||||
nn, err := packet.VarInt(size).WriteTo(w)
|
|
||||||
if err != nil {
|
|
||||||
return n, err
|
|
||||||
}
|
|
||||||
n += nn
|
|
||||||
for i := 0; i < size; i++ {
|
|
||||||
nn, err := packet.String(a[i]).WriteTo(w)
|
|
||||||
n += nn
|
|
||||||
if err != nil {
|
|
||||||
return n, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return n, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (a *StringStringVarIntArray) ReadFrom(r io.Reader) (n int64, err error) {
|
|
||||||
var size packet.VarInt
|
|
||||||
nn, err := size.ReadFrom(r)
|
|
||||||
n += nn
|
|
||||||
if err != nil {
|
|
||||||
return n, err
|
|
||||||
}
|
|
||||||
if size < 0 {
|
|
||||||
return n, errors.New("array length less than zero")
|
|
||||||
}
|
|
||||||
|
|
||||||
if cap(*a) >= int(size) {
|
|
||||||
*a = (*a)[:int(size)]
|
|
||||||
} else {
|
|
||||||
*a = make(StringStringVarIntArray, int(size))
|
|
||||||
}
|
|
||||||
|
|
||||||
for i := 0; i < int(size); i++ {
|
|
||||||
nn, err = (*packet.String)(&(*a)[i]).ReadFrom(r)
|
|
||||||
n += nn
|
|
||||||
if err != nil {
|
|
||||||
return n, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return n, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// StringVarIntArray a utility type for encoding/decoding packet.String -> string[packet.VarInt] slice.
|
|
||||||
type StringVarIntArray []string
|
|
||||||
|
|
||||||
func (a StringVarIntArray) WriteTo(w io.Writer) (n int64, err error) {
|
|
||||||
size := len(a)
|
|
||||||
nn, err := packet.VarInt(size).WriteTo(w)
|
|
||||||
if err != nil {
|
|
||||||
return n, err
|
|
||||||
}
|
|
||||||
n += nn
|
|
||||||
for i := 0; i < size; i++ {
|
|
||||||
nn, err := packet.String(a[i]).WriteTo(w)
|
|
||||||
n += nn
|
|
||||||
if err != nil {
|
|
||||||
return n, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return n, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (a *StringVarIntArray) ReadFrom(r io.Reader) (n int64, err error) {
|
|
||||||
var size packet.VarInt
|
|
||||||
nn, err := size.ReadFrom(r)
|
|
||||||
n += nn
|
|
||||||
if err != nil {
|
|
||||||
return n, err
|
|
||||||
}
|
|
||||||
if size < 0 {
|
|
||||||
return n, errors.New("array length less than zero")
|
|
||||||
}
|
|
||||||
|
|
||||||
if cap(*a) >= int(size) {
|
|
||||||
*a = (*a)[:int(size)]
|
|
||||||
} else {
|
|
||||||
*a = make(StringVarIntArray, int(size))
|
|
||||||
}
|
|
||||||
|
|
||||||
for i := 0; i < int(size); i++ {
|
|
||||||
nn, err = (*packet.String)(&(*a)[i]).ReadFrom(r)
|
|
||||||
n += nn
|
|
||||||
if err != nil {
|
|
||||||
return n, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return n, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// UuidUUIDUUIDVarIntArray a utility type for encoding/decoding packet.UUID -> uuid.UUID[packet.VarInt] slice.
|
|
||||||
type UuidUUIDUUIDVarIntArray []uuid.UUID
|
|
||||||
|
|
||||||
func (a UuidUUIDUUIDVarIntArray) WriteTo(w io.Writer) (n int64, err error) {
|
|
||||||
size := len(a)
|
|
||||||
nn, err := packet.VarInt(size).WriteTo(w)
|
|
||||||
if err != nil {
|
|
||||||
return n, err
|
|
||||||
}
|
|
||||||
n += nn
|
|
||||||
for i := 0; i < size; i++ {
|
|
||||||
nn, err := packet.UUID(a[i]).WriteTo(w)
|
|
||||||
n += nn
|
|
||||||
if err != nil {
|
|
||||||
return n, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return n, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (a *UuidUUIDUUIDVarIntArray) ReadFrom(r io.Reader) (n int64, err error) {
|
|
||||||
var size packet.VarInt
|
|
||||||
nn, err := size.ReadFrom(r)
|
|
||||||
n += nn
|
|
||||||
if err != nil {
|
|
||||||
return n, err
|
|
||||||
}
|
|
||||||
if size < 0 {
|
|
||||||
return n, errors.New("array length less than zero")
|
|
||||||
}
|
|
||||||
|
|
||||||
if cap(*a) >= int(size) {
|
|
||||||
*a = (*a)[:int(size)]
|
|
||||||
} else {
|
|
||||||
*a = make(UuidUUIDUUIDVarIntArray, int(size))
|
|
||||||
}
|
|
||||||
|
|
||||||
for i := 0; i < int(size); i++ {
|
|
||||||
nn, err = (*packet.UUID)(&(*a)[i]).ReadFrom(r)
|
|
||||||
n += nn
|
|
||||||
if err != nil {
|
|
||||||
return n, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return n, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Int8ByteVarIntArray a utility type for encoding/decoding packet.Byte -> int8[packet.VarInt] slice.
|
// Int8ByteVarIntArray a utility type for encoding/decoding packet.Byte -> int8[packet.VarInt] slice.
|
||||||
type Int8ByteVarIntArray []int8
|
type Int8ByteVarIntArray []int8
|
||||||
|
|
||||||
@ -7484,6 +7410,10 @@ func (a *Int8ByteVarIntArray) ReadFrom(r io.Reader) (n int64, err error) {
|
|||||||
return n, errors.New("array length less than zero")
|
return n, errors.New("array length less than zero")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if size > 32767 {
|
||||||
|
return n, errors.New("array length greater than 32767")
|
||||||
|
}
|
||||||
|
|
||||||
if cap(*a) >= int(size) {
|
if cap(*a) >= int(size) {
|
||||||
*a = (*a)[:int(size)]
|
*a = (*a)[:int(size)]
|
||||||
} else {
|
} else {
|
||||||
@ -7500,3 +7430,107 @@ func (a *Int8ByteVarIntArray) ReadFrom(r io.Reader) (n int64, err error) {
|
|||||||
|
|
||||||
return n, err
|
return n, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// StringStringVarIntArray a utility type for encoding/decoding packet.String -> string[packet.VarInt] slice.
|
||||||
|
type StringStringVarIntArray []string
|
||||||
|
|
||||||
|
func (a StringStringVarIntArray) WriteTo(w io.Writer) (n int64, err error) {
|
||||||
|
size := len(a)
|
||||||
|
nn, err := packet.VarInt(size).WriteTo(w)
|
||||||
|
if err != nil {
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
n += nn
|
||||||
|
for i := 0; i < size; i++ {
|
||||||
|
nn, err := packet.String(a[i]).WriteTo(w)
|
||||||
|
n += nn
|
||||||
|
if err != nil {
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return n, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *StringStringVarIntArray) ReadFrom(r io.Reader) (n int64, err error) {
|
||||||
|
var size packet.VarInt
|
||||||
|
nn, err := size.ReadFrom(r)
|
||||||
|
n += nn
|
||||||
|
if err != nil {
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
if size < 0 {
|
||||||
|
return n, errors.New("array length less than zero")
|
||||||
|
}
|
||||||
|
|
||||||
|
if size > 32767 {
|
||||||
|
return n, errors.New("array length greater than 32767")
|
||||||
|
}
|
||||||
|
|
||||||
|
if cap(*a) >= int(size) {
|
||||||
|
*a = (*a)[:int(size)]
|
||||||
|
} else {
|
||||||
|
*a = make(StringStringVarIntArray, int(size))
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := 0; i < int(size); i++ {
|
||||||
|
nn, err = (*packet.String)(&(*a)[i]).ReadFrom(r)
|
||||||
|
n += nn
|
||||||
|
if err != nil {
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Int64VarIntArray a utility type for encoding/decoding packet.Long -> int64[packet.VarInt] slice.
|
||||||
|
type Int64VarIntArray []int64
|
||||||
|
|
||||||
|
func (a Int64VarIntArray) WriteTo(w io.Writer) (n int64, err error) {
|
||||||
|
size := len(a)
|
||||||
|
nn, err := packet.VarInt(size).WriteTo(w)
|
||||||
|
if err != nil {
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
n += nn
|
||||||
|
for i := 0; i < size; i++ {
|
||||||
|
nn, err := packet.Long(a[i]).WriteTo(w)
|
||||||
|
n += nn
|
||||||
|
if err != nil {
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return n, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *Int64VarIntArray) ReadFrom(r io.Reader) (n int64, err error) {
|
||||||
|
var size packet.VarInt
|
||||||
|
nn, err := size.ReadFrom(r)
|
||||||
|
n += nn
|
||||||
|
if err != nil {
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
if size < 0 {
|
||||||
|
return n, errors.New("array length less than zero")
|
||||||
|
}
|
||||||
|
|
||||||
|
if size > 32767 {
|
||||||
|
return n, errors.New("array length greater than 32767")
|
||||||
|
}
|
||||||
|
|
||||||
|
if cap(*a) >= int(size) {
|
||||||
|
*a = (*a)[:int(size)]
|
||||||
|
} else {
|
||||||
|
*a = make(Int64VarIntArray, int(size))
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := 0; i < int(size); i++ {
|
||||||
|
nn, err = (*packet.Long)(&(*a)[i]).ReadFrom(r)
|
||||||
|
n += nn
|
||||||
|
if err != nil {
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
@ -21,120 +21,121 @@ type PlayerInfoUpdate struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (p PlayerInfoUpdate) WriteTo(w io.Writer) (n int64, err error) {
|
func (p PlayerInfoUpdate) WriteTo(w io.Writer) (n int64, err error) {
|
||||||
bitset := pk.NewFixedBitSet(8)
|
//bitset := pk.NewFixedBitSet(8)
|
||||||
for _, infos := range p.Players {
|
//for _, infos := range p.Players {
|
||||||
for _, info := range infos {
|
// for _, info := range infos {
|
||||||
bitset.Set(info.playerInfoBitMask(), true)
|
// bitset.Set(info.playerInfoBitMask(), true)
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
n1, err := bitset.WriteTo(w)
|
//n1, err := bitset.WriteTo(w)
|
||||||
if err != nil {
|
//if err != nil {
|
||||||
return n1, err
|
// return n1, err
|
||||||
}
|
//}
|
||||||
n += n1
|
//n += n1
|
||||||
n2, err := pk.VarInt(len(p.Players)).WriteTo(w)
|
//n2, err := pk.VarInt(len(p.Players)).WriteTo(w)
|
||||||
if err != nil {
|
//if err != nil {
|
||||||
return n1 + n2, err
|
// return n1 + n2, err
|
||||||
}
|
//}
|
||||||
n += n2
|
//n += n2
|
||||||
for playerUUID, infos := range p.Players {
|
//for playerUUID, infos := range p.Players {
|
||||||
n3, err := (*pk.UUID)(&playerUUID).WriteTo(w)
|
// n3, err := (*pk.UUID)(&playerUUID).WriteTo(w)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return n1 + n2 + n3, err
|
// return n1 + n2 + n3, err
|
||||||
}
|
// }
|
||||||
n += n3
|
// n += n3
|
||||||
for _, info := range infos {
|
// for _, info := range infos {
|
||||||
n4, err := info.WriteTo(w)
|
// n4, err := info.WriteTo(w)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return n1 + n2 + n3 + n4, err
|
// return n1 + n2 + n3 + n4, err
|
||||||
}
|
// }
|
||||||
n += n4
|
// n += n4
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
return
|
return 0, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *PlayerInfoUpdate) ReadFrom(r io.Reader) (n int64, err error) {
|
func (p *PlayerInfoUpdate) ReadFrom(r io.Reader) (n int64, err error) {
|
||||||
bitset := pk.NewFixedBitSet(256)
|
//bitset := pk.NewFixedBitSet(256)
|
||||||
n1, err := bitset.ReadFrom(r)
|
//n1, err := bitset.ReadFrom(r)
|
||||||
if err != nil {
|
//if err != nil {
|
||||||
return n1, err
|
// return n1, err
|
||||||
}
|
//}
|
||||||
m := make(map[uuid.UUID][]PlayerInfo)
|
//m := make(map[uuid.UUID][]PlayerInfo)
|
||||||
|
//
|
||||||
var playerLens pk.VarInt
|
//var playerLens pk.VarInt
|
||||||
n2, err := playerLens.ReadFrom(r)
|
//n2, err := playerLens.ReadFrom(r)
|
||||||
if err != nil {
|
//if err != nil {
|
||||||
return n1 + n2, err
|
// return n1 + n2, err
|
||||||
}
|
//}
|
||||||
for i := 0; i < int(playerLens); i++ {
|
//for i := 0; i < int(playerLens); i++ {
|
||||||
var playerUUID uuid.UUID
|
// var playerUUID uuid.UUID
|
||||||
n3, err := (*pk.UUID)(&playerUUID).ReadFrom(r)
|
// n3, err := (*pk.UUID)(&playerUUID).ReadFrom(r)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return n1 + n2 + n3, err
|
// return n1 + n2 + n3, err
|
||||||
}
|
// }
|
||||||
var temp int64
|
// var temp int64
|
||||||
var infos []PlayerInfo
|
// var infos []PlayerInfo
|
||||||
if bitset.Get(0x01) {
|
// if bitset.Get(0x01) {
|
||||||
n4, err := playerInfoRead(&infos, &PlayerInfoAddPlayer{}, r)
|
// n4, err := playerInfoRead(&infos, &PlayerInfoAddPlayer{}, r)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return n1 + n2 + n3 + n4, err
|
// return n1 + n2 + n3 + n4, err
|
||||||
}
|
// }
|
||||||
temp += n4
|
// temp += n4
|
||||||
}
|
// }
|
||||||
if bitset.Get(0x02) {
|
// if bitset.Get(0x02) {
|
||||||
n4, err := playerInfoRead(&infos, &PlayerInfoInitializeChat{}, r)
|
// n4, err := playerInfoRead(&infos, &PlayerInfoInitializeChat{}, r)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return n1 + n2 + n3 + n4, err
|
// return n1 + n2 + n3 + n4, err
|
||||||
}
|
// }
|
||||||
temp += n4
|
// temp += n4
|
||||||
}
|
// }
|
||||||
if bitset.Get(0x04) {
|
// if bitset.Get(0x04) {
|
||||||
n4, err := playerInfoRead(&infos, &PlayerInfoUpdateGameMode{}, r)
|
// n4, err := playerInfoRead(&infos, &PlayerInfoUpdateGameMode{}, r)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return n1 + n2 + n3 + n4, err
|
// return n1 + n2 + n3 + n4, err
|
||||||
}
|
// }
|
||||||
temp += n4
|
// temp += n4
|
||||||
}
|
// }
|
||||||
if bitset.Get(0x08) {
|
// if bitset.Get(0x08) {
|
||||||
n4, err := playerInfoRead(&infos, &PlayerInfoUpdateListed{}, r)
|
// n4, err := playerInfoRead(&infos, &PlayerInfoUpdateListed{}, r)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return n1 + n2 + n3 + n4, err
|
// return n1 + n2 + n3 + n4, err
|
||||||
}
|
// }
|
||||||
temp += n4
|
// temp += n4
|
||||||
}
|
// }
|
||||||
if bitset.Get(0x10) {
|
// if bitset.Get(0x10) {
|
||||||
n4, err := playerInfoRead(&infos, &PlayerInfoUpdateLatency{}, r)
|
// n4, err := playerInfoRead(&infos, &PlayerInfoUpdateLatency{}, r)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return n1 + n2 + n3 + n4, err
|
// return n1 + n2 + n3 + n4, err
|
||||||
}
|
// }
|
||||||
temp += n4
|
// temp += n4
|
||||||
}
|
// }
|
||||||
if bitset.Get(0x20) {
|
// if bitset.Get(0x20) {
|
||||||
n4, err := playerInfoRead(&infos, &PlayerInfoUpdateDisplayName{}, r)
|
// n4, err := playerInfoRead(&infos, &PlayerInfoUpdateDisplayName{}, r)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return n1 + n2 + n3 + n4, err
|
// return n1 + n2 + n3 + n4, err
|
||||||
}
|
// }
|
||||||
temp += n4
|
// temp += n4
|
||||||
}
|
// }
|
||||||
if bitset.Get(0x40) {
|
// if bitset.Get(0x40) {
|
||||||
n4, err := playerInfoRead(&infos, &PlayerInfoUpdateListPriority{}, r)
|
// n4, err := playerInfoRead(&infos, &PlayerInfoUpdateListPriority{}, r)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return n1 + n2 + n3 + n4, err
|
// return n1 + n2 + n3 + n4, err
|
||||||
}
|
// }
|
||||||
temp += n4
|
// temp += n4
|
||||||
}
|
// }
|
||||||
if bitset.Get(0x80) {
|
// if bitset.Get(0x80) {
|
||||||
n4, err := playerInfoRead(&infos, &PlayerInfoUpdateHat{}, r)
|
// n4, err := playerInfoRead(&infos, &PlayerInfoUpdateHat{}, r)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return n1 + n2 + n3 + n4, err
|
// return n1 + n2 + n3 + n4, err
|
||||||
}
|
// }
|
||||||
temp += n4
|
// temp += n4
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
m[playerUUID] = infos
|
// m[playerUUID] = infos
|
||||||
}
|
//}
|
||||||
return
|
//return
|
||||||
|
return 0, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func playerInfoRead(infos *[]PlayerInfo, info PlayerInfo, r io.Reader) (int64, error) {
|
func playerInfoRead(infos *[]PlayerInfo, info PlayerInfo, r io.Reader) (int64, error) {
|
||||||
|
@ -2728,54 +2728,6 @@ func (c UseItemOn) WriteTo(w io.Writer) (n int64, err error) {
|
|||||||
return n, err
|
return n, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// StringVarIntArray a utility type for encoding/decoding packet.String -> string[packet.VarInt] slice.
|
|
||||||
type StringVarIntArray []string
|
|
||||||
|
|
||||||
func (a StringVarIntArray) WriteTo(w io.Writer) (n int64, err error) {
|
|
||||||
size := len(a)
|
|
||||||
nn, err := packet.VarInt(size).WriteTo(w)
|
|
||||||
if err != nil {
|
|
||||||
return n, err
|
|
||||||
}
|
|
||||||
n += nn
|
|
||||||
for i := 0; i < size; i++ {
|
|
||||||
nn, err := packet.String(a[i]).WriteTo(w)
|
|
||||||
n += nn
|
|
||||||
if err != nil {
|
|
||||||
return n, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return n, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (a *StringVarIntArray) ReadFrom(r io.Reader) (n int64, err error) {
|
|
||||||
var size packet.VarInt
|
|
||||||
nn, err := size.ReadFrom(r)
|
|
||||||
n += nn
|
|
||||||
if err != nil {
|
|
||||||
return n, err
|
|
||||||
}
|
|
||||||
if size < 0 {
|
|
||||||
return n, errors.New("array length less than zero")
|
|
||||||
}
|
|
||||||
|
|
||||||
if cap(*a) >= int(size) {
|
|
||||||
*a = (*a)[:int(size)]
|
|
||||||
} else {
|
|
||||||
*a = make(StringVarIntArray, int(size))
|
|
||||||
}
|
|
||||||
|
|
||||||
for i := 0; i < int(size); i++ {
|
|
||||||
nn, err = (*packet.String)(&(*a)[i]).ReadFrom(r)
|
|
||||||
n += nn
|
|
||||||
if err != nil {
|
|
||||||
return n, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return n, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Int8ByteVarIntArray a utility type for encoding/decoding packet.Byte -> int8[packet.VarInt] slice.
|
// Int8ByteVarIntArray a utility type for encoding/decoding packet.Byte -> int8[packet.VarInt] slice.
|
||||||
type Int8ByteVarIntArray []int8
|
type Int8ByteVarIntArray []int8
|
||||||
|
|
||||||
@ -2807,6 +2759,10 @@ func (a *Int8ByteVarIntArray) ReadFrom(r io.Reader) (n int64, err error) {
|
|||||||
return n, errors.New("array length less than zero")
|
return n, errors.New("array length less than zero")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if size > 32767 {
|
||||||
|
return n, errors.New("array length greater than 32767")
|
||||||
|
}
|
||||||
|
|
||||||
if cap(*a) >= int(size) {
|
if cap(*a) >= int(size) {
|
||||||
*a = (*a)[:int(size)]
|
*a = (*a)[:int(size)]
|
||||||
} else {
|
} else {
|
||||||
@ -2823,3 +2779,55 @@ func (a *Int8ByteVarIntArray) ReadFrom(r io.Reader) (n int64, err error) {
|
|||||||
|
|
||||||
return n, err
|
return n, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// StringVarIntArray a utility type for encoding/decoding packet.String -> string[packet.VarInt] slice.
|
||||||
|
type StringVarIntArray []string
|
||||||
|
|
||||||
|
func (a StringVarIntArray) WriteTo(w io.Writer) (n int64, err error) {
|
||||||
|
size := len(a)
|
||||||
|
nn, err := packet.VarInt(size).WriteTo(w)
|
||||||
|
if err != nil {
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
n += nn
|
||||||
|
for i := 0; i < size; i++ {
|
||||||
|
nn, err := packet.String(a[i]).WriteTo(w)
|
||||||
|
n += nn
|
||||||
|
if err != nil {
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return n, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *StringVarIntArray) ReadFrom(r io.Reader) (n int64, err error) {
|
||||||
|
var size packet.VarInt
|
||||||
|
nn, err := size.ReadFrom(r)
|
||||||
|
n += nn
|
||||||
|
if err != nil {
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
if size < 0 {
|
||||||
|
return n, errors.New("array length less than zero")
|
||||||
|
}
|
||||||
|
|
||||||
|
if size > 32767 {
|
||||||
|
return n, errors.New("array length greater than 32767")
|
||||||
|
}
|
||||||
|
|
||||||
|
if cap(*a) >= int(size) {
|
||||||
|
*a = (*a)[:int(size)]
|
||||||
|
} else {
|
||||||
|
*a = make(StringVarIntArray, int(size))
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := 0; i < int(size); i++ {
|
||||||
|
nn, err = (*packet.String)(&(*a)[i]).ReadFrom(r)
|
||||||
|
n += nn
|
||||||
|
if err != nil {
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
@ -145,6 +145,10 @@ func (a *Int32VarIntVarIntArray) ReadFrom(r io.Reader) (n int64, err error) {
|
|||||||
return n, errors.New("array length less than zero")
|
return n, errors.New("array length less than zero")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if size > 32767 {
|
||||||
|
return n, errors.New("array length greater than 32767")
|
||||||
|
}
|
||||||
|
|
||||||
if cap(*a) >= int(size) {
|
if cap(*a) >= int(size) {
|
||||||
*a = (*a)[:int(size)]
|
*a = (*a)[:int(size)]
|
||||||
} else {
|
} else {
|
||||||
|
Reference in New Issue
Block a user