def write_fields(self, packet_buffer):
        VarInt.send(self.map_id, packet_buffer)
        Byte.send(self.scale, packet_buffer)
        if self.context.protocol_version >= 107:
            Boolean.send(self.is_tracking_position, packet_buffer)

        VarInt.send(len(self.icons), packet_buffer)
        for icon in self.icons:
            if self.context.protocol_version >= 373:
                VarInt.send(icon.type, packet_buffer)
            else:
                type_and_direction = (icon.type << 4) & 0xF0
                type_and_direction |= (icon.direction & 0xF)
                UnsignedByte.send(type_and_direction, packet_buffer)
            Byte.send(icon.location[0], packet_buffer)
            Byte.send(icon.location[1], packet_buffer)
            if self.context.protocol_version >= 373:
                UnsignedByte.send(icon.direction, packet_buffer)
            if self.context.protocol_version >= 364:
                Boolean.send(icon.display_name is not None, packet_buffer)
                if icon.display_name is not None:
                    String.send(icon.display_name, packet_buffer)

        UnsignedByte.send(self.width, packet_buffer)
        if self.width:
            UnsignedByte.send(self.height, packet_buffer)
            UnsignedByte.send(self.offset[0], packet_buffer)  # x
            UnsignedByte.send(self.offset[1], packet_buffer)  # z
            VarIntPrefixedByteArray.send(self.pixels, packet_buffer)
Exemple #2
0
 def write_fields(self, packet_buffer):
     VarInt.send(self.message_id, packet_buffer)
     successful = getattr(self, 'data', None) is not None
     successful = getattr(self, 'successful', successful)
     Boolean.send(successful, packet_buffer)
     if successful:
         TrailingByteArray.send(self.data, packet_buffer)
Exemple #3
0
    def write(self, socket, compression_threshold=None):
        packet_buffer = PacketBuffer()
        VarInt.send(self.id, packet_buffer)

        VarInt.send(self.map_id, packet_buffer)
        Byte.send(self.scale, packet_buffer)
        if self.context.protocol_version >= 107:
            Boolean.send(self.is_tracking_position, packet_buffer)

        VarInt.send(len(self.icons), packet_buffer)
        for icon in self.icons:
            type_and_direction = (icon.direction << 4) & 0xF0
            type_and_direction |= (icon.type & 0xF)
            UnsignedByte.send(type_and_direction, packet_buffer)
            Byte.send(icon.location[0], packet_buffer)
            Byte.send(icon.location[1], packet_buffer)

        UnsignedByte.send(self.width, packet_buffer)
        if self.width:
            UnsignedByte.send(self.height, packet_buffer)
            UnsignedByte.send(self.offset[0], packet_buffer)  # x
            UnsignedByte.send(self.offset[1], packet_buffer)  # z
            VarIntPrefixedByteArray.send(self.pixels, packet_buffer)

        self._write_buffer(socket, packet_buffer, compression_threshold)
Exemple #4
0
    def write_fields(self, packet_buffer):
        VarInt.send(self.map_id, packet_buffer)
        Byte.send(self.scale, packet_buffer)
        if self.context.protocol_version >= 107:
            Boolean.send(self.is_tracking_position, packet_buffer)

        VarInt.send(len(self.icons), packet_buffer)
        for icon in self.icons:
            if self.context.protocol_version >= 373:
                VarInt.send(icon.type, packet_buffer)
            else:
                type_and_direction = (icon.type << 4) & 0xF0
                type_and_direction |= (icon.direction & 0xF)
                UnsignedByte.send(type_and_direction, packet_buffer)
            Byte.send(icon.location[0], packet_buffer)
            Byte.send(icon.location[1], packet_buffer)
            if self.context.protocol_version >= 373:
                UnsignedByte.send(icon.direction, packet_buffer)
            if self.context.protocol_version >= 364:
                Boolean.send(icon.display_name is not None, packet_buffer)
                if icon.display_name is not None:
                    String.send(icon.display_name, packet_buffer)

        UnsignedByte.send(self.width, packet_buffer)
        if self.width:
            UnsignedByte.send(self.height, packet_buffer)
            UnsignedByte.send(self.offset[0], packet_buffer)  # x
            UnsignedByte.send(self.offset[1], packet_buffer)  # z
            VarIntPrefixedByteArray.send(self.pixels, packet_buffer)
