Add living entity packets
This commit is contained in:
		@@ -307,3 +307,58 @@ class EntityMetadataPacket(Packet):
 | 
			
		||||
            entry = Entry.read(file_object)
 | 
			
		||||
            if not entry: break
 | 
			
		||||
            self.metadata.append(entry)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class SpawnLivingEntityPacket(Packet):
 | 
			
		||||
    # Sent by the server when a living entity is spawned
 | 
			
		||||
    # https://wiki.vg/Protocol#Spawn_Entity
 | 
			
		||||
 | 
			
		||||
    id = 0x02
 | 
			
		||||
    packet_name = 'spawn living entity'
 | 
			
		||||
 | 
			
		||||
    definition = [
 | 
			
		||||
        {'entity_id': VarInt},
 | 
			
		||||
        {'entity_uuid': UUID},
 | 
			
		||||
        {'type': VarInt},
 | 
			
		||||
        {'x': Double},
 | 
			
		||||
        {'y': Double},
 | 
			
		||||
        {'z': Double},
 | 
			
		||||
        {'yaw': Angle},
 | 
			
		||||
        {'pitch': Angle},
 | 
			
		||||
        {'head_pitch': Angle},
 | 
			
		||||
        {'x_velocity': Short},
 | 
			
		||||
        {'y_velocity': Short},
 | 
			
		||||
        {'z_velocity': Short},
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
class EntityPositionPacket(Packet):
 | 
			
		||||
    # Sent by the server when an entity moves less then 8 blocks
 | 
			
		||||
    # https://wiki.vg/Protocol#Spawn_Entity
 | 
			
		||||
 | 
			
		||||
    id = 0x27
 | 
			
		||||
    packet_name = 'entity position'
 | 
			
		||||
 | 
			
		||||
    definition = [
 | 
			
		||||
        {'entity_id': VarInt},
 | 
			
		||||
        {'delta_x': Short},
 | 
			
		||||
        {'delta_y': Short},
 | 
			
		||||
        {'delta_z': Short},
 | 
			
		||||
        {'on_ground': Boolean},
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
class EntityPositionRotationPacket(Packet):
 | 
			
		||||
    # Sent by the server when an entity rotates and moves
 | 
			
		||||
    # https://wiki.vg/Protocol#Entity_Position_and_Rotation
 | 
			
		||||
 | 
			
		||||
    id = 0x28
 | 
			
		||||
    packet_name = 'entity position and rotation'
 | 
			
		||||
 | 
			
		||||
    definition = [
 | 
			
		||||
        {'entity_id': VarInt},
 | 
			
		||||
        {'delta_x': Short},
 | 
			
		||||
        {'delta_y': Short},
 | 
			
		||||
        {'delta_z': Short},
 | 
			
		||||
        {'yaw': Angle},
 | 
			
		||||
        {'pitch': Angle},
 | 
			
		||||
        {'on_ground': Boolean},
 | 
			
		||||
    ]
 | 
			
		||||
 
 | 
			
		||||
@@ -40,10 +40,9 @@ class Nbt(Type):
 | 
			
		||||
    @staticmethod
 | 
			
		||||
    def read(file_object):
 | 
			
		||||
        type_id = Byte.read(file_object)
 | 
			
		||||
        if type_id == TAG_End:
 | 
			
		||||
            return None
 | 
			
		||||
        if type_id != TAG_Compound:
 | 
			
		||||
            raise Exception("Invalid NBT header")
 | 
			
		||||
            #raise Exception("Invalid NBT header")
 | 
			
		||||
            return None
 | 
			
		||||
        name = ShortPrefixedByteArray.read(file_object).decode('utf-8')
 | 
			
		||||
        a = Nbt.decode_tag(file_object, TAG_Compound)
 | 
			
		||||
        a['_name'] = name
 | 
			
		||||
@@ -119,10 +118,14 @@ class Slot(Type):
 | 
			
		||||
    @staticmethod
 | 
			
		||||
    def read(file_object):
 | 
			
		||||
        present = Boolean.read(file_object)
 | 
			
		||||
        item_id = VarInt.read(file_object) if present else None
 | 
			
		||||
        item_count = Byte.read(file_object) if present else None
 | 
			
		||||
        print('slot read', present, item_id, item_count)
 | 
			
		||||
        nbt = Nbt.read(file_object) if present else None
 | 
			
		||||
        if present:
 | 
			
		||||
            item_id = VarInt.read(file_object)
 | 
			
		||||
            item_count = Byte.read(file_object)
 | 
			
		||||
            nbt = Nbt.read(file_object)
 | 
			
		||||
        else:
 | 
			
		||||
            item_id = None
 | 
			
		||||
            item_count = None
 | 
			
		||||
            nbt = None
 | 
			
		||||
        return Slot(present, item_id, item_count, nbt)
 | 
			
		||||
 | 
			
		||||
    @staticmethod
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user