From 7b5e289786e9dacd2fd1d374702efa1cf734cb42 Mon Sep 17 00:00:00 2001 From: Tnze Date: Sun, 19 Sep 2021 15:32:03 +0800 Subject: [PATCH] may fix #121 --- nbt/encode.go | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/nbt/encode.go b/nbt/encode.go index 8350961..1c91305 100644 --- a/nbt/encode.go +++ b/nbt/encode.go @@ -84,9 +84,20 @@ func (e *Encoder) writeValue(val reflect.Value, tagType byte) error { return err } else { for i := 0; i < n; i++ { - v := val.Index(i).Int() - + elem := val.Index(i) + for elem.Kind() == reflect.Interface { + elem = elem.Elem() + } var err error + var v int64 + switch elem.Kind() { + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + v = elem.Int() + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: + v = int64(elem.Uint()) + default: + return errors.New("value typed " + elem.Type().String() + "is not allowed in Tag 0x" + strconv.FormatUint(uint64(tagType), 16)) + } if tagType == TagIntArray { err = e.writeInt32(int32(v)) } else if tagType == TagLongArray {