summaryrefslogtreecommitdiff
path: root/nbt/create.go
diff options
context:
space:
mode:
Diffstat (limited to 'nbt/create.go')
-rw-r--r--nbt/create.go32
1 files changed, 30 insertions, 2 deletions
diff --git a/nbt/create.go b/nbt/create.go
index d515c1b..b3ff3e8 100644
--- a/nbt/create.go
+++ b/nbt/create.go
@@ -1,5 +1,9 @@
package nbt
+import (
+ "reflect"
+)
+
func NewByteTag(v byte) Tag { return Tag{TAG_Byte, v} }
func NewShortTag(v int16) Tag { return Tag{TAG_Short, v} }
func NewIntTag(v int32) Tag { return Tag{TAG_Int, v} }
@@ -10,5 +14,29 @@ func NewByteArrayTag(v []byte) Tag { return Tag{TAG_Byte_Array, v} }
func NewStringTag(v string) Tag { return Tag{TAG_String, v} }
func NewIntArrayTag(v []int32) Tag { return Tag{TAG_Int_Array, v} }
-// func NewCompoundTag() Tag {return Tag{TAG_Compound, make(TagCompound)}}
-// func NewListTag
+// NewCompoundTag creates a new Tag with type TAG_Compound. Usually it is more convenient to make the TagCompound payload and then manually construct the Tag value, though.
+func NewCompoundTag() Tag { return Tag{TAG_Compound, make(TagCompound)} }
+
+// NewListTag creates a new Tag of type TAG_List with tag elems of type ltt.
+//
+// l must either be of type []interface{}, where the elements are payloads for ltt tags OR of type []T, where T is the payload type for ltt tags.
+//
+// YOU are responsible for this, this function will not check the correctness.
+// When given wrong data, this function will either panic, or writing the NBT data will later fail.
+func NewListTag(ltt TagType, l interface{}) Tag {
+ var elems []interface{}
+ if is, ok := l.([]interface{}); ok {
+ elems = is
+ } else {
+ val := reflect.ValueOf(l)
+
+ n := val.Len()
+ elems = make([]interface{}, n)
+
+ for i := 0; i < n; i++ {
+ elems[i] = val.Index(i).Interface()
+ }
+ }
+
+ return Tag{TAG_List, TagList{ltt, elems}}
+}