Exemple #5
0
 def write_fields(self, packet_buffer):
     VarInt.send(self.message_id, packet_buffer)
     successful = getattr(self, "data", None) is not None
     successful = getattr(self, "successful", successful)
     Boolean.send(successful, packet_buffer)
     if successful:
         TrailingByteArray.send(self.data, packet_buffer)
Exemple #6
0
 def send(self, packet_buffer):
     String.send(self.name, packet_buffer)
     String.send(self.value, packet_buffer)
     if self.signature is not None:
         Boolean.send(True, packet_buffer)
         String.send(self.signature, packet_buffer)
     else:
         Boolean.send(False, packet_buffer)
 def write_fields(self, packet_buffer):
     VarInt.send(self.entity_id, packet_buffer)
     VarInt.send(int(self.type), packet_buffer)
     if self.type == self.Type.INTERACT_AT:
         Float.send(x, packet_buffer)
         Float.send(y, packet_buffer)
         Float.send(z, packet_buffer)
     if self.type == self.Type.INTERACT or self.type == self.Type.INTERACT_AT:
         VarInt.send(self.hand, packet_buffer)
     Boolean.send(self.sneaking, packet_buffer)
Exemple #8
0
 def write_fields(self, packet_buffer):
     if self.context.protocol_later_eq(351):
         VarInt.send(self.transaction_id, packet_buffer)
     String.send(self.text, packet_buffer)
     if self.context.protocol_earlier_eq(350):
         if self.context.protocol_later_eq(95):
             Boolean.send(self.assume_command, packet_buffer)
         Boolean.send(self.looked_at_block is not None, packet_buffer)
         if self.looked_at_block is not None:
             Position.send(self.looked_at_block, packet_buffer)
Exemple #9
0
 def read(self, file_object):
     self.transaction_id = VarInt.read(file_object) \
         if self.context.protocol_later_eq(351) else None
     self.text = String.read(file_object)
     if self.context.protocol_earlier_eq(350):
         self.assume_command = Boolean.read(file_object) \
             if self.context.protocol_later_eq(95) else None
         has_position = Boolean.read(file_object)
         if has_position:
             self.looked_at_block = Position.read(file_object)
Exemple #10
0
 def _send(self, packet_buffer):
     String.send(self.name, packet_buffer)
     VarInt.send(len(self.properties), packet_buffer)
     for property in self.properties:
         property.send(packet_buffer)
     VarInt.send(self.gamemode, packet_buffer)
     VarInt.send(self.ping, packet_buffer)
     if self.display_name is not None:
         Boolean.send(True, packet_buffer)
         String.send(self.display_name, packet_buffer)
     else:
         Boolean.send(False, packet_buffer)
Exemple #11
0
 def write_fields(self, packet_buffer):
     if self.context.protocol_later_eq(346):
         VarInt.send(self.transaction_id, packet_buffer)
         VarInt.send(self.start, packet_buffer)
         VarInt.send(self.length, packet_buffer)
     VarInt.send(len(self.matches), packet_buffer)
     for tabmatch in self.matches:
         String.send(tabmatch.match, packet_buffer)
         if self.context.protocol_later_eq(357):
             Boolean.send(tabmatch.tooltip is not None, packet_buffer)
             if tabmatch.tooltip is not None:
                 String.send(tabmatch.tooltip, packet_buffer)
Exemple #12
0
 def write_fields(self, packet_buffer):
     Integer.send(self.x, packet_buffer)
     Integer.send(self.z, packet_buffer)
     Boolean.send(self.full_chunk, packet_buffer)
     VarInt.send(self.bit_mask_y, packet_buffer)
     Nbt.send(self.heightmaps, packet_buffer)
     if self.full_chunk:
         for i in range(1024):
             Integer.send(self.biomes[i], packet_buffer)
     VarInt.send(len(self.data), packet_buffer)
     packet_buffer.send(self.data)
     VarInt.send(len(self.entities), packet_buffer)
     for e in self.entities:
         Nbt.send(e, packet_buffer)
