Exemple #1
0
    def test_break_block(self):
        self.test_login()
        self.perform_action(ActionType.BREAK_BLOCK,
                            entity_runtime_id=1,
                            position=Vector3(x=256, y=62, z=257))

        actual_event = self.next_event()
        expected_event = event_factory.create(
            EventType.BLOCK_UPDATED,
            (PlacedBlock(Vector3(x=256, y=62, z=257),
                         Block(type=BlockType.AIR, aux_value=0)), ))
        self.assertEqual(expected_event, actual_event)

        actual_event = self.next_event()
        expected_event = event_factory.create(EventType.ITEM_SPAWNED,
                                              entity_unique_id=2,
                                              entity_runtime_id=2,
                                              item=Item(type=ItemType.DIRT,
                                                        aux_value=1,
                                                        nbt=b'',
                                                        place_on=(),
                                                        destroy=()),
                                              position=Vector3(x=256.5,
                                                               y=62.25,
                                                               z=257.5),
                                              motion=Vector3(x=0.0,
                                                             y=0.0,
                                                             z=0.0),
                                              metadata=())
        self.assertEqual(expected_event, actual_event)
Exemple #2
0
    def test_put_item(self):
        self.test_equip()
        self.perform_action(ActionType.PUT_ITEM,
                            entity_runtime_id=1,
                            position=Vector3(x=256, y=62, z=257),
                            click_position=Vector3(0.5, 1.0, 0.5),
                            face=Face.TOP,
                            hotbar_slot=0,
                            item=Item(type=ItemType.DIRT,
                                      aux_value=64,
                                      nbt=b'',
                                      place_on=(),
                                      destroy=()))

        actual_event = self.next_event()
        expected_event = event_factory.create(
            EventType.BLOCK_UPDATED,
            (PlacedBlock(Vector3(x=256, y=63, z=257),
                         Block(type=BlockType.DIRT, aux_value=0)), ))
        self.assertEqual(expected_event, actual_event)

        actual_event = self.next_event()
        expected_event = event_factory.create(EventType.INVENTORY_UPDATED,
                                              player_id=self.get_player_id(0),
                                              inventory_slot=0,
                                              slot_item=Item(
                                                  type=ItemType.DIRT,
                                                  aux_value=64,
                                                  nbt=b'',
                                                  place_on=(),
                                                  destroy=()))
        self.assertEqual(expected_event, actual_event)
Exemple #3
0
    def test_move_player(self):
        self.test_login()
        self.perform_action(ActionType.MOVE_PLAYER,
                            entity_runtime_id=1,
                            position=Vector3(x=257.5, y=64.625, z=254.5),
                            pitch=45.0,
                            yaw=60.0,
                            head_yaw=30.0,
                            mode=MoveMode.NORMAL,
                            on_ground=True,
                            riding_eid=0,
                            need_response=False)

        actual_event = self.next_event()
        expected_event = event_factory.create(EventType.PLAYER_MOVED,
                                              entity_runtime_id=1,
                                              position=Vector3(x=257.5,
                                                               y=64.625,
                                                               z=254.5),
                                              pitch=45.0,
                                              yaw=60.0,
                                              head_yaw=30.0,
                                              mode=MoveMode.NORMAL,
                                              on_ground=True,
                                              riding_eid=0,
                                              need_response=False)
        self.assertEqual(expected_event, actual_event)
Exemple #4
0
    def test_equip(self):
        self.test_item_taken()
        self.perform_action(ActionType.EQUIP,
                            entity_runtime_id=1,
                            inventory_slot=0,
                            hotbar_slot=0,
                            item=Item(type=ItemType.DIRT,
                                      aux_value=1,
                                      nbt=b'',
                                      place_on=(),
                                      destroy=()))

        actual_event = self.next_event()
        expected_event = event_factory.create(EventType.EQUIPMENT_UPDATED,
                                              entity_runtime_id=1,
                                              inventory_slot=0,
                                              hotbar_slot=0,
                                              equipped_item=Item(
                                                  type=ItemType.DIRT,
                                                  aux_value=1,
                                                  nbt=b'',
                                                  place_on=(),
                                                  destroy=()))
        self.assertEqual(expected_event, actual_event)

        self.perform_action(ActionType.EQUIP,
                            entity_runtime_id=1,
                            inventory_slot=None,
                            hotbar_slot=1,
                            item=Item(type=ItemType.AIR,
                                      aux_value=None,
                                      nbt=None,
                                      place_on=None,
                                      destroy=None))

        actual_event = self.next_event()
        expected_event = event_factory.create(EventType.EQUIPMENT_UPDATED,
                                              entity_runtime_id=1,
                                              inventory_slot=None,
                                              hotbar_slot=1,
                                              equipped_item=Item(
                                                  type=ItemType.AIR,
                                                  aux_value=None,
                                                  nbt=None,
                                                  place_on=None,
                                                  destroy=None))
        self.assertEqual(expected_event, actual_event)
Exemple #5
0
    def test_equip(self):
        self.test_login()
        self.perform_action(ActionType.EQUIP,
                            entity_runtime_id=1,
                            inventory_slot=0,
                            hotbar_slot=0,
                            item=Item(type=ItemType.DIRT,
                                      aux_value=64,
                                      nbt=b'',
                                      place_on=(),
                                      destroy=()))
        self.perform_action(ActionType.SET_INVENTORY,
                            entity_runtime_id=1,
                            inventory_slot=0,
                            item=Item(type=ItemType.DIRT,
                                      aux_value=64,
                                      nbt=b'',
                                      place_on=(),
                                      destroy=()))

        actual_event = self.next_event()
        expected_event = event_factory.create(EventType.EQUIPMENT_UPDATED,
                                              entity_runtime_id=1,
                                              inventory_slot=0,
                                              hotbar_slot=0,
                                              equipped_item=Item(
                                                  type=ItemType.DIRT,
                                                  aux_value=64,
                                                  nbt=b'',
                                                  place_on=(),
                                                  destroy=()))
        self.assertEqual(expected_event, actual_event)

        actual_event = self.next_event()
        expected_event = event_factory.create(EventType.INVENTORY_UPDATED,
                                              player_id=self.get_player_id(0),
                                              inventory_slot=0,
                                              slot_item=Item(
                                                  type=ItemType.DIRT,
                                                  aux_value=64,
                                                  nbt=b'',
                                                  place_on=(),
                                                  destroy=()))
        self.assertEqual(expected_event, actual_event)
Exemple #6
0
    def test_break_block(self):
        self.test_login()
        self.perform_action(ActionType.BREAK_BLOCK,
                            entity_runtime_id=1,
                            position=Vector3(x=256, y=62, z=257))

        actual_event = self.next_event()
        expected_event = event_factory.create(
            EventType.BLOCK_UPDATED,
            (PlacedBlock(Vector3(x=256, y=62, z=257),
                         Block(type=BlockType.AIR, aux_value=0)), ))
        self.assertEqual(expected_event, actual_event)
Exemple #7
0
    def test_request_entity(self):
        self.test_break_block()
        self.perform_action(ActionType.REQUEST_ENTITY, player_runtime_id=1)

        actual_event = self.next_event()
        expected_event = event_factory.create(
            EventType.ENTITY_LOADED,
            player_id=self.get_player_id(0),
            spawn_events=(event_factory.create(EventType.ITEM_SPAWNED,
                                               entity_unique_id=2,
                                               entity_runtime_id=2,
                                               item=Item(type=ItemType.DIRT,
                                                         aux_value=1,
                                                         nbt=b'',
                                                         place_on=(),
                                                         destroy=()),
                                               position=Vector3(x=256.5,
                                                                y=62.25,
                                                                z=257.5),
                                               motion=Vector3(x=0.0,
                                                              y=0.0,
                                                              z=0.0),
                                               metadata=()), ))
        self.assertEqual(expected_event, actual_event)
