コード例 #1
0
ファイル: mcpacket.py プロジェクト: guineawheek/spock
    def decode(self, bbuff, proto_comp_state):
        self.data = {}
        if proto_comp_state == mcdata.PROTO_COMP_ON:
            packet_length = datautils.unpack(MC_VARINT, bbuff)
            start = bbuff.tell()
            data_length = datautils.unpack(MC_VARINT, bbuff)
            packet_data = bbuff.recv(packet_length-(bbuff.tell()-start))
            if data_length:
                packet_data = zlib.decompress(packet_data, zlib.MAX_WBITS)
        elif proto_comp_state == mcdata.PROTO_COMP_OFF:
            packet_data = bbuff.recv(datautils.unpack(MC_VARINT, bbuff))
        else:
            return None
        pbuff = utils.BoundBuffer(packet_data)

        try:
            #Ident
            self.__ident[2] = datautils.unpack(MC_VARINT, pbuff)
            self.ident = tuple(self.__ident)
            self.str_ident = mcdata.packet_ident2str[self.ident]
            #Payload
            for dtype, name in mcdata.hashed_structs[self.ident]:
                self.data[name] = datautils.unpack(dtype, pbuff)
            #Extension
            if self.ident in hashed_extensions:
                hashed_extensions[self.ident].decode_extra(self, pbuff)
            if pbuff.buff:
                raise PacketDecodeFailure(self, pbuff)
        except utils.BufferUnderflowException:
            raise PacketDecodeFailure(self, pbuff, True)
        return self
コード例 #2
0
ファイル: mcpacket.py プロジェクト: conorshankey/micropsi2
    def decode(self, bbuff):
        self.data = {}
        self.length = datautils.unpack(MC_VARINT, bbuff)
        encoded = bbuff.recv(self.length)
        try:
            pbuff = utils.BoundBuffer(encoded)

            #Ident
            self.id = datautils.unpack(MC_VARINT, pbuff)
            self.__hash_ident()

            #Payload
            for dtype, name in mcdata.hashed_structs[self.__hashed_ident]:
                try:
                    self.data[name] = datautils.unpack(dtype, pbuff)
                except BufferUnderflowException:
                    raise Exception("Failed to parse field {0}:{1} from packet {2}".format(name, dtype, repr(self)))

            #Extension
            if self.__hashed_ident in hashed_extensions:
                hashed_extensions[self.__hashed_ident].decode_extra(self, pbuff)

            return self

        except BufferUnderflowException:
            raise Exception("Failed to parse packet: ", repr(self))
コード例 #3
0
ファイル: mcpacket.py プロジェクト: MrSwiss/SpockBot
    def decode(self, bbuff, proto_comp_state):
        self.data = {}
        packet_length = datautils.unpack(MC_VARINT, bbuff)
        packet_data = bbuff.recv(packet_length)
        pbuff = utils.BoundBuffer(packet_data)
        if proto_comp_state == mcdata.PROTO_COMP_ON:
            body_length = datautils.unpack(MC_VARINT, pbuff)
            if body_length > 0:
                body_data = zlib.decompress(pbuff.flush(), zlib.MAX_WBITS)
                pbuff.write(body_data)
                pbuff.save()

        try:
            # Ident
            self.__ident[2] = datautils.unpack(MC_VARINT, pbuff)
            self.ident = tuple(self.__ident)
            self.str_ident = mcdata.packet_ident2str[self.ident]
            # Payload
            for dtype, name in mcdata.hashed_structs[self.ident]:
                self.data[name] = datautils.unpack(dtype, pbuff)
            # Extension
            if self.ident in hashed_extensions:
                hashed_extensions[self.ident].decode_extra(self, pbuff)
            if len(pbuff) > 0:
                raise PacketDecodeFailure(self, pbuff)
        except utils.BufferUnderflowException:
            raise PacketDecodeFailure(self, pbuff, True)
        return self
コード例 #4
0
ファイル: mcpacket.py プロジェクト: nheir/spock
    def decode(self, bbuff, proto_comp_state):
        self.data = {}
        if proto_comp_state == mcdata.PROTO_COMP_ON:
            packet_length = datautils.unpack(MC_VARINT, bbuff)
            start = bbuff.tell()
            data_length = datautils.unpack(MC_VARINT, bbuff)
            packet_data = bbuff.recv(packet_length - (bbuff.tell() - start))
            if data_length:
                packet_data = zlib.decompress(packet_data, zlib.MAX_WBITS)
        elif proto_comp_state == mcdata.PROTO_COMP_OFF:
            packet_data = bbuff.recv(datautils.unpack(MC_VARINT, bbuff))
        else:
            return None

        pbuff = utils.BoundBuffer(packet_data)
        # Ident
        self.__ident[2] = datautils.unpack(MC_VARINT, pbuff)
        self.__hashed_ident = tuple(self.__ident)
        # Payload
        for dtype, name in mcdata.hashed_structs[self.__hashed_ident]:
            self.data[name] = datautils.unpack(dtype, pbuff)
            # Extension
        if self.__hashed_ident in hashed_extensions:
            hashed_extensions[self.__hashed_ident].decode_extra(self, pbuff)
        return self
