def pack(data_type, data): if data_type in mcdata.data_types: format = mcdata.data_types[data_type] return struct.pack(endian+format[0], data) if data_type == "string": return pack("short", len(data)) + data.encode('utf-16be') if data_type == "slot": o = pack('short', data['id']) if data['id'] > 0: o += pack('byte', data['amount']) o += pack('short', data['damage']) #if data['id'] in enchantable: if 'enchantment_data' in data: o += pack('short', len(data['enchantment_data'])) o += data['enchantment_data'] elif 'enchantments' in data: ench = nbt.encode_nbt(data['enchantments']) o += pack('short', len(ench)) o += ench else: o += pack('short', -1) return o if data_type == "metadata": o = '' for key, tmp in data: ty, val = tmp x = key | (ty << 5) o += pack('ubyte', x) if ty == 0: o += pack('byte', val) if ty == 1: o += pack('short', val) if ty == 2: o += pack('int', val) if ty == 3: o += pack('float', val) if ty == 4: o += pack('string', val) if ty == 5: o += pack('short', val['id']) o += pack('byte', val['count']) o += pack('short', val['damage']) if ty == 6: for i in range(3): o += pack('int', val[i]) o += pack('byte', 127) return o
from spock.mcp import nbt from spock.bound_buffer import BoundBuffer magic = open("bigtest.nbt").read() tags = nbt.decode_nbt(magic) foo = nbt.encode_nbt(tags) tags = nbt.decode_nbt(foo) print tags.pretty_tree()
from spock.mcp import nbt from spock.bound_buffer import BoundBuffer magic = open('bigtest.nbt').read() tags = nbt.decode_nbt(magic) foo = nbt.encode_nbt(tags) tags = nbt.decode_nbt(foo) print tags.pretty_tree()