Exemple #13
0
 def read(self, file_object):
     self.message_id = VarInt.read(file_object)
     self.successful = Boolean.read(file_object)
     if self.successful:
         self.data = TrailingByteArray.read(file_object)
     else:
         self.data = None
Exemple #14
0
    def read(self, file_object):
        self.map_id = VarInt.read(file_object)
        self.scale = Byte.read(file_object)

        if self.context.protocol_version >= 107:
            self.is_tracking_position = Boolean.read(file_object)
        else:
            self.is_tracking_position = True

        icon_count = VarInt.read(file_object)
        self.icons = []
        for i in range(icon_count):
            type, direction = divmod(UnsignedByte.read(file_object), 16)
            x = Byte.read(file_object)
            z = Byte.read(file_object)
            icon = MapPacket.MapIcon(type, direction, (x, z))
            self.icons.append(icon)
        self.width = UnsignedByte.read(file_object)
        if self.width:
            self.height = UnsignedByte.read(file_object)
            x = Byte.read(file_object)
            z = Byte.read(file_object)
            self.offset = (x, z)
            self.pixels = VarIntPrefixedByteArray.read(file_object)
        else:
            self.height = 0
            self.offset = None
            self.pixels = None
Exemple #15
0
 def read(self, file_object):
     self.message_id = VarInt.read(file_object)
     self.successful = Boolean.read(file_object)
     if self.successful:
         self.data = TrailingByteArray.read(file_object)
     else:
         self.data = None
Exemple #16
0
    def read(self, file_object):
        self.map_id = VarInt.read(file_object)
        self.scale = Byte.read(file_object)

        if self.context.protocol_in_range(107, PRE | 6):
            self.is_tracking_position = Boolean.read(file_object)
        elif self.context.protocol_earlier(107):
            self.is_tracking_position = True

        if self.context.protocol_later_eq(452):
            self.is_locked = Boolean.read(file_object)
        else:
            self.is_locked = False

        if self.context.protocol_later_eq(PRE | 6):
            self.is_tracking_position = Boolean.read(file_object)

        icon_count = VarInt.read(file_object)
        self.icons = []
        for i in range(icon_count):
            if self.context.protocol_later_eq(373):
                type = VarInt.read(file_object)
            else:
                type, direction = divmod(UnsignedByte.read(file_object), 16)
            x = Byte.read(file_object)
            z = Byte.read(file_object)
            if self.context.protocol_later_eq(373):
                direction = UnsignedByte.read(file_object)
            if self.context.protocol_later_eq(364):
                has_name = Boolean.read(file_object)
                display_name = String.read(file_object) if has_name else None
            else:
                display_name = None
            icon = MapPacket.MapIcon(type, direction, (x, z), display_name)
            self.icons.append(icon)

        self.width = UnsignedByte.read(file_object)
        if self.width:
            self.height = UnsignedByte.read(file_object)
            x = Byte.read(file_object)
            z = Byte.read(file_object)
            self.offset = (x, z)
            self.pixels = VarIntPrefixedByteArray.read(file_object)
        else:
            self.height = 0
            self.offset = None
            self.pixels = None
 def read(self, file_object):
     self.name = String.read(file_object)
     self.value = String.read(file_object)
     is_signed = Boolean.read(file_object)
     if is_signed:
         self.signature = String.read(file_object)
     else:
         self.signature = None
Exemple #18
0
 def read(self, file_object):
     self.name = String.read(file_object)
     self.value = String.read(file_object)
     is_signed = Boolean.read(file_object)
     if is_signed:
         self.signature = String.read(file_object)
     else:
         self.signature = None