コード例 #5
0
 def decode_extra(packet, bbuff):
     packet.data['entries'] = [
         [
             datautils.unpack(MC_STRING, bbuff),
             datautils.unpack(MC_VARINT, bbuff)
         ] for _ in range(datautils.unpack(MC_VARINT, bbuff))]
     return packet
コード例 #6
0
ファイル: mcpacket.py プロジェクト: micropsi-industries/spock
	def decode(self, bbuff, proto_comp_state):
		self.data = {}
		if proto_comp_state == mcdata.PROTO_COMP_ON:
			packet_length = datautils.unpack(MC_VARINT, bbuff)
			start = bbuff.tell()
			data_length = datautils.unpack(MC_VARINT, bbuff)
			packet_data = bbuff.recv(packet_length-(bbuff.tell()-start))
			if data_length:
				packet_data = zlib.decompress(packet_data, zlib.MAX_WBITS)
		elif proto_comp_state == mcdata.PROTO_COMP_OFF:
			packet_data = bbuff.recv(datautils.unpack(MC_VARINT, bbuff))
		else:
			return None

		pbuff = utils.BoundBuffer(packet_data)
		try:
			#Ident
			self.__ident[2] = datautils.unpack(MC_VARINT, pbuff)
			self.ident = tuple(self.__ident)
			self.str_ident = mcdata.packet_ident2str[self.ident]
			#Payload
			for dtype, name in mcdata.hashed_structs[self.ident]:
				self.data[name] = datautils.unpack(dtype, pbuff)
				#Extension
			if self.ident in hashed_extensions:
				hashed_extensions[self.ident].decode_extra(self, pbuff)
			#Not technically an underflow, but we want to do the same thing
			if pbuff.flush():
				raise utils.BufferUnderflowException
		except utils.BufferUnderflowException:
			print('Packet decode failed')
			print('Failed packet ident is probably:', self.str_ident)
			return None
		return self
コード例 #7
0
ファイル: mcpacket.py プロジェクト: OvercastNetwork/spock
    def decode(self, bbuff):
        self.data = {}
        self.length = datautils.unpack(MC_VARINT, bbuff)
        encoded = bbuff.recv(self.length)
        try:
            pbuff = utils.BoundBuffer(encoded)

            #Ident
            self.id = datautils.unpack(MC_VARINT, pbuff)
            self.__hash_ident()

            #Payload
            for dtype, name in mcdata.hashed_structs[self.__hashed_ident]:
                try:
                    self.data[name] = datautils.unpack(dtype, pbuff)
                except BufferUnderflowException:
                    raise Exception("Failed to parse field {0}:{1} from packet {2}".format(name, dtype, repr(self)))

            #Extension
            if self.__hashed_ident in hashed_extensions:
                hashed_extensions[self.__hashed_ident].decode_extra(self, pbuff)

            return self

        except BufferUnderflowException:
            raise Exception("Failed to parse packet: ", repr(self))
コード例 #8
0
ファイル: mcpacket.py プロジェクト: gabrielsalvador/spock
    def decode(self, bbuff, proto_comp_state):
        self.data = {}
        if proto_comp_state == mcdata.PROTO_COMP_ON:
            packet_length = datautils.unpack(MC_VARINT, bbuff)
            start = bbuff.tell()
            data_length = datautils.unpack(MC_VARINT, bbuff)
            packet_data = bbuff.recv(packet_length - (bbuff.tell() - start))
            if data_length:
                packet_data = zlib.decompress(packet_data, zlib.MAX_WBITS)
        elif proto_comp_state == mcdata.PROTO_COMP_OFF:
            packet_data = bbuff.recv(datautils.unpack(MC_VARINT, bbuff))
        else:
            return None

        pbuff = utils.BoundBuffer(packet_data)
        try:
            #Ident
            self.__ident[2] = datautils.unpack(MC_VARINT, pbuff)
            self.ident = tuple(self.__ident)
            self.str_ident = mcdata.packet_ident2str[self.ident]
            #Payload
            for dtype, name in mcdata.hashed_structs[self.ident]:
                self.data[name] = datautils.unpack(dtype, pbuff)
            #Extension
            if self.ident in hashed_extensions:
                hashed_extensions[self.ident].decode_extra(self, pbuff)
            #Not technically an underflow, but we want to do the same thing
            if pbuff.flush():
                raise utils.BufferUnderflowException
        except utils.BufferUnderflowException:
            print('Packet decode failed')
            print('Failed packet ident is probably:', self.str_ident)
            return None
        return self
コード例 #9
0
	def decode_extra(packet, bbuff):
		packet.data['blocks'] = [
			[datautils.unpack('byte', bbuff) for j in range(3)]
		for i in range(datautils.unpack('int', bbuff))]
		packet.data['player_x'] = datautils.unpack('float', bbuff)
		packet.data['player_y'] = datautils.unpack('float', bbuff)
		packet.data['player_z'] = datautils.unpack('float', bbuff)
		return packet
