Handle screen open/send content

This commit is contained in:
Tnze
2021-07-04 00:44:42 +08:00
parent 8ecb6478a6
commit d9b6a90afc
6 changed files with 26 additions and 13 deletions

View File

@ -441,20 +441,23 @@ type nbtField struct {
FieldName string
}
// Encode a nbtField
func (n nbtField) WriteTo(w io.Writer) (int64, error) {
var buf bytes.Buffer
if err := nbt.NewEncoder(&buf).Encode(n.V, n.FieldName); err != nil {
if n.V == nil {
buf.WriteByte(nbt.TagEnd)
} else if err := nbt.NewEncoder(&buf).Encode(n.V, n.FieldName); err != nil {
return 0, err
}
return buf.WriteTo(w)
}
// Decode a nbtField
func (n nbtField) ReadFrom(r io.Reader) (int64, error) {
// LimitReader is used to count reader length
lr := &io.LimitedReader{R: r, N: math.MaxInt64}
err := nbt.NewDecoder(lr).Decode(n.V)
if err != nil && errors.Is(err, nbt.ErrEND) {
err = nil
}
return math.MaxInt64 - lr.N, err
}