Files
go-mc/chat/nbtmessage.go
2024-04-27 22:28:40 +08:00

45 lines
1.0 KiB
Go

package chat
import (
"errors"
"io"
"strconv"
"github.com/Tnze/go-mc/nbt"
pk "github.com/Tnze/go-mc/net/packet"
)
// ReadFrom decode Message in a Text component
func (m *Message) ReadFrom(r io.Reader) (int64, error) {
return pk.NBT(m).ReadFrom(r)
}
// WriteTo encode Message into a Text component
func (m Message) WriteTo(w io.Writer) (int64, error) {
return pk.NBT(&m).WriteTo(w)
}
func (m Message) MarshalNBT() ([]byte, error) {
if m.Translate != "" {
return nbt.Marshal(translateMsg(m))
} else {
return nbt.Marshal(rawMsgStruct(m))
}
}
func (m *Message) UnmarshalNBT(raw []byte) (err error) {
if len(raw) == 0 {
return io.EOF
}
switch raw[0] {
case nbt.TagString:
return nbt.Unmarshal(raw, &m.Text) // Unmarshal as jsonString
case nbt.TagCompound:
return nbt.Unmarshal(raw, (*rawMsgStruct)(m)) // Unmarshal as jsonMsg
case nbt.TagList:
return nbt.Unmarshal(raw, &m.Extra) // Unmarshal as []Message
default:
return errors.New("unknown chat message type: '" + strconv.FormatUint(uint64(raw[0]), 16) + "'")
}
}