コード例 #10
0
 def decode_extra(packet, bbuff):
     packet.data['blocks'] = [[
         datautils.unpack(MC_BYTE, bbuff) for j in range(3)
     ] for i in range(datautils.unpack(MC_INT, bbuff))]
     packet.data['player_x'] = datautils.unpack(MC_FLOAT, bbuff)
     packet.data['player_y'] = datautils.unpack(MC_FLOAT, bbuff)
     packet.data['player_z'] = datautils.unpack(MC_FLOAT, bbuff)
     return packet
コード例 #11
0
 def decode_extra(packet, bbuff):
     packet.data['blocks'] = [
         [datautils.unpack(MC_BYTE, bbuff) for j in range(3)]
     for i in range(datautils.unpack(MC_INT, bbuff))]
     packet.data['player_x'] = datautils.unpack(MC_FLOAT, bbuff)
     packet.data['player_y'] = datautils.unpack(MC_FLOAT, bbuff)
     packet.data['player_z'] = datautils.unpack(MC_FLOAT, bbuff)
     return packet
コード例 #12
0
 def decode_extra(packet, bbuff):
     if packet.data['event'] == mcdata.CE_END_COMBAT:
         packet.data['duration'] = datautils.unpack(MC_VARINT, bbuff)
         packet.data['eid'] = datautils.unpack(MC_INT, bbuff)
     if packet.data['event'] == mcdata.CE_ENTITY_DEAD:
         packet.data['player_id'] = datautils.unpack(MC_VARINT, bbuff)
         packet.data['eid'] = datautils.unpack(MC_INT, bbuff)
         packet.data['message'] = datautils.unpack(MC_STRING, bbuff)
     return packet
コード例 #13
0
 def decode_extra(packet, bbuff):
     act = packet.data['action']
     if act == mcdata.TL_TITLE or act == mcdata.TL_SUBTITLE:
         packet.data['text'] = datautils.unpack(MC_CHAT, bbuff)
     if act == mcdata.TL_TIMES:
         packet.data['fade_in'] = datautils.unpack(MC_INT, bbuff)
         packet.data['stay'] = datautils.unpack(MC_INT, bbuff)
         packet.data['fade_out'] = datautils.unpack(MC_INT, bbuff)
     return packet
コード例 #14
0
	def decode_extra(packet, bbuff):
		data = bbuff.recv(datautils.unpack('short', bbuff))
		data = utils.BoundBuffer(zlib.decompress(data, 16+zlib.MAX_WBITS))
		assert(datautils.unpack('byte', data) == nbt.TAG_COMPOUND)
		name = nbt.TAG_String(buffer = data)
		nbt_data = nbt.TAG_Compound(buffer = data)
		nbt_data.name = name
		packet.data['nbt'] = nbt_data
		return packet
コード例 #15
0
 def decode_extra(packet, bbuff):
     act = packet.data['action']
     if act == mcdata.TL_TITLE or act == mcdata.TL_SUBTITLE:
         packet.data['text'] = datautils.unpack(MC_CHAT, bbuff)
     if act == mcdata.TL_TIMES:
         packet.data['fade_in'] = datautils.unpack(MC_INT, bbuff)
         packet.data['stay'] = datautils.unpack(MC_INT, bbuff)
         packet.data['fade_out'] = datautils.unpack(MC_INT, bbuff)
     return packet
コード例 #16
0
 def decode_extra(packet, bbuff):
     data = bbuff.recv(datautils.unpack(MC_SHORT, bbuff))
     data = utils.BoundBuffer(zlib.decompress(data, 16+zlib.MAX_WBITS))
     assert(datautils.unpack(MC_BYTE, data) == nbt.TAG_COMPOUND)
     name = nbt.TAG_String(buffer = data)
     nbt_data = nbt.TAG_Compound(buffer = data)
     nbt_data.name = name
     packet.data['nbt'] = nbt_data
     return packet
コード例 #17
0
 def decode_extra(packet, bbuff):
     if packet.data['event'] == mcdata.CE_END_COMBAT:
         packet.data['duration'] = datautils.unpack(MC_VARINT, bbuff)
         packet.data['eid'] = datautils.unpack(MC_INT, bbuff)
     if packet.data['event'] == mcdata.CE_ENTITY_DEAD:
         packet.data['player_id'] = datautils.unpack(MC_VARINT, bbuff)
         packet.data['eid'] = datautils.unpack(MC_INT, bbuff)
         packet.data['message'] = datautils.unpack(MC_STRING, bbuff)
     return packet
コード例 #18
0
ファイル: mcpacket_extensions.py プロジェクト: JonnyD/spock
	def decode_extra(self, packet, bbuff):
		if packet.data['mode'] == 0 or packet.data['mode'] == 2:
			packet.data['display_name'] = unpack(bbuff, 'string')
			packet.data['team_prefix'] = unpack(bbuff, 'string')
			packet.data['team_suffix'] = unpack(bbuff, 'string')
		if packet.data['mode'] == 0 or packet.data['mode'] == 3 or packet.data['mode'] == 4:
			packet.data['player_count'] = count = unpack(bbuff, 'short')
			packet.data['players'] = []
			for i in xrange(count):
				packet.data['players'].append(unpack(bbuff, 'string'))
