Experimental fastnbt library
This commit is contained in:
100
nbt/fastnbt/types.go
Normal file
100
nbt/fastnbt/types.go
Normal file
@ -0,0 +1,100 @@
|
||||
package fastnbt
|
||||
|
||||
import (
|
||||
"math"
|
||||
|
||||
"github.com/Tnze/go-mc/nbt"
|
||||
)
|
||||
|
||||
type Value struct {
|
||||
comp Compound
|
||||
list []*Value
|
||||
data []byte
|
||||
tag byte // nbt.Tag*
|
||||
}
|
||||
|
||||
func (v *Value) Bool() bool {
|
||||
if v.tag != nbt.TagByte {
|
||||
return false
|
||||
}
|
||||
return v.data[0] != 0
|
||||
}
|
||||
|
||||
func (v *Value) Byte() int8 {
|
||||
if v.tag != nbt.TagByte {
|
||||
return 0
|
||||
}
|
||||
return int8(v.data[0])
|
||||
}
|
||||
|
||||
func (v *Value) Short() int16 {
|
||||
if v.tag != nbt.TagShort {
|
||||
return 0
|
||||
}
|
||||
return int16(v.data[0])<<8 | int16(v.data[1])
|
||||
}
|
||||
|
||||
func (v *Value) Int() int32 {
|
||||
if v.tag != nbt.TagInt {
|
||||
return 0
|
||||
}
|
||||
return int32(v.data[0])<<24 | int32(v.data[1])<<16 |
|
||||
int32(v.data[2])<<8 | int32(v.data[3])
|
||||
}
|
||||
|
||||
func (v *Value) Long() int64 {
|
||||
if v.tag != nbt.TagLong {
|
||||
return 0
|
||||
}
|
||||
return int64(v.data[0])<<56 | int64(v.data[1])<<48 |
|
||||
int64(v.data[2])<<40 | int64(v.data[3])<<32 |
|
||||
int64(v.data[4])<<24 | int64(v.data[5])<<16 |
|
||||
int64(v.data[6])<<8 | int64(v.data[7])
|
||||
}
|
||||
|
||||
func (v *Value) Float() float32 {
|
||||
if v.tag != nbt.TagFloat {
|
||||
return 0
|
||||
}
|
||||
return math.Float32frombits(
|
||||
uint32(v.data[0])<<24 | uint32(v.data[1])<<16 |
|
||||
uint32(v.data[2])<<8 | uint32(v.data[3]))
|
||||
}
|
||||
|
||||
func (v *Value) Double() float64 {
|
||||
if v.tag != nbt.TagDouble {
|
||||
return 0
|
||||
}
|
||||
return math.Float64frombits(
|
||||
uint64(v.data[0])<<56 | uint64(v.data[1])<<48 |
|
||||
uint64(v.data[2])<<40 | uint64(v.data[3])<<32 |
|
||||
uint64(v.data[4])<<24 | uint64(v.data[5])<<16 |
|
||||
uint64(v.data[6])<<8 | uint64(v.data[7]))
|
||||
}
|
||||
|
||||
func (v *Value) List() []*Value {
|
||||
return v.list
|
||||
}
|
||||
|
||||
func (v *Value) ByteArray() []byte {
|
||||
if v.tag != nbt.TagByteArray {
|
||||
return nil
|
||||
}
|
||||
return v.data[4:]
|
||||
}
|
||||
|
||||
func (v *Value) String() string {
|
||||
if v.tag != nbt.TagString {
|
||||
return ""
|
||||
}
|
||||
return string(v.data[2:])
|
||||
}
|
||||
|
||||
type Compound struct {
|
||||
kvs []kv
|
||||
}
|
||||
|
||||
type kv struct {
|
||||
tag string
|
||||
v *Value
|
||||
}
|
Reference in New Issue
Block a user