예제 #1
0
파일: datautils.py 프로젝트: JonnyD/spock
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
예제 #2
0
파일: NBTtest.py 프로젝트: jonasrk/spock
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()
예제 #3
0
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()