/
tagwriter.go
105 lines (82 loc) · 1.94 KB
/
tagwriter.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
package nbt
func (t TagEnd) write(writer *Writer) error {
return writer.writeTagId(t.Type())
}
func (t TagByte) write(writer *Writer) error {
return writer.writeUint8(byte(t))
}
func (t TagShort) write(writer *Writer) error {
return writer.writeInt16(int16(t))
}
func (t TagInt) write(writer *Writer) error {
return writer.writeInt32(int32(t))
}
func (t TagLong) write(writer *Writer) error {
return writer.writeInt64(int64(t))
}
func (t TagFloat) write(writer *Writer) error {
return writer.writeFloat32(float32(t))
}
func (t TagDouble) write(writer *Writer) error {
return writer.writeFloat64(float64(t))
}
func (t TagByteArray) write(writer *Writer) error {
if err := writer.writeInt32(int32(len(t))); err != nil {
return err
}
return writer.writeBytes(t)
}
func (t TagString) write(writer *Writer) error {
return writer.writeUtf8(string(t))
}
func (t TagList) write(writer *Writer) error {
// write type ID
if err := writer.writeTagId(t.ElementType); err != nil {
return err
}
// write len
if err := writer.writeInt32(int32(len(t.Elements))); err != nil {
return err
}
for _, el := range t.Elements {
if err := el.write(writer); err != nil {
return err
}
}
return nil
}
func (t TagCompound) write(writer *Writer) error {
for name, value := range t {
if err := writer.writeMeta(value, name); err != nil {
return err
}
if err := value.write(writer); err != nil {
return err
}
}
return TagEnd{}.write(writer)
}
func (t TagIntArray) write(writer *Writer) error {
// write len
if err := writer.writeInt32(int32(len(t))); err != nil {
return err
}
for _, value := range t {
if err := writer.writeInt32(value); err != nil {
return err
}
}
return nil
}
func (t TagLongArray) write(writer *Writer) error {
// write len
if err := writer.writeInt32(int32(len(t))); err != nil {
return err
}
for _, value := range t {
if err := writer.writeInt64(value); err != nil {
return err
}
}
return nil
}