Exemple #19
0
    def read(self, file_object):
        self.map_id = VarInt.read(file_object)
        self.scale = Byte.read(file_object)

        if self.context.protocol_version >= 107:
            self.is_tracking_position = Boolean.read(file_object)
        else:
            self.is_tracking_position = True

        if self.context.protocol_version >= 452:
            self.is_locked = Boolean.read(file_object)
        else:
            self.is_locked = False

        icon_count = VarInt.read(file_object)
        self.icons = []
        for i in range(icon_count):
            if self.context.protocol_version >= 373:
                type = VarInt.read(file_object)
            else:
                type, direction = divmod(UnsignedByte.read(file_object), 16)
            x = Byte.read(file_object)
            z = Byte.read(file_object)
            if self.context.protocol_version >= 373:
                direction = UnsignedByte.read(file_object)
            if self.context.protocol_version >= 364:
                has_name = Boolean.read(file_object)
                display_name = String.read(file_object) if has_name else None
            else:
                display_name = None
            icon = MapPacket.MapIcon(type, direction, (x, z), display_name)
            self.icons.append(icon)

        self.width = UnsignedByte.read(file_object)
        if self.width:
            self.height = UnsignedByte.read(file_object)
            x = Byte.read(file_object)
            z = Byte.read(file_object)
            self.offset = (x, z)
            self.pixels = VarIntPrefixedByteArray.read(file_object)
        else:
            self.height = 0
            self.offset = None
            self.pixels = None
 def read(self, file_object):
     self.entity_id = VarInt.read(file_object)
     self.type = Type(VarInt.read(file_object))
     if self.type == Type.INTERACT_AT:
         self.x = Float.read(file_object)
         self.y = Float.read(file_object)
         self.z = Float.read(file_object)
     if self.type == Type.INTERACT or self.type == Type.INTERACT_AT:
         self.hand = VarInt.read(file_object)
     self.sneaking = Boolean.read(file_object)
    def make_add_player_packet(display_name=True):
        packet_buffer = PacketBuffer()

        VarInt.send(0, packet_buffer)  # action_id
        VarInt.send(1, packet_buffer)  # action count
        UUID.send(fake_uuid, packet_buffer)  # uuid
        String.send("player", packet_buffer)  # player name

        VarInt.send(2, packet_buffer)  # number of properties
        String.send("property1", packet_buffer)
        String.send("value1", packet_buffer)
        Boolean.send(False, packet_buffer)  # is signed
        String.send("property2", packet_buffer)
        String.send("value2", packet_buffer)
        Boolean.send(True, packet_buffer)  # is signed
        String.send("signature", packet_buffer)

        VarInt.send(42, packet_buffer)  # game mode
        VarInt.send(69, packet_buffer)  # ping
        Boolean.send(display_name, packet_buffer)  # has display name
        if display_name:
            String.send("display", packet_buffer)  # display name

        packet_buffer.reset_cursor()
        return packet_buffer
Exemple #22
0
    def make_add_player_packet(display_name=True):
        packet_buffer = PacketBuffer()

        VarInt.send(0, packet_buffer)  # action_id
        VarInt.send(1, packet_buffer)  # action count
        UUID.send(fake_uuid, packet_buffer)  # uuid
        String.send("player", packet_buffer)  # player name

        VarInt.send(2, packet_buffer)  # number of properties
        String.send("property1", packet_buffer)
        String.send("value1", packet_buffer)
        Boolean.send(False, packet_buffer)  # is signed
        String.send("property2", packet_buffer)
        String.send("value2", packet_buffer)
        Boolean.send(True, packet_buffer)  # is signed
        String.send("signature", packet_buffer)

        VarInt.send(42, packet_buffer)  # game mode
        VarInt.send(69, packet_buffer)  # ping
        Boolean.send(display_name, packet_buffer)  # has display name
        if display_name:
            String.send("display", packet_buffer)  # display name

        packet_buffer.reset_cursor()
        return packet_buffer
    def read(self, file_object):
        if self.context.protocol_version >= 353:
            self.origin = VarInt.read(file_object)
            self.x = Double.read(file_object)
            self.y = Double.read(file_object)
            self.z = Double.read(file_object)
            is_entity = Boolean.read(file_object)
            if is_entity:
                # If the entity given by entity ID cannot be found,
                # this packet should be treated as if is_entity was false.
                self.entity_id = VarInt.read(file_object)
                self.entity_origin = VarInt.read(file_object)
            else:
                self.entity_id = None

        else:  # Protocol version 352
            is_entity = Boolean.read(file_object)
            self.entity_id = VarInt.read(file_object) if is_entity else None
            if not is_entity:
                self.x = Double.read(file_object)
                self.y = Double.read(file_object)
                self.z = Double.read(file_object)