Exemple #8
0
    def test_put_block(self):
        self.test_take_item()

        self.proxy.push_event(ActionType.MOVE_PLAYER, (event_factory.create(
            EventType.PLAYER_MOVED,
            entity_runtime_id=1,
            position=Vector3(
                x=256.39129638671875, y=64.62001037597656, z=256.552001953125),
            pitch=30.126800537109375,
            yaw=-1.44427490234375,
            head_yaw=-1.44427490234375,
            mode=MoveMode.NORMAL,
            on_ground=True,
            riding_eid=0,
            need_response=False), ))

        self.proxy.send(EncodedData(self.data.created).is_(
            RakNetPacket(
                RakNetPacketType.FRAME_SET_4, packet_sequence_num=21).that_has(
                    RakNetFrame(
                        RakNetFrameType.RELIABLE_ORDERED,
                        reliable_message_num=20,
                        message_ordering_index=11,
                        message_ordering_chanel=0).that_has(Batch().that_has(
                            GamePacket(GamePacketType.MOVE_PLAYER,
                                       entity_runtime_id=1,
                                       position=Vector3(x=256.39129638671875,
                                                        y=64.62001037597656,
                                                        z=256.552001953125),
                                       pitch=30.126800537109375,
                                       yaw=-1.44427490234375,
                                       head_yaw=-1.44427490234375,
                                       mode=MoveMode.NORMAL,
                                       on_ground=True,
                                       riding_eid=0,
                                       int1=None,
                                       int2=None))))),
                        from_=self._CLIENT_ADDRESS[0])

        self.proxy.push_event(
            ActionType.PUT_ITEM,
            (event_factory.create(EventType.BLOCK_UPDATED, (PlacedBlock(
                Vector3(x=256, y=62, z=258),
                Block.create(BlockType.DIRT,
                             0,
                             neighbors=True,
                             network=True,
                             priority=True)), )),
             event_factory.create(
                 EventType.INVENTORY_UPDATED,
                 player_id=UUID('a302a666-4cac-3e3f-a6b8-685f9506f8fe'),
                 inventory_slot=0,
                 slot_item=Item.create(ItemType.AIR, 0))))
        self.proxy.push_event(
            ActionType.EQUIP,
            (event_factory.create(EventType.EQUIPMENT_UPDATED,
                                  entity_runtime_id=1,
                                  inventory_slot=0,
                                  hotbar_slot=0,
                                  equipped_item=Item(type=ItemType.AIR,
                                                     aux_value=None,
                                                     nbt=None,
                                                     place_on=None,
                                                     destroy=None)), ))

        self.proxy.send(EncodedData(self.data.created).is_(
            RakNetPacket(
                RakNetPacketType.FRAME_SET_4, packet_sequence_num=22).that_has(
                    RakNetFrame(RakNetFrameType.RELIABLE_ORDERED,
                                reliable_message_num=21,
                                message_ordering_index=12,
                                message_ordering_chanel=0).
                    that_has(Batch().that_has(
                        GamePacket(GamePacketType.ANIMATE,
                                   action_type=2,
                                   entity_runtime_id=1,
                                   unknown=None),
                        GamePacket(GamePacketType.ANIMATE,
                                   action_type=2,
                                   entity_runtime_id=1,
                                   unknown=None),
                        GamePacket(
                            GamePacketType.INVENTORY_TRANSACTION,
                            transaction_type=InventoryTransactionType.USE_ITEM,
                            actions=(InventoryAction(
                                source_type=SourceType.CONTAINER,
                                window_type=WindowType.INVENTORY,
                                unknown1=None,
                                inventory_slot=0,
                                old_item=Item(type=ItemType.DIRT,
                                              aux_value=1,
                                              nbt=b'',
                                              place_on=(),
                                              destroy=()),
                                new_item=Item(type=ItemType.AIR,
                                              aux_value=None,
                                              nbt=None,
                                              place_on=None,
                                              destroy=None)), ),
                            data=TransactionToUseItem(
                                action_type=UseItemActionType.CLICK_BLOCK,
                                position=Vector3(x=256, y=62, z=259),
                                face=Face.SOUTH,
                                hotbar_slot=0,
                                item_in_hand=Item(type=ItemType.DIRT,
                                                  aux_value=1,
                                                  nbt=b'',
                                                  place_on=(),
                                                  destroy=()),
                                player_position=Vector3(x=256.3912658691406,
                                                        y=64.62001037597656,
                                                        z=256.5500183105469),
                                click_position=Vector3(x=0.31121826171875,
                                                       y=0.5553474426269531,
                                                       z=0.0))),
                        GamePacket(GamePacketType.MOB_EQUIPMENT,
                                   entity_runtime_id=1,
                                   item=Item(type=ItemType.AIR,
                                             aux_value=None,
                                             nbt=None,
                                             place_on=None,
                                             destroy=None),
                                   inventory_slot=255,
                                   hotbar_slot=0,
                                   window_type=WindowType.INVENTORY),
                    )))),
                        from_=self._CLIENT_ADDRESS[0])

        self.proxy.next_moment()  # PLAYER_MOVED

        received_data = self.proxy.receive()
        self.assert_that(
            received_data, {
                self._CLIENT_ADDRESS[0]: [
                    EncodedData(self.data.created).is_(
                        RakNetPacket(RakNetPacketType.ACK,
                                     record_count=1,
                                     range_max_equals_to_min=False,
                                     packet_sequence_number_min=21,
                                     packet_sequence_number_max=22)),
                ]
            })

        self.proxy.next_moment()  # BLOCK_UPDATED

        received_data = self.proxy.receive()
        self.assert_that(
            received_data, {
                self._CLIENT_ADDRESS[0]: [
                    EncodedData(self.data.created).is_(
                        RakNetPacket(
                            RakNetPacketType.FRAME_SET_4,
                            packet_sequence_num=34 + FULL_CHUNK_NUM).that_has(
                                RakNetFrame(
                                    RakNetFrameType.RELIABLE_ORDERED,
                                    reliable_message_num=43 + FULL_CHUNK_NUM,
                                    message_ordering_index=26 + FULL_CHUNK_NUM,
                                    message_ordering_chanel=0).that_has(
                                        Batch().that_has(
                                            GamePacket(
                                                GamePacketType.UPDATE_BLOCK,
                                                position=Vector3(
                                                    x=256, y=62, z=258),
                                                block=Block(
                                                    type=BlockType.DIRT,
                                                    aux_value=176)))), ))
                ]
            })

        self.proxy.next_moment()  # INVENTORY_UPDATED

        received_data = self.proxy.receive()
        self.assert_that(
            received_data, {
                self._CLIENT_ADDRESS[0]: [
                    EncodedData(self.data.created).is_(
                        RakNetPacket(
                            RakNetPacketType.FRAME_SET_4,
                            packet_sequence_num=35 + FULL_CHUNK_NUM).that_has(
                                RakNetFrame(
                                    RakNetFrameType.RELIABLE_ORDERED,
                                    reliable_message_num=44 + FULL_CHUNK_NUM,
                                    message_ordering_index=27 + FULL_CHUNK_NUM,
                                    message_ordering_chanel=0).that_has(Batch(
                                    ).that_has(
                                        GamePacket(
                                            GamePacketType.INVENTORY_SLOT,
                                            window_type=WindowType.INVENTORY,
                                            inventory_slot=0,
                                            item=Item(type=ItemType.AIR,
                                                      aux_value=None,
                                                      nbt=None,
                                                      place_on=None,
                                                      destroy=None)))), ))
                ]
            })

        self.proxy.next_moment()  # EQUIPMENT_UPDATED

        received_data = self.proxy.receive()
        self.assert_that(
            received_data, {
                self._CLIENT_ADDRESS[0]: [
                    EncodedData(self.data.created).is_(
                        RakNetPacket(
                            RakNetPacketType.FRAME_SET_4,
                            packet_sequence_num=36 + FULL_CHUNK_NUM).that_has(
                                RakNetFrame(
                                    RakNetFrameType.RELIABLE_ORDERED,
                                    reliable_message_num=45 + FULL_CHUNK_NUM,
                                    message_ordering_index=28 + FULL_CHUNK_NUM,
                                    message_ordering_chanel=0).
                                that_has(Batch().that_has(
                                    GamePacket(
                                        GamePacketType.MOB_EQUIPMENT,
                                        entity_runtime_id=1,
                                        item=Item(type=ItemType.AIR,
                                                  aux_value=None,
                                                  nbt=None,
                                                  place_on=None,
                                                  destroy=None),
                                        inventory_slot=9,
                                        hotbar_slot=0,
                                        window_type=WindowType.INVENTORY))), ))
                ]
            })