コード例 #19
0
 def decode_extra(packet, bbuff):
     sky_light = datautils.unpack(MC_BOOL, bbuff)
     count = datautils.unpack(MC_VARINT, bbuff)
     packet.data['sky_light'] = sky_light
     packet.data['metadata'] = [{
         'chunk_x': datautils.unpack(MC_INT, bbuff),
         'chunk_z': datautils.unpack(MC_INT, bbuff),
         'primary_bitmap': datautils.unpack(MC_USHORT, bbuff),
     } for i in range(count)]
     packet.data['data'] = bbuff.flush()
     return packet
コード例 #20
0
 def decode_extra(packet, bbuff):
     packet.data['blocks'] = []
     for i in range(datautils.unpack(MC_VARINT, bbuff)):
         data = datautils.unpack(MC_USHORT, bbuff)
         packet.data['blocks'].append({
             'y': data&0xFF,
             'z': (data>>8)&0xF,
             'x': (data>>12)&0xF,
             'block_data': datautils.unpack(MC_VARINT, bbuff),
         })
     return packet
コード例 #21
0
ファイル: mcpacket_extensions.py プロジェクト: JonnyD/spock
	def decode_extra(self, packet, bbuff):
		packet.data["data"] = bbuff.recv(packet.data['data_size'])
		
		packet.data["bitmaps"] = []
		for i in range(packet.data['chunk_column_count']):
			d = {}
			d['x'] = unpack(bbuff, 'int')
			d['z'] = unpack(bbuff, 'int')
			d['primary_bitmap'] = unpack(bbuff, 'short')
			d['secondary_bitmap'] = unpack(bbuff, 'short')
			packet.data["bitmaps"].append(d)
		
		del packet.data["data_size"]
コード例 #22
0
ファイル: mcpacket.py プロジェクト: pickardjoe/spock
	def decode(self, bbuff):
		self.data = {}
		pbuff = utils.BoundBuffer(bbuff.recv(datautils.unpack('varint', bbuff)))
		#Ident
		self.__ident[2] = datautils.unpack('ubyte', pbuff)
		self.__hashed_ident = tuple(self.__ident)
		#Payload
		for dtype, name in mcdata.hashed_structs[self.__hashed_ident]:
			self.data[name] = datautils.unpack(dtype, pbuff)
		#Extension
		if self.__hashed_ident in hashed_extensions:
			hashed_extensions[self.__hashed_ident].decode_extra(self, pbuff)
		return self
コード例 #23
0
ファイル: mcpacket.py プロジェクト: JonnyD/spock
	def decode(self, bbuff):
		#Ident
		self.ident = datautils.unpack(bbuff, 'ubyte')
		
		#print hex(self.ident)
		
		#Payload
		for dtype, name in mcdata.structs[self.ident][self.direction]:
			self.data[name] = datautils.unpack(bbuff, dtype)
		
		#Extension
		if self.ident in mcpacket_extensions.extensions:
			mcpacket_extensions.extensions[self.ident].decode_extra(self, bbuff)
コード例 #24
0
 def decode_extra(packet, bbuff):
     packet.data['blocks'] = []
     for i in range(datautils.unpack(MC_VARINT, bbuff)):
         data = datautils.unpack(MC_USHORT, bbuff)
         packet.data['blocks'].append({
             'y':
             data & 0xFF,
             'z': (data >> 8) & 0xF,
             'x': (data >> 12) & 0xF,
             'block_data':
             datautils.unpack(MC_VARINT, bbuff),
         })
     return packet
コード例 #25
0
 def decode_extra(packet, bbuff):
     count = datautils.unpack(MC_SHORT, bbuff)
     assert(datautils.unpack(MC_INT, bbuff) == 4*count)
     packet.data['blocks'] = []
     for i in range(count):
         data = datautils.unpack(MC_UINT, bbuff)
         packet.data['blocks'].append({
             'metadata': (data     )&0xF,
             'block_id':    (data>> 4)&0xFFF,
             'y':        (data>>16)&0xFF,
             'z':        (data>>24)&0xF,
             'x':        (data>>28)&0xF,
         })
     return packet
コード例 #26
0
	def decode_extra(packet, bbuff):
		count = datautils.unpack('short', bbuff)
		assert(datautils.unpack('int', bbuff) == 4*count)
		packet.data['blocks'] = []
		for i in range(count):
			data = datautils.unpack('uint', bbuff)
			packet.data['blocks'].append({
				'metadata': (data	 )&0xF,
				'block_id':	(data>> 4)&0xFFF,
				'y':		(data>>16)&0xFF,
				'z':		(data>>24)&0xF,
				'x':		(data>>28)&0xF,
			})
		return packet
コード例 #27
0
 def decode_extra(packet, bbuff):
     sky_light = datautils.unpack(MC_BOOL, bbuff)
     count = datautils.unpack(MC_VARINT, bbuff)
     packet.data['sky_light'] = sky_light
     packet.data['metadata'] = [{
         'chunk_x':
         datautils.unpack(MC_INT, bbuff),
         'chunk_z':
         datautils.unpack(MC_INT, bbuff),
         'primary_bitmap':
         datautils.unpack(MC_USHORT, bbuff),
     } for i in range(count)]
     packet.data['data'] = bbuff.flush()
     return packet