Exemple #24
0
    def test_add_and_others(self):
        player_list = PlayerListItemPacket.PlayerList()
        by_uuid = player_list.players_by_uuid

        packet_buffer = self.make_add_player_packet(display_name=False)
        self.read_and_apply(packet_buffer, player_list)
        self.assertEqual(by_uuid[fake_uuid].gamemode, 42)
        self.assertEqual(by_uuid[fake_uuid].ping, 69)
        self.assertIsNone(by_uuid[fake_uuid].display_name)

        # Change the game mode
        packet_buffer = self.make_action_base(1)
        VarInt.send(43, packet_buffer)  # gamemode
        self.read_and_apply(packet_buffer, player_list)
        self.assertEqual(by_uuid[fake_uuid].gamemode, 43)

        # Change the ping
        packet_buffer = self.make_action_base(2)
        VarInt.send(70, packet_buffer)  # ping
        self.read_and_apply(packet_buffer, player_list)
        self.assertEqual(by_uuid[fake_uuid].ping, 70)

        # Change the display name
        packet_buffer = self.make_action_base(3)
        Boolean.send(True, packet_buffer)
        String.send("display2", packet_buffer)
        self.read_and_apply(packet_buffer, player_list)
        self.assertEqual(by_uuid[fake_uuid].display_name, "display2")

        # Remove the display name
        packet_buffer = self.make_action_base(3)
        Boolean.send(False, packet_buffer)
        self.read_and_apply(packet_buffer, player_list)
        self.assertIsNone(by_uuid[fake_uuid].display_name)

        # Remove the player
        packet_buffer = self.make_action_base(4)
        self.read_and_apply(packet_buffer, player_list)
        self.assertNotIn(fake_uuid, player_list.players_by_uuid)
    def test_add_and_others(self):
        player_list = PlayerListItemPacket.PlayerList()
        by_uuid = player_list.players_by_uuid

        packet_buffer = self.make_add_player_packet(display_name=False)
        self.read_and_apply(packet_buffer, player_list)
        self.assertEqual(by_uuid[fake_uuid].gamemode, 42)
        self.assertEqual(by_uuid[fake_uuid].ping, 69)
        self.assertIsNone(by_uuid[fake_uuid].display_name)

        # Change the game mode
        packet_buffer = self.make_action_base(1)
        VarInt.send(43, packet_buffer)  # gamemode
        self.read_and_apply(packet_buffer, player_list)
        self.assertEqual(by_uuid[fake_uuid].gamemode, 43)

        # Change the ping
        packet_buffer = self.make_action_base(2)
        VarInt.send(70, packet_buffer)  # ping
        self.read_and_apply(packet_buffer, player_list)
        self.assertEqual(by_uuid[fake_uuid].ping, 70)

        # Change the display name
        packet_buffer = self.make_action_base(3)
        Boolean.send(True, packet_buffer)
        String.send("display2", packet_buffer)
        self.read_and_apply(packet_buffer, player_list)
        self.assertEqual(by_uuid[fake_uuid].display_name, "display2")

        # Remove the display name
        packet_buffer = self.make_action_base(3)
        Boolean.send(False, packet_buffer)
        self.read_and_apply(packet_buffer, player_list)
        self.assertIsNone(by_uuid[fake_uuid].display_name)

        # Remove the player
        packet_buffer = self.make_action_base(4)
        self.read_and_apply(packet_buffer, player_list)
        self.assertNotIn(fake_uuid, player_list.players_by_uuid)