Exemple #9
0
    def test_take_item(self):
        self.test_break_block()

        self.proxy.push_event(
            ActionType.MOVE_PLAYER,
            (event_factory.create(EventType.PLAYER_MOVED,
                                  entity_runtime_id=1,
                                  position=Vector3(x=256.5497741699219,
                                                   y=63.62001037597656,
                                                   z=258.473876953125),
                                  pitch=30.126800537109375,
                                  yaw=-1.44427490234375,
                                  head_yaw=-1.44427490234375,
                                  mode=MoveMode.NORMAL,
                                  on_ground=True,
                                  riding_eid=0,
                                  need_response=False),
             event_factory.create(
                 EventType.INVENTORY_UPDATED,
                 player_id=UUID('a302a666-4cac-3e3f-a6b8-685f9506f8fe'),
                 inventory_slot=0,
                 slot_item=Item.create(ItemType.DIRT, 1)),
             event_factory.create(EventType.ENTITY_REMOVED,
                                  entity_runtime_id=2),
             event_factory.create(EventType.ITEM_TAKEN,
                                  item_runtime_id=2,
                                  player_runtime_id=1)))

        self.proxy.send(EncodedData(self.data.created).is_(
            RakNetPacket(
                RakNetPacketType.FRAME_SET_4, packet_sequence_num=19).that_has(
                    RakNetFrame(
                        RakNetFrameType.RELIABLE_ORDERED,
                        reliable_message_num=18,
                        message_ordering_index=9,
                        message_ordering_chanel=0).that_has(Batch().that_has(
                            GamePacket(GamePacketType.SOUND_EVENT,
                                       sound=SoundType.LAND,
                                       position=Vector3(x=256.54931640625,
                                                        y=62.23152542114258,
                                                        z=258.4552917480469),
                                       extra_data=2,
                                       pitch=638,
                                       unknown=False,
                                       disable_relative_volume=False),
                            GamePacket(GamePacketType.MOVE_PLAYER,
                                       entity_runtime_id=1,
                                       position=Vector3(x=256.5497741699219,
                                                        y=63.62001037597656,
                                                        z=258.473876953125),
                                       pitch=30.126800537109375,
                                       yaw=-1.44427490234375,
                                       head_yaw=-1.44427490234375,
                                       mode=MoveMode.NORMAL,
                                       on_ground=True,
                                       riding_eid=0,
                                       int1=None,
                                       int2=None))))),
                        from_=self._CLIENT_ADDRESS[0])

        self.proxy.next_moment()  # PLAYER_MOVED

        received_data = self.proxy.receive()
        self.assert_that(
            received_data, {
                self._CLIENT_ADDRESS[0]: [
                    EncodedData(self.data.created).is_(
                        RakNetPacket(RakNetPacketType.ACK,
                                     record_count=1,
                                     range_max_equals_to_min=False,
                                     packet_sequence_number_min=18,
                                     packet_sequence_number_max=19)),
                ]
            })

        self.proxy.next_moment()  # INVENTORY_UPDATED

        received_data = self.proxy.receive()
        self.assert_that(
            received_data, {
                self._CLIENT_ADDRESS[0]: [
                    EncodedData(self.data.created).is_(
                        RakNetPacket(
                            RakNetPacketType.FRAME_SET_4,
                            packet_sequence_num=30 + FULL_CHUNK_NUM).that_has(
                                RakNetFrame(
                                    RakNetFrameType.RELIABLE_ORDERED,
                                    reliable_message_num=39 + FULL_CHUNK_NUM,
                                    message_ordering_index=22 + FULL_CHUNK_NUM,
                                    message_ordering_chanel=0).that_has(
                                        Batch().that_has(
                                            GamePacket(
                                                GamePacketType.INVENTORY_SLOT,
                                                inventory_slot=0,
                                                item=Item(type=ItemType.DIRT,
                                                          aux_value=1,
                                                          nbt=b'',
                                                          place_on=(),
                                                          destroy=()),
                                                window_type=WindowType.
                                                INVENTORY))), )),
                ]
            })

        self.proxy.next_moment()  # ENTITY_REMOVED

        received_data = self.proxy.receive()
        self.assert_that(
            received_data, {
                self._CLIENT_ADDRESS[0]: [
                    EncodedData(self.data.created).is_(
                        RakNetPacket(
                            RakNetPacketType.FRAME_SET_4,
                            packet_sequence_num=31 + FULL_CHUNK_NUM).that_has(
                                RakNetFrame(
                                    RakNetFrameType.RELIABLE_ORDERED,
                                    reliable_message_num=40 + FULL_CHUNK_NUM,
                                    message_ordering_index=23 + FULL_CHUNK_NUM,
                                    message_ordering_chanel=0).that_has(
                                        Batch().that_has(
                                            GamePacket(
                                                GamePacketType.REMOVE_ENTITY,
                                                entity_unique_id=2))), )),
                ]
            })

        self.proxy.next_moment()  # ITEM_TAKEN

        received_data = self.proxy.receive()
        self.assert_that(
            received_data, {
                self._CLIENT_ADDRESS[0]: [
                    EncodedData(self.data.created).is_(
                        RakNetPacket(
                            RakNetPacketType.FRAME_SET_4,
                            packet_sequence_num=32 + FULL_CHUNK_NUM).that_has(
                                RakNetFrame(
                                    RakNetFrameType.RELIABLE_ORDERED,
                                    reliable_message_num=41 + FULL_CHUNK_NUM,
                                    message_ordering_index=24 + FULL_CHUNK_NUM,
                                    message_ordering_chanel=0).
                                that_has(Batch().that_has(
                                    GamePacket(GamePacketType.TAKE_ITEM_ENTITY,
                                               item_runtime_id=2,
                                               player_runtime_id=1))), )),
                ]
            })

        self.proxy.push_event(ActionType.MOVE_PLAYER, (event_factory.create(
            EventType.PLAYER_MOVED,
            entity_runtime_id=1,
            position=Vector3(
                x=256.5505676269531, y=63.62001037597656, z=258.5050354003906),
            pitch=30.126800537109375,
            yaw=-1.44427490234375,
            head_yaw=-1.44427490234375,
            mode=MoveMode.NORMAL,
            on_ground=True,
            riding_eid=0,
            need_response=False), ))
        self.proxy.push_event(
            ActionType.EQUIP,
            (event_factory.create(EventType.EQUIPMENT_UPDATED,
                                  entity_runtime_id=1,
                                  inventory_slot=0,
                                  hotbar_slot=0,
                                  equipped_item=Item(type=ItemType.DIRT,
                                                     aux_value=1,
                                                     nbt=b'',
                                                     place_on=(),
                                                     destroy=())), ))

        self.proxy.send(EncodedData(self.data.created).is_(
            RakNetPacket(
                RakNetPacketType.FRAME_SET_4, packet_sequence_num=20).that_has(
                    RakNetFrame(
                        RakNetFrameType.RELIABLE_ORDERED,
                        reliable_message_num=19,
                        message_ordering_index=10,
                        message_ordering_chanel=0).that_has(Batch().that_has(
                            GamePacket(GamePacketType.MOVE_PLAYER,
                                       entity_runtime_id=1,
                                       position=Vector3(x=256.5505676269531,
                                                        y=63.62001037597656,
                                                        z=258.5050354003906),
                                       pitch=30.126800537109375,
                                       yaw=-1.44427490234375,
                                       head_yaw=-1.44427490234375,
                                       mode=MoveMode.NORMAL,
                                       on_ground=True,
                                       riding_eid=0,
                                       int1=None,
                                       int2=None),
                            GamePacket(GamePacketType.MOB_EQUIPMENT,
                                       entity_runtime_id=1,
                                       item=Item(type=ItemType.DIRT,
                                                 aux_value=1,
                                                 nbt=b'',
                                                 place_on=(),
                                                 destroy=()),
                                       inventory_slot=9,
                                       hotbar_slot=0,
                                       window_type=WindowType.INVENTORY))))),
                        from_=self._CLIENT_ADDRESS[0])

        self.proxy.next_moment()  # PLAYER_MOVED

        received_data = self.proxy.receive()
        self.assert_that(
            received_data, {
                self._CLIENT_ADDRESS[0]: [
                    EncodedData(self.data.created).is_(
                        RakNetPacket(RakNetPacketType.ACK,
                                     record_count=1,
                                     range_max_equals_to_min=True,
                                     packet_sequence_number_min=20,
                                     packet_sequence_number_max=None)),
                ]
            })

        self.proxy.next_moment()  # EQUIPMENT_UPDATED

        received_data = self.proxy.receive()
        self.assert_that(
            received_data, {
                self._CLIENT_ADDRESS[0]: [
                    EncodedData(self.data.created).is_(
                        RakNetPacket(
                            RakNetPacketType.FRAME_SET_4,
                            packet_sequence_num=33 + FULL_CHUNK_NUM).that_has(
                                RakNetFrame(
                                    RakNetFrameType.RELIABLE_ORDERED,
                                    reliable_message_num=42 + FULL_CHUNK_NUM,
                                    message_ordering_index=25 + FULL_CHUNK_NUM,
                                    message_ordering_chanel=0).that_has(
                                        Batch().that_has(
                                            GamePacket(
                                                GamePacketType.MOB_EQUIPMENT,
                                                entity_runtime_id=1,
                                                item=Item(type=ItemType.DIRT,
                                                          aux_value=1,
                                                          nbt=b'',
                                                          place_on=(),
                                                          destroy=()),
                                                inventory_slot=9,
                                                hotbar_slot=0,
                                                window_type=WindowType.
                                                INVENTORY))), )),
                ]
            })
