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) + "'") } }