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)
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)
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)
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)
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)
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)
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)
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))), )) ] })
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))), )), ] })
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])
def event(self) -> Event: return event_factory.create(EventType.ITEM_TAKEN, self._item_entity.entity_runtime_id, self._player_entity.entity_runtime_id)
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
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)
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)
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)