Exemple #10
0
    def test_break_block(self):
        self.test_login()

        self.proxy.send(EncodedData(self.data.created).is_(
            RakNetPacket(
                RakNetPacketType.FRAME_SET_4, packet_sequence_num=15).that_has(
                    RakNetFrame(
                        RakNetFrameType.RELIABLE_ORDERED,
                        reliable_message_num=14,
                        message_ordering_index=5,
                        message_ordering_chanel=0).that_has(Batch().that_has(
                            GamePacket(GamePacketType.ANIMATE,
                                       action_type=2,
                                       entity_runtime_id=1,
                                       unknown=None),
                            GamePacket(
                                GamePacketType.PLAYER_ACTION,
                                entity_runtime_id=1,
                                action_type=PlayerActionType.START_BREAK,
                                position=Vector3(x=512, y=62, z=516),
                                face=Face.TOP),
                            GamePacket(GamePacketType.PLAYER_ACTION,
                                       entity_runtime_id=1,
                                       action_type=PlayerActionType.STOP_BREAK,
                                       position=Vector3(x=1, y=4294967295,
                                                        z=1),
                                       face=Face.BOTTOM),
                            GamePacket(
                                GamePacketType.PLAYER_ACTION,
                                entity_runtime_id=1,
                                action_type=PlayerActionType.START_BREAK,
                                position=Vector3(x=512, y=62, z=516),
                                face=Face.TOP),
                            GamePacket(GamePacketType.PLAYER_ACTION,
                                       entity_runtime_id=1,
                                       action_type=PlayerActionType.UNKNOWN_36,
                                       position=Vector3(x=512, y=62, z=516),
                                       face=Face.TOP),
                            GamePacket(GamePacketType.SOUND_EVENT,
                                       sound=SoundType.HIT,
                                       position=Vector3(x=256.5,
                                                        y=62.5,
                                                        z=258.5),
                                       extra_data=4,
                                       pitch=2,
                                       unknown=False,
                                       disable_relative_volume=False),
                            GamePacket(GamePacketType.ANIMATE,
                                       action_type=2,
                                       entity_runtime_id=1,
                                       unknown=None))))),
                        from_=self._CLIENT_ADDRESS[0])

        self.proxy.send(EncodedData(self.data.created).is_(
            RakNetPacket(
                RakNetPacketType.FRAME_SET_4, packet_sequence_num=16).that_has(
                    RakNetFrame(
                        RakNetFrameType.RELIABLE_ORDERED,
                        reliable_message_num=15,
                        message_ordering_index=6,
                        message_ordering_chanel=0).that_has(Batch().that_has(
                            GamePacket(GamePacketType.PLAYER_ACTION,
                                       entity_runtime_id=1,
                                       action_type=PlayerActionType.UNKNOWN_36,
                                       position=Vector3(x=512, y=62, z=516),
                                       face=Face.TOP),
                            GamePacket(GamePacketType.SOUND_EVENT,
                                       sound=SoundType.HIT,
                                       position=Vector3(x=256.5,
                                                        y=62.5,
                                                        z=258.5),
                                       extra_data=4,
                                       pitch=2,
                                       unknown=False,
                                       disable_relative_volume=False),
                            GamePacket(GamePacketType.ANIMATE,
                                       action_type=2,
                                       entity_runtime_id=1,
                                       unknown=None))))),
                        from_=self._CLIENT_ADDRESS[0])

        self.proxy.push_event(
            ActionType.BREAK_BLOCK,
            (event_factory.create(EventType.BLOCK_UPDATED, (PlacedBlock(
                Vector3(x=256, y=62, z=258),
                Block.create(BlockType.AIR,
                             0,
                             neighbors=True,
                             network=True,
                             priority=True)), )),
             event_factory.create(EventType.ITEM_SPAWNED, 2, 2,
                                  Item.create(ItemType.DIRT, 1),
                                  Vector3(x=256, y=62, z=258),
                                  Vector3(0.0, 0.0, 0.0), tuple())))

        self.proxy.send(EncodedData(self.data.created).is_(
            RakNetPacket(
                RakNetPacketType.FRAME_SET_4, packet_sequence_num=17).that_has(
                    RakNetFrame(RakNetFrameType.RELIABLE_ORDERED,
                                reliable_message_num=16,
                                message_ordering_index=7,
                                message_ordering_chanel=0).
                    that_has(Batch().that_has(
                        GamePacket(GamePacketType.PLAYER_ACTION,
                                   entity_runtime_id=1,
                                   action_type=PlayerActionType.UNKNOWN_36,
                                   position=Vector3(x=512, y=62, z=516),
                                   face=Face.TOP),
                        GamePacket(GamePacketType.PLAYER_ACTION,
                                   entity_runtime_id=1,
                                   action_type=PlayerActionType.DROP_ITEM,
                                   position=Vector3(x=0, y=0, z=0),
                                   face=Face.BOTTOM),
                        GamePacket(
                            GamePacketType.INVENTORY_TRANSACTION,
                            transaction_type=InventoryTransactionType.USE_ITEM,
                            actions=(),
                            data=TransactionToUseItem(
                                action_type=UseItemActionType.BREAK_BLOCK,
                                position=Vector3(x=256, y=62, z=258),
                                face=Face.TOP,
                                hotbar_slot=0,
                                item_in_hand=Item(type=ItemType.AIR,
                                                  aux_value=None,
                                                  nbt=None,
                                                  place_on=None,
                                                  destroy=None),
                                player_position=Vector3(x=256.5,
                                                        y=64.62001037597656,
                                                        z=256.5),
                                click_position=Vector3(x=0.0, y=0.0,
                                                       z=0.0))))))),
                        from_=self._CLIENT_ADDRESS[0])

        self.proxy.next_moment()  # BLOCK_UPDATED

        received_data = self.proxy.receive()
        self.assert_that(
            received_data, {
                self._CLIENT_ADDRESS[0]: [
                    EncodedData(self.data.created).is_(
                        RakNetPacket(RakNetPacketType.ACK,
                                     record_count=1,
                                     range_max_equals_to_min=False,
                                     packet_sequence_number_min=15,
                                     packet_sequence_number_max=17)),
                    EncodedData(self.data.created).is_(
                        RakNetPacket(
                            RakNetPacketType.FRAME_SET_4,
                            packet_sequence_num=28 + FULL_CHUNK_NUM).that_has(
                                RakNetFrame(
                                    RakNetFrameType.RELIABLE_ORDERED,
                                    reliable_message_num=37 + FULL_CHUNK_NUM,
                                    message_ordering_index=20 + FULL_CHUNK_NUM,
                                    message_ordering_chanel=0).that_has(
                                        Batch().that_has(
                                            GamePacket(
                                                GamePacketType.UPDATE_BLOCK,
                                                position=Vector3(
                                                    x=256, y=62, z=258),
                                                block=Block(
                                                    type=BlockType.AIR,
                                                    aux_value=176)))), ))
                ]
            })

        self.proxy.next_moment()  # ITEM_SPAWNED

        received_data = self.proxy.receive()
        self.assert_that(
            received_data, {
                self._CLIENT_ADDRESS[0]: [
                    EncodedData(self.data.created).is_(
                        RakNetPacket(
                            RakNetPacketType.FRAME_SET_4,
                            packet_sequence_num=29 + FULL_CHUNK_NUM).that_has(
                                RakNetFrame(
                                    RakNetFrameType.RELIABLE_ORDERED,
                                    reliable_message_num=38 + FULL_CHUNK_NUM,
                                    message_ordering_index=21 + FULL_CHUNK_NUM,
                                    message_ordering_chanel=0).that_has(
                                        Batch().that_has(
                                            GamePacket(
                                                GamePacketType.ADD_ITEM_ENTITY,
                                                entity_unique_id=2,
                                                entity_runtime_id=2,
                                                item=Item(type=ItemType.DIRT,
                                                          aux_value=1,
                                                          nbt=b'',
                                                          place_on=(),
                                                          destroy=()),
                                                position=Vector3(
                                                    x=256.0, y=62.0, z=258.0),
                                                motion=Vector3(
                                                    x=0.0, y=0.0, z=0.0),
                                                metadata=()))), ))
                ]
            })

        self.proxy.send(EncodedData(self.data.created).is_(
            RakNetPacket(
                RakNetPacketType.FRAME_SET_4, packet_sequence_num=18).that_has(
                    RakNetFrame(
                        RakNetFrameType.RELIABLE_ORDERED,
                        reliable_message_num=17,
                        message_ordering_index=8,
                        message_ordering_chanel=0).that_has(Batch().that_has(
                            GamePacket(GamePacketType.PLAYER_ACTION,
                                       entity_runtime_id=1,
                                       action_type=PlayerActionType.STOP_BREAK,
                                       position=Vector3(x=512, y=62, z=518),
                                       face=Face.BOTTOM),
                            GamePacket(GamePacketType.PLAYER_ACTION,
                                       entity_runtime_id=1,
                                       action_type=PlayerActionType.STOP_BREAK,
                                       position=Vector3(x=512, y=62, z=518),
                                       face=Face.BOTTOM))))),
                        from_=self._CLIENT_ADDRESS[0])
Exemple #11
0
 def event(self) -> Event:
     return event_factory.create(EventType.ITEM_TAKEN,
                                 self._item_entity.entity_runtime_id,
                                 self._player_entity.entity_runtime_id)