コード例 #28
0
	def decode_extra(packet, bbuff):
		assert(datautils.unpack(MC_BYTE, bbuff) == nbt.TAG_COMPOUND)
		name = nbt.TAG_String(buffer = bbuff)
		nbt_data = nbt.TAG_Compound(buffer = bbuff)
		nbt_data.name = name
		packet.data['nbt'] = nbt_data
		return packet
コード例 #29
0
 def decode_extra(packet, bbuff):
     assert (datautils.unpack(MC_BYTE, bbuff) == nbt.TAG_COMPOUND)
     name = nbt.TAG_String(buffer=bbuff)
     nbt_data = nbt.TAG_Compound(buffer=bbuff)
     nbt_data.name = name
     packet.data['nbt'] = nbt_data
     return packet
コード例 #30
0
 def decode_extra(packet, bbuff):
     tag_type = datautils.unpack(MC_BYTE, bbuff)
     if tag_type == nbt.TAG_COMPOUND:
         name = nbt.TAG_String(buffer=bbuff).value
         nbt_data = nbt.TAG_Compound(buffer=bbuff)
         nbt_data.name = name
         packet.data['nbt'] = nbt_data
     else:
         assert (tag_type == nbt.TAG_END)
         packet.data['nbt'] = None
     return packet
コード例 #31
0
 def decode_extra(packet, bbuff):
     tag_type = datautils.unpack(MC_BYTE, bbuff)
     if tag_type == nbt.TAG_COMPOUND:
         name = nbt.TAG_String(buffer = bbuff).value
         nbt_data = nbt.TAG_Compound(buffer = bbuff)
         nbt_data.name = name
         packet.data['nbt'] = nbt_data
     else:
         assert(tag_type == nbt.TAG_END)
         packet.data['nbt'] = None
     return packet
コード例 #32
0
 def decode_extra(packet, bbuff):
     packet.data['icons'] = []
     for i in range(datautils.unpack(MC_VARINT, bbuff)):
         byte = datautils.unpack(MC_UBYTE, bbuff)
         packet.data['icons'].append({
             'direction': byte>>8,
             'type': byte&0x0F,
             'x': datautils.unpack(MC_BYTE, bbuff),
             'y': datautils.unpack(MC_BYTE, bbuff),
         })
     packet.data['columns'] = datautils.unpack(MC_BYTE, bbuff)
     if packet.data['columns']:
         packet.data['rows'] = datautils.unpack(MC_BYTE, bbuff)
         packet.data['x'] = datautils.unpack(MC_BYTE, bbuff)
         packet.data['y'] = datautils.unpack(MC_BYTE, bbuff)
         packet.data['data'] = bbuff.recv(datautils.unpack(MC_VARINT, bbuff))
     return packet
コード例 #33
0
ファイル: mcpacket_extensions.py プロジェクト: JonnyD/spock
	def decode_extra(self, packet, bbuff):
		packet.data["blocks"] = []
		for i in range(packet.data['record_count']):
			data = unpack(bbuff, 'uint')
			block = {
				'metadata': (data	 )  & 0xF,
				'type':	 (data >> 4)  & 0xFFF,
				'y':		(data >> 16) & 0xFF,
				'z':		(data >> 24) & 0xF,
				'x':		(data >> 28) & 0xF}
			packet.data["blocks"].append(block)
		del packet.data["data_size"]
コード例 #34
0
ファイル: mcpacket_extensions.py プロジェクト: JonnyD/spock
	def decode_extra(self, packet, bbuff):
		records = unpack_array(bbuff, 'byte', packet.data['record_count']*3)
		i = 0
		packet.data["blocks"] = []
		while i < packet.data['record_count']*3:
			packet.data["blocks"].append(dict(zip(('x','y','z'), records[i:i+3])))
			i+=3
		
		del packet.data["record_count"]
		
		for i in range(3):
			packet.data["offset_%d" % i] = unpack(bbuff, 'float')
コード例 #35
0
 def decode_extra(packet, bbuff):
     act = packet.data['action']
     if act == mcdata.WB_SET_SIZE:
         packet.data['radius'] = datautils.unpack(MC_VARINT, bbuff)
     if act == mcdata.WB_SET_CENTER or act == mcdata.WB_INITIALIZE:
         packet.data['x'] = datautils.unpack(MC_DOUBLE, bbuff)
         packet.data['z'] = datautils.unpack(MC_DOUBLE, bbuff)
     if act == mcdata.WB_LERP_SIZE or act == mcdata.WB_INITIALIZE:
         packet.data['old_radius'] = datautils.unpack(MC_DOUBLE, bbuff)
         packet.data['new_radius'] = datautils.unpack(MC_DOUBLE, bbuff)
         packet.data['speed'] = datautils.unpack(MC_VARLONG, bbuff)
     if act == mcdata.WB_INITIALIZE:
         packet.data['port_tele_bound'] = datautils.unpack(MC_VARINT, bbuff)
     if act == mcdata.WB_SET_WARN_TIME or act == mcdata.WB_INITIALIZE:
         packet.data['warn_time'] = datautils.unpack(MC_VARINT, bbuff)
     if act == mcdata.WB_SET_WARN_BLOCKS or act == mcdata.WB_INITIALIZE:
         packet.data['warn_blocks'] = datautils.unpack(MC_VARINT, bbuff)
     return packet
