diff options
author | Kevin Chabowski <kevin@kch42.de> | 2013-08-07 22:06:33 +0200 |
---|---|---|
committer | Kevin Chabowski <kevin@kch42.de> | 2013-08-07 22:06:33 +0200 |
commit | e7b9d45bf2ed53fee66ad589161dd3e534e98c7f (patch) | |
tree | b1ba590fa4878b91e2e329fdd90e26cfe4187eda /nbt/create.go | |
parent | b990c3d2db0280f0c4b3dccc2520caf5f2b6b6e6 (diff) | |
download | gonbt-e7b9d45bf2ed53fee66ad589161dd3e534e98c7f.tar.gz gonbt-e7b9d45bf2ed53fee66ad589161dd3e534e98c7f.tar.bz2 gonbt-e7b9d45bf2ed53fee66ad589161dd3e534e98c7f.zip |
More tag creation functions.
Diffstat (limited to 'nbt/create.go')
-rw-r--r-- | nbt/create.go | 32 |
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}} +} |