Exemple #12
0
    def test_login(self):
        self.test_connection_request()

        self.proxy.register_command_processor(MockCommandProcessor())

        for i in range(8):
            packet_type = RakNetPacketType.FRAME_SET_4 if i == 0 else RakNetPacketType.FRAME_SET_C
            self.proxy.send(EncodedData(self.data.that_is('login')).is_(
                RakNetPacket(packet_type, packet_sequence_num=3 + i).that_has(
                    RakNetFrame(RakNetFrameType.RELIABLE_ORDERED_HAS_SPLIT,
                                reliable_message_num=2 + i,
                                message_ordering_index=1,
                                message_ordering_chanel=0,
                                split_packet_count=9,
                                split_packet_id=0,
                                split_packet_index=i))),
                            from_=self._CLIENT_ADDRESS[0])

        self.proxy.send(EncodedData(self.data.that_is('login')).is_(
            RakNetPacket(
                RakNetPacketType.FRAME_SET_C, packet_sequence_num=11).that_has(
                    RakNetFrame(RakNetFrameType.RELIABLE_ORDERED_HAS_SPLIT,
                                reliable_message_num=10,
                                message_ordering_index=1,
                                message_ordering_chanel=0,
                                split_packet_count=9,
                                split_packet_id=0,
                                split_packet_index=8))),
                        from_=self._CLIENT_ADDRESS[0])

        received_data = self.proxy.receive()
        self.assert_that(
            received_data, {
                self._CLIENT_ADDRESS[0]: [
                    EncodedData(self.data.created).is_(
                        RakNetPacket(RakNetPacketType.ACK,
                                     record_count=1,
                                     range_max_equals_to_min=False,
                                     packet_sequence_number_min=3,
                                     packet_sequence_number_max=11)),
                    EncodedData(self.data.created).is_(
                        RakNetPacket(RakNetPacketType.FRAME_SET_4,
                                     packet_sequence_num=3).
                        that_has(
                            RakNetFrame(RakNetFrameType.RELIABLE_ORDERED,
                                        reliable_message_num=1,
                                        message_ordering_index=1,
                                        message_ordering_chanel=0).
                            that_has(Batch().that_has(
                                GamePacket(GamePacketType.PLAY_STATUS,
                                           status=PlayStatus.LOGIN_SUCCESS))),
                            RakNetFrame(
                                RakNetFrameType.RELIABLE_ORDERED,
                                reliable_message_num=2,
                                message_ordering_index=2,
                                message_ordering_chanel=0).that_has(
                                    Batch().that_has(
                                        GamePacket(
                                            GamePacketType.RESOURCE_PACKS_INFO,
                                            must_accept=False,
                                            behavior_pack_entries=(),
                                            resource_pack_entries=())))))
                ]
            })

        self.proxy.send(EncodedData(self.data.created).is_(
            RakNetPacket(
                RakNetPacketType.FRAME_SET_4, packet_sequence_num=12).that_has(
                    RakNetFrame(
                        RakNetFrameType.RELIABLE_ORDERED,
                        reliable_message_num=11,
                        message_ordering_index=2,
                        message_ordering_chanel=0).that_has(Batch().that_has(
                            GamePacket(
                                GamePacketType.RESOURCE_PACK_CLIENT_RESPONSE,
                                status=ResourcePackStatus.HAVE_ALL_PACKS,
                                pack_ids=()))))),
                        from_=self._CLIENT_ADDRESS[0])

        received_data = self.proxy.receive()
        self.assert_that(
            received_data, {
                self._CLIENT_ADDRESS[0]: [
                    EncodedData(self.data.created).is_(
                        RakNetPacket(RakNetPacketType.ACK,
                                     record_count=1,
                                     range_max_equals_to_min=True,
                                     packet_sequence_number_min=12,
                                     packet_sequence_number_max=None)),
                    EncodedData(self.data.created).is_(
                        RakNetPacket(
                            RakNetPacketType.FRAME_SET_4,
                            packet_sequence_num=4).that_has(
                                RakNetFrame(RakNetFrameType.RELIABLE_ORDERED,
                                            reliable_message_num=3,
                                            message_ordering_index=3,
                                            message_ordering_chanel=0).
                                that_has(Batch().that_has(
                                    GamePacket(
                                        GamePacketType.RESOURCE_PACK_STACK,
                                        must_accept=False,
                                        behavior_pack_stack=(),
                                        resource_pack_stack=())))))
                ]
            })

        self.proxy.push_event(ActionType.LOGIN_PLAYER, (
            event_factory.
            create(EventType.PLAYER_LOGGED_IN,
                   player_id=UUID('a302a666-4cac-3e3f-a6b8-685f9506f8fe'),
                   entity_unique_id=1,
                   entity_runtime_id=1,
                   game_mode=GameMode.SURVIVAL,
                   position=Vector3(256.0, 64.0, 256.0),
                   pitch=0.0,
                   yaw=358.0,
                   spawn=Vector3(512, 56, 512),
                   bed_position=Vector3(0, 0, 0),
                   permission=PlayerPermission.MEMBER,
                   attributes=(
                       Attribute(0.0, 20.0, 20.0, 20.0,
                                 'minecraft:health'),
                       Attribute(0.0, 2048.0, 16.0, 16.0,
                                 'minecraft:follow_range'),
                       Attribute(
                           0.0,
                           1.0,
                           0.0,
                           0.0,
                           'minecraft:knockback_resistance'),
                       Attribute(0.0, 3.4028234663852886e+38,
                                 0.10000000149011612, 0.10000000149011612,
                                 'minecraft:movement'),
                       Attribute(
                           0.0,
                           3.4028234663852886e+38, 1.0, 1.0,
                           'minecraft:attack_damage'),
                       Attribute(
                           0.0,
                           3.4028234663852886e+38, 0.0, 0.0,
                           'minecraft:absorption'),
                       Attribute(0.0, 20.0, 10.0, 20.0,
                                 'minecraft:player.saturation'),
                       Attribute(
                           0.0,
                           5.0,
                           0.8000399470329285, 0.0,
                           'minecraft:player.exhaustion'),
                       Attribute(0.0, 20.0, 20.0, 20.0,
                                 'minecraft:player.hunger'),
                       Attribute(
                           0.0,
                           24791.0, 0.0, 0.0, 'minecraft:player.level'),
                       Attribute(0.0, 1.0, 0.0, 0.0, 'minecraft:player.experience'
                                 )),
                   metadata_flags=EntityMetaDataFlagValue.
                   create(always_show_nametag=True,
                          immobile=True,
                          swimmer=True,
                          affected_by_gravity=True,
                          fire_immune=True),
                   time=4800),
            event_factory.create(
                EventType.INVENTORY_LOADED,
                player_id=UUID('a302a666-4cac-3e3f-a6b8-685f9506f8fe'),
                inventory=(Inventory(
                    WindowType.INVENTORY,
                    tuple(
                        Item(ItemType.AIR, None, None, None, None)
                        for _ in range(36))),
                           Inventory(
                               WindowType.ARMOR,
                               tuple(
                                   Item(ItemType.AIR, None, None, None, None)
                                   for _ in range(4))),
                           Inventory(WindowType.CREATIVE,
                                     INVENTORY_CONTENT_ITEMS121))),
            event_factory.create(
                EventType.SLOT_INITIALIZED,
                player_id=UUID('a302a666-4cac-3e3f-a6b8-685f9506f8fe'),
                inventory_slot=0,
                hotbar_slot=0,
                equipped_item=Item(ItemType.AIR, None, None, None, None))))

        self.proxy.send(EncodedData(self.data.created).is_(
            RakNetPacket(
                RakNetPacketType.FRAME_SET_4, packet_sequence_num=13).that_has(
                    RakNetFrame(
                        RakNetFrameType.RELIABLE_ORDERED,
                        reliable_message_num=12,
                        message_ordering_index=3,
                        message_ordering_chanel=0).that_has(Batch().that_has(
                            GamePacket(
                                GamePacketType.RESOURCE_PACK_CLIENT_RESPONSE,
                                status=ResourcePackStatus.COMPLETED,
                                pack_ids=()))))),
                        from_=self._CLIENT_ADDRESS[0])

        self.proxy.next_moment()  # PLAYER_LOGGED_IN

        received_data = self.proxy.receive()
        self.assert_that(
            received_data, {
                self._CLIENT_ADDRESS[0]: [
                    EncodedData(self.data.created).is_(
                        RakNetPacket(RakNetPacketType.ACK,
                                     record_count=1,
                                     range_max_equals_to_min=True,
                                     packet_sequence_number_min=13,
                                     packet_sequence_number_max=None)),
                    EncodedData(self.data.created).is_(
                        RakNetPacket(RakNetPacketType.FRAME_SET_4,
                                     packet_sequence_num=5).
                        that_has(
                            RakNetFrame(RakNetFrameType.RELIABLE_ORDERED,
                                        reliable_message_num=4,
                                        message_ordering_index=4,
                                        message_ordering_chanel=0).
                            that_has(Batch().that_has(
                                GamePacket(
                                    GamePacketType.START_GAME,
                                    entity_unique_id=1,
                                    entity_runtime_id=1,
                                    player_game_mode=GameMode.SURVIVAL,
                                    player_position=Vector3(
                                        x=256.0, y=64.0, z=256.0),
                                    pitch=0.0,
                                    yaw=358.0,
                                    seed=0,
                                    dimension=Dimension.OVERWORLD,
                                    generator=GeneratorType.INFINITE,
                                    world_game_mode=GameMode.SURVIVAL,
                                    difficulty=Difficulty.NORMAL,
                                    spawn=Vector3(x=512, y=56, z=512),
                                    has_achievements_disabled=True,
                                    time=4800,
                                    edu_mode=False,
                                    rain_level=0.0,
                                    lightning_level=0.0,
                                    is_multi_player_game=True,
                                    has_lan_broadcast=True,
                                    has_xbox_live_broadcast=False,
                                    commands_enabled=True,
                                    is_texture_packs_required=True,
                                    game_rules=(),
                                    has_bonus_chest_enabled=False,
                                    has_start_with_map_enabled=False,
                                    has_trust_players_enabled=False,
                                    default_player_permission=PlayerPermission.
                                    MEMBER,
                                    xbox_live_broadcast_mode=0,
                                    level_id='',
                                    world_name='PyMineHub',
                                    premium_world_template_id='',
                                    unknown_bool=False,
                                    current_tick=0,
                                    enchantment_seed=0))),
                            RakNetFrame(RakNetFrameType.RELIABLE_ORDERED,
                                        reliable_message_num=5,
                                        message_ordering_index=5,
                                        message_ordering_chanel=0).that_has(
                                            Batch().that_has(
                                                GamePacket(
                                                    GamePacketType.SET_TIME,
                                                    time=4800))),
                            RakNetFrame(RakNetFrameType.RELIABLE_ORDERED,
                                        reliable_message_num=6,
                                        message_ordering_index=6,
                                        message_ordering_chanel=0).
                            that_has(Batch().that_has(
                                GamePacket(
                                    GamePacketType.UPDATE_ATTRIBUTES,
                                    entity_runtime_id=1,
                                    entries=(
                                        Attribute(min=0.0,
                                                  max=20.0,
                                                  current=20.0,
                                                  default=20.0,
                                                  name='minecraft:health'),
                                        Attribute(
                                            min=0.0,
                                            max=2048.0,
                                            current=16.0,
                                            default=16.0,
                                            name='minecraft:follow_range'),
                                        Attribute(
                                            min=0.0,
                                            max=1.0,
                                            current=0.0,
                                            default=0.0,
                                            name=
                                            'minecraft:knockback_resistance'),
                                        Attribute(min=0.0,
                                                  max=3.4028234663852886e+38,
                                                  current=0.10000000149011612,
                                                  default=0.10000000149011612,
                                                  name='minecraft:movement'),
                                        Attribute(
                                            min=0.0,
                                            max=3.4028234663852886e+38,
                                            current=1.0,
                                            default=1.0,
                                            name='minecraft:attack_damage'),
                                        Attribute(min=0.0,
                                                  max=3.4028234663852886e+38,
                                                  current=0.0,
                                                  default=0.0,
                                                  name='minecraft:absorption'),
                                        Attribute(
                                            min=0.0,
                                            max=20.0,
                                            current=10.0,
                                            default=20.0,
                                            name='minecraft:player.saturation'
                                        ),
                                        Attribute(
                                            min=0.0,
                                            max=5.0,
                                            current=0.8000399470329285,
                                            default=0.0,
                                            name='minecraft:player.exhaustion'
                                        ),
                                        Attribute(
                                            min=0.0,
                                            max=20.0,
                                            current=20.0,
                                            default=20.0,
                                            name='minecraft:player.hunger'),
                                        Attribute(
                                            min=0.0,
                                            max=24791.0,
                                            current=0.0,
                                            default=0.0,
                                            name='minecraft:player.level'),
                                        Attribute(
                                            min=0.0,
                                            max=1.0,
                                            current=0.0,
                                            default=0.0,
                                            name='minecraft:player.experience')
                                    )))),
                            RakNetFrame(RakNetFrameType.RELIABLE_ORDERED,
                                        reliable_message_num=7,
                                        message_ordering_index=7,
                                        message_ordering_chanel=0).
                            that_has(Batch().that_has(
                                GamePacket(
                                    GamePacketType.SET_ENTITY_DATA,
                                    entity_runtime_id=1,
                                    metadata=(
                                        EntityMetaData(key=EntityMetaDataKey.
                                                       FLAGS,
                                                       type=MetaDataType.LONG,
                                                       value=211106233679872),
                                        EntityMetaData(
                                            key=EntityMetaDataKey.AIR,
                                            type=MetaDataType.SHORT,
                                            value=0),
                                        EntityMetaData(
                                            key=EntityMetaDataKey.MAX_AIR,
                                            type=MetaDataType.SHORT,
                                            value=400),
                                        EntityMetaData(
                                            key=EntityMetaDataKey.NAMETAG,
                                            type=MetaDataType.STRING,
                                            value='CantingAtol3766'),
                                        EntityMetaData(key=EntityMetaDataKey.
                                                       LEAD_HOLDER_EID,
                                                       type=MetaDataType.LONG,
                                                       value=1),
                                        EntityMetaData(
                                            key=EntityMetaDataKey.SCALE,
                                            type=MetaDataType.FLOAT,
                                            value=1.0),
                                        EntityMetaData(
                                            key=EntityMetaDataKey.BED_POSITION,
                                            type=MetaDataType.INT_VECTOR3,
                                            value=Vector3(x=0, y=0, z=0)))))),
                            RakNetFrame(RakNetFrameType.RELIABLE_ORDERED,
                                        reliable_message_num=8,
                                        message_ordering_index=8,
                                        message_ordering_chanel=0).
                            that_has(Batch().that_has(
                                GamePacket(
                                    GamePacketType.AVAILABLE_COMMANDS,
                                    enum_values=('suicide', 'pl', 'msg', 'w',
                                                 'about', 'ver'),
                                    postfixes=(),
                                    enums=(CommandEnum(name='kill_aliases',
                                                       index=(0, )),
                                           CommandEnum(
                                               name='plugins_aliases',
                                               index=(1, )),
                                           CommandEnum(
                                               name='tell_aliases',
                                               index=(2, 3)),
                                           CommandEnum(
                                               name='version_aliases',
                                               index=(4, 5))),
                                    command_data=(
                                        CommandData(
                                            name='ban',
                                            description=
                                            'Prevents the specified player from using this server',
                                            flags=0,
                                            permission=0,
                                            aliases=-1,
                                            overloads=((CommandParameter(
                                                name='args',
                                                type=1048593,
                                                is_optional=True), ), )),
                                        CommandData(
                                            name='kill',
                                            description=
                                            'Commit suicide or kill other players',
                                            flags=0,
                                            permission=0,
                                            aliases=0,
                                            overloads=((CommandParameter(
                                                name='args',
                                                type=1048593,
                                                is_optional=True), ), )),
                                        CommandData(
                                            name='plugins',
                                            description=
                                            'Gets a list of plugins running on the server',
                                            flags=0,
                                            permission=0,
                                            aliases=1,
                                            overloads=((CommandParameter(
                                                name='args',
                                                type=1048593,
                                                is_optional=True), ), )),
                                        CommandData(
                                            name='tell',
                                            description=
                                            'Sends a private message to the given player',
                                            flags=0,
                                            permission=0,
                                            aliases=2,
                                            overloads=((CommandParameter(
                                                name='args',
                                                type=1048593,
                                                is_optional=True), ), )),
                                        CommandData(
                                            name='version',
                                            description=
                                            'Gets the version of this server including any plugins in use',
                                            flags=0,
                                            permission=0,
                                            aliases=3,
                                            overloads=((CommandParameter(
                                                name='args',
                                                type=1048593,
                                                is_optional=True), ), )),
                                    )))),
                            RakNetFrame(RakNetFrameType.RELIABLE_ORDERED,
                                        reliable_message_num=9,
                                        message_ordering_index=9,
                                        message_ordering_chanel=0).
                            that_has(Batch().that_has(
                                GamePacket(
                                    GamePacketType.ADVENTURE_SETTINGS,
                                    flags=32,
                                    command_permission=CommandPermission.
                                    NORMAL,
                                    flags2=4294967295,
                                    player_permission=PlayerPermission.MEMBER,
                                    custom_flags=0,
                                    entity_unique_id=1)))))
                ]
            })

        self.proxy.next_moment()  # INVENTORY_LOADED

        received_data = self.proxy.receive()
        self.assert_that(
            received_data,
            {
                self._CLIENT_ADDRESS[0]: [
                    EncodedData(self.data.created).is_(
                        RakNetPacket(RakNetPacketType.FRAME_SET_4,
                                     packet_sequence_num=6).
                        that_has(
                            RakNetFrame(RakNetFrameType.RELIABLE_ORDERED,
                                        reliable_message_num=10,
                                        message_ordering_index=10,
                                        message_ordering_chanel=0).
                            that_has(Batch().that_has(
                                GamePacket(GamePacketType.INVENTORY_CONTENT,
                                           window_type=WindowType.INVENTORY,
                                           items=tuple(
                                               Item(type=ItemType.AIR,
                                                    aux_value=None,
                                                    nbt=None,
                                                    place_on=None,
                                                    destroy=None)
                                               for _ in range(36))))),
                            RakNetFrame(
                                RakNetFrameType.RELIABLE_ORDERED,
                                reliable_message_num=11,
                                message_ordering_index=11,
                                message_ordering_chanel=0).that_has(
                                    Batch().that_has(
                                        GamePacket(
                                            GamePacketType.INVENTORY_CONTENT,
                                            window_type=WindowType.ARMOR,
                                            items=tuple(
                                                Item(type=ItemType.AIR,
                                                     aux_value=None,
                                                     nbt=None,
                                                     place_on=None,
                                                     destroy=None)
                                                for _ in range(4))))))),
                    EncodedData(
                        self.data.that_is_response_of('inventory_content')).
                    is_(
                        RakNetPacket(
                            RakNetPacketType.FRAME_SET_4,
                            packet_sequence_num=7).that_has(
                                RakNetFrame(
                                    RakNetFrameType.RELIABLE_ORDERED_HAS_SPLIT,
                                    reliable_message_num=12,
                                    message_ordering_index=12,
                                    message_ordering_chanel=0,
                                    split_packet_count=2,
                                    split_packet_id=0,
                                    split_packet_index=0))),
                    EncodedData(
                        self.data.that_is_response_of('inventory_content')
                    ).is_(
                        RakNetPacket(
                            RakNetPacketType.FRAME_SET_4,
                            packet_sequence_num=8).that_has(
                                RakNetFrame(
                                    RakNetFrameType.RELIABLE_ORDERED_HAS_SPLIT,
                                    reliable_message_num=13,
                                    message_ordering_index=12,
                                    message_ordering_chanel=0,
                                    split_packet_count=2,
                                    split_packet_id=0,
                                    split_packet_index=1).that_has(Batch(
                                    ).that_has(
                                        GamePacket(
                                            GamePacketType.INVENTORY_CONTENT,
                                            window_type=WindowType.CREATIVE
                                            # items
                                        )))))
                ]
            })

        self.proxy.next_moment()  # SLOT_INITIALIZED

        received_data = self.proxy.receive()
        self.assert_that(
            received_data, {
                self._CLIENT_ADDRESS[0]: [
                    EncodedData(self.data.created).is_(
                        RakNetPacket(
                            RakNetPacketType.FRAME_SET_4,
                            packet_sequence_num=9).that_has(
                                RakNetFrame(RakNetFrameType.RELIABLE_ORDERED,
                                            reliable_message_num=14,
                                            message_ordering_index=13,
                                            message_ordering_chanel=0).
                                that_has(Batch().that_has(
                                    GamePacket(
                                        GamePacketType.MOB_EQUIPMENT,
                                        entity_runtime_id=1,
                                        item=Item(type=ItemType.AIR,
                                                  aux_value=None,
                                                  nbt=None,
                                                  place_on=None,
                                                  destroy=None),
                                        inventory_slot=0,
                                        hotbar_slot=0,
                                        window_type=WindowType.INVENTORY))),
                                RakNetFrame(RakNetFrameType.RELIABLE_ORDERED,
                                            reliable_message_num=15,
                                            message_ordering_index=14,
                                            message_ordering_chanel=0).
                                that_has(Batch().that_has(
                                    GamePacket(
                                        GamePacketType.INVENTORY_SLOT,
                                        window_type=WindowType.INVENTORY,
                                        inventory_slot=0,
                                        item=Item(type=ItemType.AIR,
                                                  aux_value=None,
                                                  nbt=None,
                                                  place_on=None,
                                                  destroy=None)))))),
                    *[
                        EncodedData(
                            self.data.that_is_response_of('crafting_data')).
                        is_(
                            RakNetPacket(
                                RakNetPacketType.FRAME_SET_4,
                                packet_sequence_num=10 + i).that_has(
                                    RakNetFrame(
                                        RakNetFrameType.
                                        RELIABLE_ORDERED_HAS_SPLIT,
                                        reliable_message_num=16 + i,
                                        message_ordering_index=15,
                                        message_ordering_chanel=0,
                                        split_packet_count=17,
                                        split_packet_id=1,
                                        split_packet_index=i)).with_label(
                                            by_index(0x0a, i)))
                        for i in range(16)
                    ],
                    EncodedData(
                        self.data.that_is_response_of('crafting_data')).is_(
                            RakNetPacket(RakNetPacketType.FRAME_SET_4,
                                         packet_sequence_num=26).
                            that_has(
                                RakNetFrame(
                                    RakNetFrameType.RELIABLE_ORDERED_HAS_SPLIT,
                                    reliable_message_num=32,
                                    message_ordering_index=15,
                                    message_ordering_chanel=0,
                                    split_packet_count=17,
                                    split_packet_id=1,
                                    split_packet_index=16).
                                that_has(Batch().that_has(
                                    GamePacket(GamePacketType.CRAFTING_DATA))),
                                RakNetFrame(
                                    RakNetFrameType.RELIABLE_ORDERED,
                                    reliable_message_num=33,
                                    message_ordering_index=16,
                                    message_ordering_chanel=0).that_has(
                                        Batch().that_has(
                                            GamePacket(
                                                GamePacketType.PLAYER_LIST,
                                                list_type=PlayerListType.ADD,
                                                entries=())))))
                ]
            })

        player_position = Vector3(256.0, 64.0, 256.0)
        required_chunk = len(tuple(to_chunk_area(player_position, 2)))
        expected_chunk_pos = tuple(p.position
                                   for p in to_chunk_area(player_position, 8))

        self.proxy.push_event(
            ActionType.REQUEST_CHUNK,
            tuple(
                event_factory.create(EventType.FULL_CHUNK_LOADED, position,
                                     CHUNK_DATA, None)
                for position in expected_chunk_pos),
        )
        self.proxy.push_event(ActionType.REQUEST_ENTITY, tuple())

        self.proxy.send(EncodedData(self.data.created).is_(
            RakNetPacket(
                RakNetPacketType.FRAME_SET_4, packet_sequence_num=14).that_has(
                    RakNetFrame(
                        RakNetFrameType.RELIABLE_ORDERED,
                        reliable_message_num=13,
                        message_ordering_index=4,
                        message_ordering_chanel=0).that_has(Batch().that_has(
                            GamePacket(GamePacketType.REQUEST_CHUNK_RADIUS,
                                       radius=8))))),
                        from_=self._CLIENT_ADDRESS[0])

        received_data = self.proxy.receive()
        self.assert_that(
            received_data, {
                self._CLIENT_ADDRESS[0]: [
                    EncodedData(self.data.created).is_(
                        RakNetPacket(RakNetPacketType.ACK,
                                     record_count=1,
                                     range_max_equals_to_min=True,
                                     packet_sequence_number_min=14,
                                     packet_sequence_number_max=None)),
                    EncodedData(self.data.created).is_(
                        RakNetPacket(
                            RakNetPacketType.FRAME_SET_4,
                            packet_sequence_num=27).that_has(
                                RakNetFrame(RakNetFrameType.RELIABLE_ORDERED,
                                            reliable_message_num=34,
                                            message_ordering_index=17,
                                            message_ordering_chanel=0).
                                that_has(Batch().that_has(
                                    GamePacket(
                                        GamePacketType.CHUNK_RADIUS_UPDATED,
                                        radius=8)))))
                ]
            })

        expected_packet_sequence_num = 28
        expected_reliable_message_num = 35
        expected_message_ordering_index = 18

        for i in range(len(expected_chunk_pos)):
            self.proxy.next_moment()  # FULL_CHUNK_LOADED

            received_data = self.proxy.receive()
            if i + 1 != required_chunk:
                self.assert_that(
                    received_data, {
                        self._CLIENT_ADDRESS[0]: [
                            EncodedData(self.data.created).is_(
                                RakNetPacket(
                                    RakNetPacketType.FRAME_SET_4,
                                    packet_sequence_num=
                                    expected_packet_sequence_num).that_has(
                                        RakNetFrame(
                                            RakNetFrameType.RELIABLE_ORDERED,
                                            reliable_message_num=
                                            expected_reliable_message_num,
                                            message_ordering_index=
                                            expected_message_ordering_index,
                                            message_ordering_chanel=0).
                                        that_has(Batch().that_has(
                                            GamePacket(
                                                GamePacketType.FULL_CHUNK_DATA,
                                                position=expected_chunk_pos[i],
                                                data=CHUNK_DATA)))).with_label(
                                                    i + 1))
                        ]
                    })
                expected_packet_sequence_num += 1
                expected_reliable_message_num += 1
                expected_message_ordering_index += 1
            else:
                self.assert_that(
                    received_data, {
                        self._CLIENT_ADDRESS[0]: [
                            EncodedData(self.data.created).is_(
                                RakNetPacket(
                                    RakNetPacketType.FRAME_SET_4,
                                    packet_sequence_num=
                                    expected_packet_sequence_num).that_has(
                                        RakNetFrame(
                                            RakNetFrameType.RELIABLE_ORDERED,
                                            reliable_message_num=
                                            expected_reliable_message_num,
                                            message_ordering_index=
                                            expected_message_ordering_index,
                                            message_ordering_chanel=0).
                                        that_has(Batch().that_has(
                                            GamePacket(
                                                GamePacketType.FULL_CHUNK_DATA,
                                                position=expected_chunk_pos[i],
                                                data=CHUNK_DATA))),
                                        RakNetFrame(
                                            RakNetFrameType.RELIABLE_ORDERED,
                                            reliable_message_num=
                                            expected_reliable_message_num + 1,
                                            message_ordering_index=
                                            expected_message_ordering_index +
                                            1,
                                            message_ordering_chanel=0).
                                        that_has(Batch().that_has(
                                            GamePacket(
                                                GamePacketType.PLAY_STATUS,
                                                status=PlayStatus.PLAYER_SPAWN)
                                        )),
                                        RakNetFrame(
                                            RakNetFrameType.RELIABLE_ORDERED,
                                            reliable_message_num=
                                            expected_reliable_message_num + 2,
                                            message_ordering_index=
                                            expected_message_ordering_index +
                                            2,
                                            message_ordering_chanel=0).
                                        that_has(Batch().that_has(
                                            GamePacket(
                                                GamePacketType.TEXT,
                                                text_type=TextType.TRANSLATION,
                                                needs_translation=False,
                                                source=None,
                                                message=
                                                '§e%multiplayer.player.joined',
                                                parameters=(
                                                    'CantingAtol3766', ),
                                                xbox_user_id='')))).with_label(
                                                    i + 1))
                        ]
                    })
                expected_packet_sequence_num += 1
                expected_reliable_message_num += 3
                expected_message_ordering_index += 3