コード例 #36
0
 def decode_extra(packet, bbuff):
     act = packet.data['action']
     if act == mcdata.WB_SET_SIZE:
         packet.data['radius'] = datautils.unpack(MC_VARINT, bbuff)
     if act == mcdata.WB_SET_CENTER or act == mcdata.WB_INITIALIZE:
         packet.data['x'] = datautils.unpack(MC_DOUBLE, bbuff)
         packet.data['z'] = datautils.unpack(MC_DOUBLE, bbuff)
     if act == mcdata.WB_LERP_SIZE or act == mcdata.WB_INITIALIZE:
         packet.data['old_radius'] = datautils.unpack(MC_DOUBLE, bbuff)
         packet.data['new_radius'] = datautils.unpack(MC_DOUBLE, bbuff)
         packet.data['speed'] = datautils.unpack(MC_VARLONG, bbuff)
     if act == mcdata.WB_INITIALIZE:
         packet.data['port_tele_bound'] = datautils.unpack(MC_VARINT, bbuff)
     if act == mcdata.WB_SET_WARN_TIME or act == mcdata.WB_INITIALIZE:
         packet.data['warn_time'] = datautils.unpack(MC_VARINT, bbuff)
     if act == mcdata.WB_SET_WARN_BLOCKS or act == mcdata.WB_INITIALIZE:
         packet.data['warn_blocks'] = datautils.unpack(MC_VARINT, bbuff)
     return packet
コード例 #37
0
 def decode_extra(packet, bbuff):
     packet.data['icons'] = []
     for i in range(datautils.unpack(MC_VARINT, bbuff)):
         byte = datautils.unpack(MC_UBYTE, bbuff)
         packet.data['icons'].append({
             'direction': byte >> 8,
             'type': byte & 0x0F,
             'x': datautils.unpack(MC_BYTE, bbuff),
             'y': datautils.unpack(MC_BYTE, bbuff),
         })
     packet.data['columns'] = datautils.unpack(MC_BYTE, bbuff)
     if packet.data['columns']:
         packet.data['rows'] = datautils.unpack(MC_BYTE, bbuff)
         packet.data['x'] = datautils.unpack(MC_BYTE, bbuff)
         packet.data['y'] = datautils.unpack(MC_BYTE, bbuff)
         packet.data['data'] = bbuff.recv(datautils.unpack(
             MC_VARINT, bbuff))
     return packet
コード例 #38
0
 def decode_extra(packet, bbuff):
     act = packet.data['action']
     if act in [mcdata.TE_CREATE_TEAM, mcdata.TE_UPDATE_TEAM]:
         packet.data['display_name'] = datautils.unpack(MC_STRING, bbuff)
         packet.data['team_prefix'] = datautils.unpack(MC_STRING, bbuff)
         packet.data['team_suffix'] = datautils.unpack(MC_STRING, bbuff)
         packet.data['friendly_fire'] = datautils.unpack(MC_BYTE, bbuff)
         packet.data['name_visibility'] = datautils.unpack(MC_STRING, bbuff)
         packet.data['color'] = datautils.unpack(MC_BYTE, bbuff)
     if act in [mcdata.TE_CREATE_TEAM, mcdata.TE_ADDPLY_TEAM,
                mcdata.TE_REMPLY_TEAM]:
         packet.data['players'] = [
             datautils.unpack(MC_STRING, bbuff)
             for _ in range(datautils.unpack(MC_VARINT, bbuff))]
     return packet
コード例 #39
0
 def decode_extra(packet, bbuff):
     count = datautils.unpack(MC_SHORT, bbuff)
     size = datautils.unpack(MC_INT, bbuff)
     packet.data['sky_light'] = datautils.unpack(MC_BOOL, bbuff)
     packet.data['data'] = zlib.decompress(bbuff.recv(size))
     packet.data['metadata'] = [{
         'chunk_x': datautils.unpack(MC_INT, bbuff),
         'chunk_z': datautils.unpack(MC_INT, bbuff),
         'primary_bitmap': datautils.unpack(MC_USHORT, bbuff),
         'add_bitmap': datautils.unpack(MC_USHORT, bbuff),
     } for i in range(count)]
     return packet
コード例 #40
0
	def decode_extra(packet, bbuff):
		count = datautils.unpack('short', bbuff)
		size = datautils.unpack('int', bbuff)
		packet.data['sky_light'] = datautils.unpack('bool', bbuff)
		packet.data['data'] = zlib.decompress(bbuff.recv(size))
		packet.data['metadata'] = [{
			'chunk_x': datautils.unpack('int', bbuff),
			'chunk_z': datautils.unpack('int', bbuff),
			'primary_bitmap': datautils.unpack('ushort', bbuff),
			'add_bitmap': datautils.unpack('ushort', bbuff),
		} for i in range(count)]
		return packet