Exemple #26
0
    def read(self, file_object):
        # print('Reading chunk packet...')
        self.x = Integer.read(file_object)
        self.z = Integer.read(file_object)
        self.gu_continuous = Boolean.read(file_object)
        self.bitmask = VarInt.read(file_object)
        self.data_length = VarInt.read(file_object)
        self.data = file_object.read(self.data_length)
        self.chunk = ChunkDataPacket.Chunk(self.x, self.z, self.gu_continuous,
                                           self.bitmask)

        self.number_of_entities = VarInt.read(file_object)
        for _ in range(self.number_of_entities):
            self.chunk.entities.append(mynbt.parse_bytes(file_object))
 def _read(self, file_object):
     self.name = String.read(file_object)
     prop_count = VarInt.read(file_object)
     self.properties = []
     for i in range(prop_count):
         property = PlayerListItemPacket.PlayerProperty()
         property.read(file_object)
         self.properties.append(property)
     self.gamemode = VarInt.read(file_object)
     self.ping = VarInt.read(file_object)
     has_display_name = Boolean.read(file_object)
     if has_display_name:
         self.display_name = String.read(file_object)
     else:
         self.display_name = None
Exemple #28
0
 def read(self, file_object):
     if self.context.protocol_later_eq(346):
         self.transaction_id = VarInt.read(file_object)
         self.start = VarInt.read(file_object)
         self.length = VarInt.read(file_object)
     count = VarInt.read(file_object)
     self.matches = []
     for i in range(count):
         match = String.read(file_object)
         has_tooltip = False
         if self.context.protocol_later_eq(357):
             has_tooltip = Boolean.read(file_object)
         tooltip = String.read(file_object) if has_tooltip else None
         tabmatch = TabCompletePacket.TabMatch(match, tooltip)
         self.matches.append(tabmatch)
Exemple #29
0
 def _read(self, file_object):
     self.name = String.read(file_object)
     prop_count = VarInt.read(file_object)
     self.properties = []
     for i in range(prop_count):
         property = PlayerListItemPacket.PlayerProperty()
         property.read(file_object)
         self.properties.append(property)
     self.gamemode = VarInt.read(file_object)
     self.ping = VarInt.read(file_object)
     has_display_name = Boolean.read(file_object)
     if has_display_name:
         self.display_name = String.read(file_object)
     else:
         self.display_name = None
Exemple #30
0
    def read(self, file_object):
        self.x = Integer.read(file_object)
        self.z = Integer.read(file_object)
        self.full_chunk = Boolean.read(file_object)
        self.bit_mask_y = VarInt.read(file_object)
        self.heightmaps = Nbt.read(file_object)
        self.biomes = []
        if self.full_chunk:
            for i in range(1024):
                self.biomes.append(Integer.read(file_object))
        size = VarInt.read(file_object)
        self.data = file_object.read(size)
        size_entities = VarInt.read(file_object)
        self.entities = []
        for i in range(size_entities):
            self.entities.append(Nbt.read(file_object))

        self.decode_chunk_data()
    def write_fields(self, packet_buffer):
        if self.context.protocol_version >= 353:
            VarInt.send(self.origin, packet_buffer)
            Double.send(self.x, packet_buffer)
            Double.send(self.y, packet_buffer)
            Double.send(self.z, packet_buffer)
            if self.entity_id is not None:
                Boolean.send(True, packet_buffer)
                VarInt.send(self.entity_id, packet_buffer)
                VarInt.send(self.entity_origin, packet_buffer)
            else:
                Boolean.send(False, packet_buffer)

        else:  # Protocol version 352
            if self.entity_id is not None:
                Boolean.send(True, packet_buffer)
                VarInt.send(self.entity_id, packet_buffer)
            else:
                Boolean.send(False, packet_buffer)
                Double.send(self.x, packet_buffer)
                Double.send(self.y, packet_buffer)
                Double.send(self.z, packet_buffer)
 def _read(self, file_object):
     has_display_name = Boolean.read(file_object)
     if has_display_name:
         self.display_name = String.read(file_object)
     else:
         self.display_name = None
Exemple #33
0
 def _read(self, file_object):
     has_display_name = Boolean.read(file_object)
     if has_display_name:
         self.display_name = String.read(file_object)
     else:
         self.display_name = None
Exemple #34
0
 def _send(self, packet_buffer):
     if self.display_name is not None:
         Boolean.send(True, packet_buffer)
         String.send(self.display_name, packet_buffer)
     else:
         Boolean.send(False, packet_buffer)