Exemple #13
0
    def test_put_item_max_quantity(self):
        self.test_login()

        x = 257
        entity_id = 1
        quantity = 0

        for _ in range(64):
            x += 1
            entity_id += 1
            quantity += 1

            # break block
            self.perform_action(ActionType.BREAK_BLOCK,
                                entity_runtime_id=1,
                                position=Vector3(x=x, y=62, z=257))

            actual_event = self.next_event()
            expected_event = event_factory.create(
                EventType.BLOCK_UPDATED,
                (PlacedBlock(Vector3(x=x, y=62, z=257),
                             Block(type=BlockType.AIR, aux_value=0)), ))
            self.assertEqual(expected_event, actual_event)

            actual_event = self.next_event()
            expected_event = event_factory.create(EventType.ITEM_SPAWNED,
                                                  entity_unique_id=entity_id,
                                                  entity_runtime_id=entity_id,
                                                  item=Item(type=ItemType.DIRT,
                                                            aux_value=1,
                                                            nbt=b'',
                                                            place_on=(),
                                                            destroy=()),
                                                  position=Vector3(x=x + 0.5,
                                                                   y=62.25,
                                                                   z=257.5),
                                                  motion=Vector3(x=0.0,
                                                                 y=0.0,
                                                                 z=0.0),
                                                  metadata=())
            self.assertEqual(expected_event, actual_event)

            # take item
            self.perform_action(ActionType.MOVE_PLAYER,
                                entity_runtime_id=1,
                                position=Vector3(x=x + 0.5, y=63.625, z=257),
                                pitch=0.0,
                                yaw=0.0,
                                head_yaw=0.0,
                                mode=MoveMode.NORMAL,
                                on_ground=True,
                                riding_eid=0,
                                need_response=False)

            actual_event = self.next_event()
            expected_event = event_factory.create(
                EventType.INVENTORY_UPDATED,
                player_id=self.get_player_id(0),
                inventory_slot=0,
                slot_item=Item(type=ItemType.DIRT,
                               aux_value=quantity,
                               nbt=b'',
                               place_on=(),
                               destroy=()))
            self.assertEqual(expected_event, actual_event)

            actual_event = self.next_event()
            expected_event = event_factory.create(EventType.ENTITY_REMOVED,
                                                  entity_runtime_id=entity_id)
            self.assertEqual(expected_event, actual_event)

            actual_event = self.next_event()
            expected_event = event_factory.create(EventType.PLAYER_MOVED,
                                                  entity_runtime_id=1,
                                                  position=Vector3(x=x + 0.5,
                                                                   y=63.625,
                                                                   z=257),
                                                  pitch=0.0,
                                                  yaw=0.0,
                                                  head_yaw=0.0,
                                                  mode=MoveMode.NORMAL,
                                                  on_ground=True,
                                                  riding_eid=0,
                                                  need_response=False)
            self.assertEqual(expected_event, actual_event)

            actual_event = self.next_event()
            expected_event = event_factory.create(EventType.ITEM_TAKEN,
                                                  item_runtime_id=entity_id,
                                                  player_runtime_id=1)
            self.assertEqual(expected_event, actual_event)

            # equip
            self.perform_action(ActionType.EQUIP,
                                entity_runtime_id=1,
                                inventory_slot=0,
                                hotbar_slot=0,
                                item=Item(type=ItemType.DIRT,
                                          aux_value=quantity,
                                          nbt=b'',
                                          place_on=(),
                                          destroy=()))

            actual_event = self.next_event()
            expected_event = event_factory.create(EventType.EQUIPMENT_UPDATED,
                                                  entity_runtime_id=1,
                                                  inventory_slot=0,
                                                  hotbar_slot=0,
                                                  equipped_item=Item(
                                                      type=ItemType.DIRT,
                                                      aux_value=quantity,
                                                      nbt=b'',
                                                      place_on=(),
                                                      destroy=()))
            self.assertEqual(expected_event, actual_event)

        x += 1
        entity_id += 1
        quantity = 1  # next inventory slot

        # break block
        self.perform_action(ActionType.BREAK_BLOCK,
                            entity_runtime_id=1,
                            position=Vector3(x=x, y=62, z=257))

        actual_event = self.next_event()
        expected_event = event_factory.create(
            EventType.BLOCK_UPDATED,
            (PlacedBlock(Vector3(x=x, y=62, z=257),
                         Block(type=BlockType.AIR, aux_value=0)), ))
        self.assertEqual(expected_event, actual_event)

        actual_event = self.next_event()
        expected_event = event_factory.create(EventType.ITEM_SPAWNED,
                                              entity_unique_id=entity_id,
                                              entity_runtime_id=entity_id,
                                              item=Item(type=ItemType.DIRT,
                                                        aux_value=1,
                                                        nbt=b'',
                                                        place_on=(),
                                                        destroy=()),
                                              position=Vector3(x=x + 0.5,
                                                               y=62.25,
                                                               z=257.5),
                                              motion=Vector3(x=0.0,
                                                             y=0.0,
                                                             z=0.0),
                                              metadata=())
        self.assertEqual(expected_event, actual_event)

        # take item
        self.perform_action(ActionType.MOVE_PLAYER,
                            entity_runtime_id=1,
                            position=Vector3(x=x + 0.5, y=63.625, z=257),
                            pitch=0.0,
                            yaw=0.0,
                            head_yaw=0.0,
                            mode=MoveMode.NORMAL,
                            on_ground=True,
                            riding_eid=0,
                            need_response=False)

        actual_event = self.next_event()
        expected_event = event_factory.create(
            EventType.INVENTORY_UPDATED,
            player_id=self.get_player_id(0),
            inventory_slot=1,  # next inventory slot
            slot_item=Item(type=ItemType.DIRT,
                           aux_value=quantity,
                           nbt=b'',
                           place_on=(),
                           destroy=()))
        self.assertEqual(expected_event, actual_event)

        actual_event = self.next_event()
        expected_event = event_factory.create(EventType.ENTITY_REMOVED,
                                              entity_runtime_id=entity_id)
        self.assertEqual(expected_event, actual_event)

        actual_event = self.next_event()
        expected_event = event_factory.create(EventType.PLAYER_MOVED,
                                              entity_runtime_id=1,
                                              position=Vector3(x=x + 0.5,
                                                               y=63.625,
                                                               z=257),
                                              pitch=0.0,
                                              yaw=0.0,
                                              head_yaw=0.0,
                                              mode=MoveMode.NORMAL,
                                              on_ground=True,
                                              riding_eid=0,
                                              need_response=False)
        self.assertEqual(expected_event, actual_event)

        actual_event = self.next_event()
        expected_event = event_factory.create(EventType.ITEM_TAKEN,
                                              item_runtime_id=entity_id,
                                              player_runtime_id=1)
        self.assertEqual(expected_event, actual_event)

        # equip
        self.perform_action(ActionType.EQUIP,
                            entity_runtime_id=1,
                            inventory_slot=0,
                            hotbar_slot=0,
                            item=Item(type=ItemType.DIRT,
                                      aux_value=64,
                                      nbt=b'',
                                      place_on=(),
                                      destroy=()))

        actual_event = self.next_event()
        expected_event = event_factory.create(EventType.EQUIPMENT_UPDATED,
                                              entity_runtime_id=1,
                                              inventory_slot=0,
                                              hotbar_slot=0,
                                              equipped_item=Item(
                                                  type=ItemType.DIRT,
                                                  aux_value=64,
                                                  nbt=b'',
                                                  place_on=(),
                                                  destroy=()))
        self.assertEqual(expected_event, actual_event)