コード例 #41
0
 def decode_extra(packet, bbuff):
     act = packet.data['action']
     if act == mcdata.TE_CREATE_TEAM or act == mcdata.TE_UPDATE_TEAM:
         packet.data['display_name'] = datautils.unpack(MC_STRING, bbuff)
         packet.data['team_prefix'] = datautils.unpack(MC_STRING, bbuff)
         packet.data['team_suffix'] = datautils.unpack(MC_STRING, bbuff)
         packet.data['friendly_fire'] = datautils.unpack(MC_BYTE, bbuff)
         packet.data['name_visibility'] = datautils.unpack(MC_STRING, bbuff)
         packet.data['color'] = datautils.unpack(MC_BYTE, bbuff)
     if (act == mcdata.TE_CREATE_TEAM or act == mcdata.TE_ADDPLY_TEAM
             or act == mcdata.TE_REMPLY_TEAM):
         packet.data['players'] = [
             datautils.unpack(MC_STRING, bbuff)
             for i in range(datautils.unpack(MC_VARINT, bbuff))
         ]
     return packet
コード例 #42
0
ファイル: mcpacket_extensions.py プロジェクト: nheir/spock
	def decode_extra(packet, bbuff):
		action = packet.data['action']
		if action == 0 or action == 2:
			packet.data['display_name'] = datautils.unpack(MC_STRING, bbuff)
			packet.data['team_prefix'] = datautils.unpack(MC_STRING, bbuff)
			packet.data['team_suffix'] = datautils.unpack(MC_STRING, bbuff)
			packet.data['friendly_fire'] = datautils.unpack(MC_BYTE, bbuff)
			packet.data['name_visibility'] = datautils.unpack(MC_STRING, bbuff)
		if action == 0 or action == 3 or action == 4:
			packet.data['players'] = [
				datautils.unpack(MC_STRING, bbuff)
			for i in range(datautils.unpack(MC_VARINT, bbuff))]
		return packet
コード例 #43
0
 def decode_extra(packet, bbuff):
     action = packet.data['action']
     if action == 0 or action == 2:
         packet.data['display_name'] = datautils.unpack(MC_STRING, bbuff)
         packet.data['team_prefix'] = datautils.unpack(MC_STRING, bbuff)
         packet.data['team_suffix'] = datautils.unpack(MC_STRING, bbuff)
         packet.data['friendly_fire'] = datautils.unpack(MC_BYTE, bbuff)
         packet.data['name_visibility'] = datautils.unpack(MC_STRING, bbuff)
     if action == 0 or action == 3 or action == 4:
         packet.data['players'] = [
             datautils.unpack(MC_STRING, bbuff)
             for i in range(datautils.unpack(MC_VARINT, bbuff))
         ]
     return packet
コード例 #44
0
 def decode_extra(packet, bbuff):
     mode = packet.data['mode']
     if mode == 0 or mode == 2:
         packet.data['display_name'] = datautils.unpack(MC_STRING, bbuff)
         packet.data['team_prefix'] = datautils.unpack(MC_STRING, bbuff)
         packet.data['team_suffix'] = datautils.unpack(MC_STRING, bbuff)
         packet.data['friendly_fire'] = datautils.unpack(MC_BYTE, bbuff)
     if mode == 0 or mode == 3 or mode == 4:
         packet.data['players'] = [
             datautils.unpack(MC_STRING, bbuff)
         for i in range(datautils.unpack(MC_SHORT, bbuff))]
     return packet
コード例 #45
0
	def decode_extra(packet, bbuff):
		mode = packet.data['mode']
		if mode == 0 or mode == 2:
			packet.data['display_name'] = datautils.unpack('string', bbuff)
			packet.data['team_prefix'] = datautils.unpack('string', bbuff)
			packet.data['team_suffix'] = datautils.unpack('string', bbuff)
			packet.data['friendly_fire'] = datautils.unpack('byte', bbuff)
		if mode == 0 or mode == 3 or mode == 4:
			packet.data['players'] = [
				datautils.unpack('string', bbuff)
			for i in range(datautils.unpack('short', bbuff))]
		return packet
コード例 #46
0
 def decode_extra(packet, bbuff):
     packet.data['properties'] = []
     for i in range(datautils.unpack(MC_INT, bbuff)):
         prop = {
             'key': datautils.unpack(MC_STRING, bbuff),
             'value': datautils.unpack(MC_DOUBLE, bbuff),
             'modifiers': [],
         }
         for j in range(datautils.unpack(MC_VARINT, bbuff)):
             prop['modifiers'].append({
                 'uuid':
                 datautils.unpack(MC_UUID, bbuff),
                 'amount':
                 datautils.unpack(MC_DOUBLE, bbuff),
                 'operation':
                 datautils.unpack(MC_BYTE, bbuff),
             })
         packet.data['properties'].append(prop)
     return packet