Exemple #14
0
    def test_login(self):
        self._create_player(1)
        self.perform_action(ActionType.LOGIN_PLAYER,
                            self.get_player_id(0),
                            is_guest=False)

        actual_event = self.next_event()
        expected_event = event_factory.create(
            EventType.PLAYER_LOGGED_IN,
            player_id=self.get_player_id(0),
            entity_unique_id=1,
            entity_runtime_id=1,
            game_mode=GameMode.SURVIVAL,
            position=Vector3(x=256.5, y=64.625, z=256.5),
            pitch=0.0,
            yaw=0.0,
            spawn=Vector3(x=256, y=56, z=256),
            bed_position=Vector3(x=0, y=0, z=0),
            permission=PlayerPermission.MEMBER,
            attributes=(Attribute(min=0.0,
                                  max=20.0,
                                  current=20.0,
                                  default=20.0,
                                  name='minecraft:health'),
                        Attribute(min=0.0,
                                  max=2048.0,
                                  current=16.0,
                                  default=16.0,
                                  name='minecraft:follow_range'),
                        Attribute(min=0.0,
                                  max=1.0,
                                  current=0.0,
                                  default=0.0,
                                  name='minecraft:knockback_resistance'),
                        Attribute(min=0.0,
                                  max=3.4028234663852886e+38,
                                  current=0.10000000149011612,
                                  default=0.10000000149011612,
                                  name='minecraft:movement'),
                        Attribute(min=0.0,
                                  max=3.4028234663852886e+38,
                                  current=1.0,
                                  default=1.0,
                                  name='minecraft:attack_damage'),
                        Attribute(min=0.0,
                                  max=3.4028234663852886e+38,
                                  current=0.0,
                                  default=0.0,
                                  name='minecraft:absorption'),
                        Attribute(min=0.0,
                                  max=20.0,
                                  current=10.0,
                                  default=20.0,
                                  name='minecraft:player.saturation'),
                        Attribute(min=0.0,
                                  max=5.0,
                                  current=0.8000399470329285,
                                  default=0.0,
                                  name='minecraft:player.exhaustion'),
                        Attribute(min=0.0,
                                  max=20.0,
                                  current=20.0,
                                  default=20.0,
                                  name='minecraft:player.hunger'),
                        Attribute(min=0.0,
                                  max=24791.0,
                                  current=0.0,
                                  default=0.0,
                                  name='minecraft:player.level'),
                        Attribute(min=0.0,
                                  max=1.0,
                                  current=0.0,
                                  default=0.0,
                                  name='minecraft:player.experience')),
            metadata_flags=EntityMetaDataFlagValue(flags=211106233679872),
            time=4800)
        self.assertEqual(expected_event, actual_event)

        actual_event = self.next_event()
        self.assertEqual(4880, len(actual_event.inventory[2].slots))
        expected_event = event_factory.create(
            EventType.INVENTORY_LOADED,
            player_id=self.get_player_id(0),
            inventory=(Inventory(window_type=WindowType.INVENTORY,
                                 slots=tuple(
                                     Item(type=ItemType.AIR,
                                          aux_value=None,
                                          nbt=None,
                                          place_on=None,
                                          destroy=None) for _ in range(36))),
                       Inventory(window_type=WindowType.ARMOR,
                                 slots=tuple(
                                     Item(type=ItemType.AIR,
                                          aux_value=None,
                                          nbt=None,
                                          place_on=None,
                                          destroy=None) for _ in range(4))),
                       Inventory(window_type=WindowType.CREATIVE,
                                 slots=actual_event.inventory[2].slots)))
        self.assertEqual(expected_event, actual_event)

        actual_event = self.next_event()
        expected_event = event_factory.create(EventType.SLOT_INITIALIZED,
                                              player_id=self.get_player_id(0),
                                              equipped_item=Item(
                                                  type=ItemType.AIR,
                                                  aux_value=None,
                                                  nbt=None,
                                                  place_on=None,
                                                  destroy=None),
                                              inventory_slot=None,
                                              hotbar_slot=0)
        self.assertEqual(expected_event, actual_event)
Exemple #15
0
    def test_item_taken(self):
        self.test_break_block()
        self.perform_action(ActionType.MOVE_PLAYER,
                            entity_runtime_id=1,
                            position=Vector3(x=256.54833984375,
                                             y=63.85153579711914,
                                             z=257.70001220703125),
                            pitch=54.88166809082031,
                            yaw=-1.9647674560546875,
                            head_yaw=-1.9647674560546875,
                            mode=MoveMode.NORMAL,
                            on_ground=True,
                            riding_eid=0,
                            need_response=False)

        actual_event = self.next_event()
        expected_event = event_factory.create(EventType.INVENTORY_UPDATED,
                                              player_id=self.get_player_id(0),
                                              inventory_slot=0,
                                              slot_item=Item(
                                                  type=ItemType.DIRT,
                                                  aux_value=1,
                                                  nbt=b'',
                                                  place_on=(),
                                                  destroy=()))
        self.assertEqual(expected_event, actual_event)

        actual_event = self.next_event()
        expected_event = event_factory.create(EventType.ENTITY_REMOVED,
                                              entity_runtime_id=2)
        self.assertEqual(expected_event, actual_event)

        actual_event = self.next_event()
        expected_event = event_factory.create(EventType.PLAYER_MOVED,
                                              entity_runtime_id=1,
                                              position=Vector3(
                                                  x=256.54833984375,
                                                  y=63.625,
                                                  z=257.70001220703125),
                                              pitch=54.88166809082031,
                                              yaw=-1.9647674560546875,
                                              head_yaw=-1.9647674560546875,
                                              mode=MoveMode.NORMAL,
                                              on_ground=True,
                                              riding_eid=0,
                                              need_response=False)
        self.assertEqual(expected_event, actual_event)

        actual_event = self.next_event()
        expected_event = event_factory.create(EventType.ITEM_TAKEN,
                                              item_runtime_id=2,
                                              player_runtime_id=1)
        self.assertEqual(expected_event, actual_event)

        self.perform_action(ActionType.EQUIP,
                            entity_runtime_id=1,
                            inventory_slot=0,
                            hotbar_slot=0,
                            item=Item(type=ItemType.DIRT,
                                      aux_value=1,
                                      nbt=b'',
                                      place_on=(),
                                      destroy=()))

        actual_event = self.next_event()
        expected_event = event_factory.create(EventType.EQUIPMENT_UPDATED,
                                              entity_runtime_id=1,
                                              inventory_slot=0,
                                              hotbar_slot=0,
                                              equipped_item=Item(
                                                  type=ItemType.DIRT,
                                                  aux_value=1,
                                                  nbt=b'',
                                                  place_on=(),
                                                  destroy=()))
        self.assertEqual(expected_event, actual_event)