コード例 #47
0
 def decode_extra(packet, bbuff):
     packet.data['properties'] = []
     for i in range(datautils.unpack(MC_INT, bbuff)):
         prop = {
             'key': datautils.unpack(MC_STRING, bbuff),
             'value': datautils.unpack(MC_DOUBLE, bbuff),
             'modifiers': [],
         }
         for j in range(datautils.unpack(MC_SHORT, bbuff)):
             a, b = struct.unpack('>QQ', bbuff.recv(16))
             prop['modifiers'].append({
                 'uuid': (a<<64)|b,
                 'amount': datautils.unpack(MC_DOUBLE, bbuff),
                 'operation': datautils.unpack(MC_BYTE, bbuff),
             })
         packet.data['properties'].append(prop)
     return packet
コード例 #48
0
 def decode_extra(packet, bbuff):
     length = datautils.unpack(MC_VARINT, bbuff)
     packet.data['shared_secret'] = bbuff.recv(length)
     length = datautils.unpack(MC_VARINT, bbuff)
     packet.data['verify_token'] = bbuff.recv(length)
     return packet
コード例 #49
0
 def decode_extra(packet, bbuff):
     if packet.data['action'] == mcdata.US_UPDATE_SCORE:
         packet.data['value'] = datautils.unpack(MC_VARINT, bbuff)
     return packet
コード例 #50
0
 def decode_extra(packet, bbuff):
     packet.data['matches'] = [
         datautils.unpack(MC_STRING, bbuff)
         for i in range(datautils.unpack(MC_VARINT, bbuff))
     ]
     return packet
コード例 #51
0
 def decode_extra(packet, bbuff):
     act = packet.data['action']
     packet.data['player_list'] = []
     for i in range(datautils.unpack(MC_VARINT, bbuff)):
         item = {'uuid': datautils.unpack(MC_UUID, bbuff)}
         if act == mcdata.PL_ADD_PLAYER:
             item['name'] = datautils.unpack(MC_STRING, bbuff)
             item['properties'] = []
             for i in range(datautils.unpack(MC_VARINT, bbuff)):
                 prop = {
                     'name': datautils.unpack(MC_STRING, bbuff),
                     'value': datautils.unpack(MC_STRING, bbuff),
                     'signed': datautils.unpack(MC_BOOL, bbuff),
                 }
                 if prop['signed']:
                     prop['signature'] = datautils.unpack(MC_STRING, bbuff)
                 item['properties'].append(prop)
         if act == mcdata.PL_ADD_PLAYER or act == mcdata.PL_UPDATE_GAMEMODE:
             item['gamemode'] = datautils.unpack(MC_VARINT, bbuff)
         if act == mcdata.PL_ADD_PLAYER or act == mcdata.PL_UPDATE_LATENCY:
             item['ping'] = datautils.unpack(MC_VARINT, bbuff)
         if act == mcdata.PL_ADD_PLAYER or act == mcdata.PL_UPDATE_DISPLAY:
             item['has_display'] = datautils.unpack(MC_BOOL, bbuff)
             if item['has_display']:
                 item['display_name'] = datautils.unpack(MC_CHAT, bbuff)
         packet.data['player_list'].append(item)
コード例 #52
0
 def decode_extra(packet, bbuff):
     if packet.data['obj_data']:
         packet.data['speed_x'] = datautils.unpack(MC_SHORT, bbuff)
         packet.data['speed_y'] = datautils.unpack(MC_SHORT, bbuff)
         packet.data['speed_z'] = datautils.unpack(MC_SHORT, bbuff)
     return packet
コード例 #53
0
 def decode_extra(packet, bbuff):
     length = datautils.unpack(MC_VARINT, bbuff)
     packet.data['public_key'] = bbuff.recv(length)
     length = datautils.unpack(MC_VARINT, bbuff)
     packet.data['verify_token'] = bbuff.recv(length)
     return packet
コード例 #54
0
 def decode_extra(packet, bbuff):
     if packet.data['action'] == mcdata.UE_INTERACT_AT:
         packet.data['target_x'] = datautils.unpack(MC_FLOAT, bbuff)
         packet.data['target_y'] = datautils.unpack(MC_FLOAT, bbuff)
         packet.data['target_z'] = datautils.unpack(MC_FLOAT, bbuff)
     return packet
コード例 #55
0
 def decode_extra(packet, bbuff):
     if packet.data['has_position'] == True:
         packet.data['block_loc'] = datautils.unpack(MC_POSITION, bbuff)
     return packet
コード例 #56
0
 def decode_extra(packet, bbuff):
     act = packet.data['action']
     if act == mcdata.SO_CREATE_BOARD or act == mcdata.SO_UPDATE_BOARD:
         packet.data['obj_val'] = datautils.unpack(MC_STRING, bbuff)
         packet.data['type'] = datautils.unpack(MC_STRING, bbuff)
     return packet
コード例 #57
0
 def decode_extra(packet, bbuff):
     count = datautils.unpack(MC_VARINT, bbuff)
     packet.data['eids'] = [
         datautils.unpack(MC_VARINT, bbuff) for i in range(count)
     ]
     return packet
コード例 #58
0
 def decode_extra(packet, bbuff):
     packet.data['entries'] = [[
         datautils.unpack(MC_STRING, bbuff),
         datautils.unpack(MC_VARINT, bbuff)
     ] for i in range(datautils.unpack(MC_VARINT, bbuff))]
     return packet