diff options
Diffstat (limited to 'src/v1_15_2.rs')
-rw-r--r-- | src/v1_15_2.rs | 668 |
1 files changed, 615 insertions, 53 deletions
diff --git a/src/v1_15_2.rs b/src/v1_15_2.rs index d2ee960..1569d80 100644 --- a/src/v1_15_2.rs +++ b/src/v1_15_2.rs @@ -1,6 +1,9 @@ use crate::{*, uuid::*, types::*}; use std::fmt::Debug; +#[cfg(test)] +use crate::protocol::TestRandom; + #[derive(Debug, PartialEq, Eq, Clone, Copy)] pub enum PacketDirection { ClientBound, @@ -804,56 +807,6 @@ proto_byte_enum!(HandshakeNextState, 0x02 :: Login ); -macro_rules! counted_array_type { - ($name: ident, $countert: ty, $tousize_fn: ident, $fromusize_fn: ident) => { - #[derive(Debug, Clone, PartialEq)] - pub struct $name<T> where T: Debug + Clone + PartialEq { - pub data: Vec<T> - } - - impl<T> Serialize for $name<T> where T: Serialize + Debug + Clone + PartialEq { - fn mc_serialize<S: Serializer>(&self, to: &mut S) -> SerializeResult { - let count: $countert = $fromusize_fn(self.data.len()); - to.serialize_other(&count)?; - - for entry in &self.data { - to.serialize_other(entry)?; - } - - Ok(()) - } - } - - impl<T> Deserialize for $name<T> where T: Deserialize + Debug + Clone + PartialEq { - fn mc_deserialize(data: &[u8]) -> DeserializeResult<'_, Self> { - let Deserialized{value: raw_count, mut data} = <$countert>::mc_deserialize(data)?; - let count: usize = $tousize_fn(raw_count); - - let mut out = Vec::with_capacity(count); - for _ in 0..count { - let Deserialized{value: next, data: rest} = T::mc_deserialize(data)?; - data = rest; - out.push(next); - } - - Deserialized::ok(Self { data: out }, data) - } - } - - impl<T> Into<Vec<T>> for $name<T> where T: Debug + Clone + PartialEq { - fn into(self) -> Vec<T> { - self.data - } - } - - impl<T> From<Vec<T>> for $name<T> where T: Debug + Clone + PartialEq { - fn from(data: Vec<T>) -> Self { - Self { data } - } - } - } -} - #[inline] fn varint_to_usize(v: VarInt) -> usize { v.into() @@ -927,6 +880,19 @@ impl From<Vec<u8>> for RemainingBytes { } } +#[cfg(test)] +impl TestRandom for RemainingBytes { + fn test_gen_random() -> Self { + let mut size: usize = rand::random::<usize>() % 256; + let mut out = Vec::with_capacity(size); + for _ in 0..size { + out.push(rand::random()); + } + + Self{ data: out } + } +} + proto_byte_enum!(CardinalDirection, 0x00 :: South, 0x01 :: West, @@ -1052,12 +1018,12 @@ proto_byte_enum!(ChatPosition, #[derive(Copy, Clone, PartialEq, Debug)] pub struct BlockChangeHorizontalPosition { pub rel_x: u8, - pub rel_y: u8, + pub rel_z: u8, } impl Serialize for BlockChangeHorizontalPosition { fn mc_serialize<S: Serializer>(&self, to: &mut S) -> SerializeResult { - to.serialize_byte((self.rel_x & 0xF) << 4 | (self.rel_y & 0xF)) + to.serialize_byte((self.rel_x & 0xF) << 4 | (self.rel_z & 0xF)) } } @@ -1066,12 +1032,22 @@ impl Deserialize for BlockChangeHorizontalPosition { Ok(u8::mc_deserialize(data)?.map(move |b| { BlockChangeHorizontalPosition { rel_x: (b >> 4) & 0xF, - rel_y: b & 0xF, + rel_z: b & 0xF, } })) } } +#[cfg(test)] +impl TestRandom for BlockChangeHorizontalPosition { + fn test_gen_random() -> Self { + BlockChangeHorizontalPosition{ + rel_x: rand::random(), + rel_z: rand::random(), + } + } +} + __protocol_body_def_helper!(MultiBlockChangeRecord { horizontal_position: BlockChangeHorizontalPosition, y_coordinate: u8, @@ -1126,6 +1102,14 @@ impl Deserialize for BossBarAction { } } +#[cfg(test)] +impl TestRandom for BossBarAction { + fn test_gen_random() -> Self { + // todo + BossBarAction::Remove + } +} + proto_varint_enum!(BossBarColor, 0x00 :: Pink, 0x01 :: Blue, @@ -1322,6 +1306,14 @@ impl Deserialize for GameChangeReason { } } +#[cfg(test)] +impl TestRandom for GameChangeReason { + fn test_gen_random() -> Self { + // todo + GameChangeReason::PufferfishSting + } +} + proto_varint_enum!(MapIconType, 0x00 :: WhiteArrow, 0x01 :: GreenArrow, @@ -1414,6 +1406,13 @@ impl From<Option<MapColumnsSpec>> for MapColumns { } } +#[cfg(test)] +impl TestRandom for MapColumns { + fn test_gen_random() -> Self { + <Option<MapColumnsSpec>>::test_gen_random().into() + } +} + __protocol_body_def_helper!(TradeSpec { input_item_1: Option<Slot>, output_item: Option<Slot>, @@ -1516,6 +1515,13 @@ impl Deserialize for CombatEvent { } } +#[cfg(test)] +impl TestRandom for CombatEvent { + fn test_gen_random() -> Self { + CombatEvent::Enter // todo + } +} + #[derive(Clone, PartialEq, Debug)] pub struct PlayerInfoAction<A: Clone + PartialEq + Debug> { pub uuid: UUID4, @@ -1637,6 +1643,15 @@ impl Deserialize for PlayerInfoActionList { } } +#[cfg(test)] +impl TestRandom for PlayerInfoActionList { + fn test_gen_random() -> Self { + PlayerInfoActionList::Remove({ + vec!(UUID4::random()) + }) + } +} + fn serialize_vec_directly<I: Serialize, S: Serializer>(items: &Vec<I>, to: &mut S) -> SerializeResult { for item in items { to.serialize_other(item)?; @@ -1801,6 +1816,15 @@ impl Deserialize for WorldBorderAction { } } +#[cfg(test)] +impl TestRandom for WorldBorderAction { + fn test_gen_random() -> Self { + WorldBorderAction::SetSize(WorldBorderSetSizeSpec{ + diameter: f64::test_gen_random() + }) + } +} + #[derive(Clone, Copy, PartialEq, Debug, Eq)] pub enum ScoreboardPosition { List, @@ -1847,6 +1871,13 @@ impl Deserialize for ScoreboardPosition { } } +#[cfg(test)] +impl TestRandom for ScoreboardPosition { + fn test_gen_random() -> Self { + ScoreboardPosition::Sidebar + } +} + proto_varint_enum!(EquipmentSlot, 0x00 :: MainHand, 0x01 :: OffHand, @@ -1911,6 +1942,13 @@ impl Deserialize for ScoreboardObjectiveAction { } } +#[cfg(test)] +impl TestRandom for ScoreboardObjectiveAction { + fn test_gen_random() -> Self { + ScoreboardObjectiveAction::Remove + } +} + __protocol_body_def_helper!(EntityPropertySpec { key: String, value: f64, @@ -2028,6 +2066,13 @@ impl Deserialize for InteractKind { } } +#[cfg(test)] +impl TestRandom for InteractKind { + fn test_gen_random() -> Self { + InteractKind::Attack + } +} + proto_byte_flag!(ClientPlayerAbilities, 0x01 :: creative, 0x02 :: flying, @@ -2241,6 +2286,16 @@ impl Deserialize for RecipeSpec { } } +#[cfg(test)] +impl TestRandom for RecipeSpec { + fn test_gen_random() -> Self { + RecipeSpec { + recipe: Recipe::CraftingRepairItem, + id: String::test_gen_random(), + } + } +} + __protocol_body_def_helper!(RecipeIngredient { items: VarIntCountedArray<Option<Slot>> }); @@ -2292,6 +2347,19 @@ impl Deserialize for RecipeCraftingShapedSpec { } } +#[cfg(test)] +impl TestRandom for RecipeCraftingShapedSpec { + fn test_gen_random() -> Self { + RecipeCraftingShapedSpec { + width: VarInt::test_gen_random(), + height: VarInt::test_gen_random(), + group: String::test_gen_random(), + ingredients: vec!(RecipeIngredient::test_gen_random()), + result: <Option<Slot>>::test_gen_random(), + } + } +} + __protocol_body_def_helper!(RecipeSmeltingSpec { group: String, ingredient: RecipeIngredient, @@ -2388,4 +2456,498 @@ impl Deserialize for ChunkData { block_entities, }, data) } +} + +#[cfg(test)] +impl TestRandom for ChunkData { + fn test_gen_random() -> Self { + ChunkData{ + chunk_x: rand::random(), + chunk_z: rand::random(), + primary_bit_mask: VarInt::test_gen_random(), + heightmaps: NamedNbtTag::test_gen_random(), + biomes: None, + data: <VarIntCountedArray<u8>>::test_gen_random(), + block_entities: vec![] + } + } +} + +#[cfg(test)] +pub mod tests { + + use super::*; + use crate::packet_test_cases; + use crate::protocol::{RawPacket, Packet}; + use crate::types::BytesSerializer; + use crate::test_macros::BenchSerializer; + use test::Bencher; + + packet_test_cases!(Packet578, Handshake, HandshakeSpec, + test_handshake, bench_write_handshake, bench_read_handshake); + + packet_test_cases!(Packet578, StatusRequest, StatusRequestSpec, + test_status_request, bench_write_status_request, bench_read_status_request); + + packet_test_cases!(Packet578, StatusPing, StatusPingSpec, + test_status_ping, bench_write_status_ping, bench_read_status_ping); + + packet_test_cases!(Packet578, StatusResponse, StatusResponseSpec, + test_status_response, bench_write_status_response, bench_read_status_response); + + packet_test_cases!(Packet578, StatusPong, StatusPongSpec, + test_status_pong, bench_write_status_pong, bench_read_status_pong); + + packet_test_cases!(Packet578, LoginDisconnect, LoginDisconnectSpec, + test_login_disconnect, bench_write_login_disconnect, bench_read_login_disconnect); + + packet_test_cases!(Packet578, LoginEncryptionRequest, LoginEncryptionRequestSpec, + test_login_encryption_request, bench_write_login_encryption_request, bench_read_login_encryption_request); + + packet_test_cases!(Packet578, LoginSuccess, LoginSuccessSpec, + test_login_success, bench_write_login_success, bench_read_login_success); + + packet_test_cases!(Packet578, LoginSetCompression, LoginSetCompressionSpec, + test_login_set_compression, bench_write_login_set_compression, bench_read_login_set_compression); + + packet_test_cases!(Packet578, LoginPluginRequest, LoginPluginRequestSpec, + test_login_plugin_request, bench_write_login_plugin_request, bench_read_login_plugin_request); + + packet_test_cases!(Packet578, LoginStart, LoginStartSpec, + test_login_start, bench_write_login_start, bench_read_login_start); + + packet_test_cases!(Packet578, LoginEncryptionResponse, LoginEncryptionResponseSpec, + test_login_encryption_response, bench_write_login_encryption_response, bench_read_login_encryption_response); + + packet_test_cases!(Packet578, LoginPluginResponse, LoginPluginResponseSpec, + test_login_plugin_response, bench_write_login_plugin_response, bench_read_login_plugin_response); + + packet_test_cases!(Packet578, PlaySpawnEntity, PlaySpawnEntitySpec, + test_play_spawn_entity, bench_write_play_spawn_entity, bench_read_play_spawn_entity); + + packet_test_cases!(Packet578, PlaySpawnExperienceOrb, PlaySpawnExperienceOrbSpec, + test_play_spawn_experience_orb, bench_write_play_spawn_experience_orb, bench_read_play_spawn_experience_orb); + + packet_test_cases!(Packet578, PlaySpawnWeatherEntity, PlaySpawnWeatherEntitySpec, + test_play_spawn_weather_entity, bench_write_play_spawn_weather_entity, bench_read_play_spawn_weather_entity); + + packet_test_cases!(Packet578, PlaySpawnLivingEntity, PlaySpawnLivingEntitySpec, + test_play_spawn_living_entity, bench_write_play_spawn_living_entity, bench_read_play_spawn_living_entity); + + packet_test_cases!(Packet578, PlaySpawnPainting, PlaySpawnPaintingSpec, + test_play_spawn_painting, bench_write_play_spawn_painting, bench_read_play_spawn_painting); + + packet_test_cases!(Packet578, PlaySpawnPlayer, PlaySpawnPlayerSpec, + test_play_spawn_player, bench_write_play_spawn_player, bench_read_play_spawn_player); + + packet_test_cases!(Packet578, PlayEntityAnimation, PlayEntityAnimationSpec, + test_play_entity_animation, bench_write_play_entity_animation, bench_read_play_entity_animation); + + packet_test_cases!(Packet578, PlayStatistics, PlayStatisticsSpec, + test_play_statistics, bench_write_play_statistics, bench_read_play_statistics); + + packet_test_cases!(Packet578, PlayAcknowledgePlayerDigging, PlayAcknowledgePlayerDiggingSpec, + test_play_acknowledge_player_digging, bench_write_play_acknowledge_player_digging, bench_read_play_acknowledge_player_digging); + + packet_test_cases!(Packet578, PlayBlockBreakAnimation, PlayBlockBreakAnimationSpec, + test_play_block_break_animation, bench_write_play_block_break_animation, bench_read_play_block_break_animation); + + packet_test_cases!(Packet578, PlayBlockEntityData, PlayBlockEntityDataSpec, + test_play_block_entity_data, bench_write_play_block_entity_data, bench_read_play_block_entity_data); + + packet_test_cases!(Packet578, PlayBlockAction, PlayBlockActionSpec, + test_play_block_action, bench_write_play_block_action, bench_read_play_block_action); + + packet_test_cases!(Packet578, PlayBlockChange, PlayBlockChangeSpec, + test_play_block_change, bench_write_play_block_change, bench_read_play_block_change); + + packet_test_cases!(Packet578, PlayBossBar, PlayBossBarSpec, + test_play_boss_bar, bench_write_play_boss_bar, bench_read_play_boss_bar); + + packet_test_cases!(Packet578, PlayServerDifficulty, PlayServerDifficultySpec, + test_play_server_difficulty, bench_write_play_server_difficulty, bench_read_play_server_difficulty); + + packet_test_cases!(Packet578, PlayServerChatMessage, PlayServerChatMessageSpec, + test_play_server_chat_message, bench_write_play_server_chat_message, bench_read_play_server_chat_message); + + packet_test_cases!(Packet578, PlayMultiBlockChange, PlayMultiBlockChangeSpec, + test_play_multi_block_change, bench_write_play_multi_block_change, bench_read_play_multi_block_change); + + packet_test_cases!(Packet578, PlayTabComplete, PlayTabCompleteSpec, + test_play_tab_complete, bench_write_play_tab_complete, bench_read_play_tab_complete); + + packet_test_cases!(Packet578, PlayDeclareCommands, PlayDeclareCommandsSpec, + test_play_declare_commands, bench_write_play_declare_commands, bench_read_play_declare_commands); + + packet_test_cases!(Packet578, PlayServerWindowConfirmation, PlayServerWindowConfirmationSpec, + test_play_server_window_confirmation, bench_write_play_server_window_confirmation, bench_read_play_server_window_confirmation); + + packet_test_cases!(Packet578, PlayServerCloseWindow, PlayServerCloseWindowSpec, + test_play_server_close_window, bench_write_play_server_close_window, bench_read_play_server_close_window); + + packet_test_cases!(Packet578, PlayWindowItems, PlayWindowItemsSpec, + test_play_window_items, bench_write_play_window_items, bench_read_play_window_items); + + packet_test_cases!(Packet578, PlayWindowProperty, PlayWindowPropertySpec, + test_play_window_property, bench_write_play_window_property, bench_read_play_window_property); + + packet_test_cases!(Packet578, PlaySetSlot, PlaySetSlotSpec, + test_play_set_slot, bench_write_play_set_slot, bench_read_play_set_slot); + + packet_test_cases!(Packet578, PlaySetCooldown, PlaySetCooldownSpec, + test_play_set_cooldown, bench_write_play_set_cooldown, bench_read_play_set_cooldown); + + packet_test_cases!(Packet578, PlayServerPluginMessage, PlayServerPluginMessageSpec, + test_play_server_plugin_message, bench_write_play_server_plugin_message, bench_read_play_server_plugin_message); + + packet_test_cases!(Packet578, PlayNamedSoundEffect, PlayNamedSoundEffectSpec, + test_play_named_sound_effect, bench_write_play_named_sound_effect, bench_read_play_named_sound_effect); + + packet_test_cases!(Packet578, PlayDisconnect, PlayDisconnectSpec, + test_play_disconnect, bench_write_play_disconnect, bench_read_play_disconnect); + + packet_test_cases!(Packet578, PlayEntityStatus, PlayEntityStatusSpec, + test_play_entity_status, bench_write_play_entity_status, bench_read_play_entity_status); + + packet_test_cases!(Packet578, PlayExposion, PlayExposionSpec, + test_play_exposion, bench_write_play_exposion, bench_read_play_exposion); + + packet_test_cases!(Packet578, PlayUnloadChunk, PlayUnloadChunkSpec, + test_play_unload_chunk, bench_write_play_unload_chunk, bench_read_play_unload_chunk); + + packet_test_cases!(Packet578, PlayChangeGameState, PlayChangeGameStateSpec, + test_play_change_game_state, bench_write_play_change_game_state, bench_read_play_change_game_state); + + packet_test_cases!(Packet578, PlayOpenHorseWindow, PlayOpenHorseWindowSpec, + test_play_open_horse_window, bench_write_play_open_horse_window, bench_read_play_open_horse_window); + + packet_test_cases!(Packet578, PlayServerKeepAlive, PlayServerKeepAliveSpec, + test_play_server_keep_alive, bench_write_play_server_keep_alive, bench_read_play_server_keep_alive); + + packet_test_cases!(Packet578, PlayChunkData, PlayChunkDataWrapper, + test_play_chunk_data, bench_write_play_chunk_data, bench_read_play_chunk_data); + + packet_test_cases!(Packet578, PlayEffect, PlayEffectSpec, + test_play_effect, bench_write_play_effect, bench_read_play_effect); + + packet_test_cases!(Packet578, PlayParticle, PlayParticleSpec, + test_play_particle, bench_write_play_particle, bench_read_play_particle); + + packet_test_cases!(Packet578, PlayUpdateLight, PlayUpdateLoightSpec, + test_play_update_light, bench_write_play_update_light, bench_read_play_update_light); + + packet_test_cases!(Packet578, PlayJoinGame, PlayJoinGameSpec, + test_play_join_game, bench_write_play_join_game, bench_read_play_join_game); + + packet_test_cases!(Packet578, PlayMapData, PlayMapDataSpec, + test_play_map_data, bench_write_play_map_data, bench_read_play_map_data); + + packet_test_cases!(Packet578, PlayTradeList, PlayTradeListSpec, + test_play_trade_list, bench_write_play_trade_list, bench_read_play_trade_list); + + packet_test_cases!(Packet578, PlayEntityPosition, PlayEntityPositionSpec, + test_play_entity_position, bench_write_play_entity_position, bench_read_play_entity_position); + + packet_test_cases!(Packet578, PlayEntityPositionAndRotation, PlayEntityPositionAndRotationSpec, + test_play_entity_position_and_rotation, bench_write_play_entity_position_and_rotation, bench_read_play_entity_position_and_rotation); + + packet_test_cases!(Packet578, PlayEntityRotation, PlayEntityRotationSpec, + test_play_entity_rotation, bench_write_play_entity_rotation, bench_read_play_entity_rotation); + + packet_test_cases!(Packet578, PlayEntityMovement, PlayEntityMovementSpec, + test_play_entity_movement, bench_write_play_entity_movement, bench_read_play_entity_movement); + + packet_test_cases!(Packet578, PlayServerVehicleMove, PlayEntityVehicleMoveSpec, + test_play_server_vehicle_move, bench_write_play_server_vehicle_move, bench_read_play_server_vehicle_move); + + packet_test_cases!(Packet578, PlayOpenBook, PlayOpenBookSpec, + test_play_open_book, bench_write_play_open_book, bench_read_play_open_book); + + packet_test_cases!(Packet578, PlayOpenWindow, PlayOpenWindowSpec, + test_play_open_window, bench_write_play_open_window, bench_read_play_open_window); + + packet_test_cases!(Packet578, PlayOpenSignEditor, PlayOpenSignEditorSpec, + test_play_open_sign_editor, bench_write_play_open_sign_editor, bench_read_play_open_sign_editor); + + packet_test_cases!(Packet578, PlayCraftRecipeResponse, PlayCraftRecipeResponseSpec, + test_play_craft_recipe_response, bench_write_play_craft_recipe_response, bench_read_play_craft_recipe_response); + + packet_test_cases!(Packet578, PlayServerPlayerAbilities, PlayServerPlayerAbilitiesSpec, + test_play_server_player_abilities, bench_write_play_server_player_abilities, bench_read_play_server_player_abilities); + + packet_test_cases!(Packet578, PlayCombatEvent, PlayCombatEventSpec, + test_play_combat_event, bench_write_play_combat_event, bench_read_play_combat_event); + + packet_test_cases!(Packet578, PlayPlayerInfo, PlayPlayerInfoSpec, + test_play_player_info, bench_write_play_player_info, bench_read_play_player_info); + + packet_test_cases!(Packet578, PlayFacePlayer, PlayFacePlayerSpec, + test_play_face_player, bench_write_play_face_player, bench_read_play_face_player); + + packet_test_cases!(Packet578, PlayServerPlayerPositionAndLook, PlayServerPlayerPositionAndLookSpec, + test_play_server_player_position_and_look, bench_write_play_server_player_position_and_look, bench_read_play_server_player_position_and_look); + + packet_test_cases!(Packet578, PlayUnlockRecipes, PlayUnlockRecipesSpec, + test_play_unlock_recipes, bench_write_play_unlock_recipes, bench_read_play_unlock_recipes); + + packet_test_cases!(Packet578, PlayDestroyEntities, PlayDestroyEntitiesSpec, + test_play_destroy_entities, bench_write_play_destroy_entities, bench_read_play_destroy_entities); + + packet_test_cases!(Packet578, PlayRemoveEntityEffect, PlayRemoveEntityEffectSpec, + test_play_remove_entity_effect, bench_write_play_remove_entity_effect, bench_read_play_remove_entity_effect); + + packet_test_cases!(Packet578, PlayResourcePackSend, PlayResourcePackSendSpec, + test_play_resource_pack_send, bench_write_play_resource_pack_send, bench_read_play_resource_pack_send); + + packet_test_cases!(Packet578, PlayRespawn, PlayRespawnSpec, + test_play_respawn, bench_write_play_respawn, bench_read_play_respawn); + + packet_test_cases!(Packet578, PlayEntityHeadLook, PlayEntityHeadLookSpec, + test_play_entity_head_look, bench_write_play_entity_head_look, bench_read_play_entity_head_look); + + packet_test_cases!(Packet578, PlaySelectAdvancementTab, PlaySelectAdvancementTabSpec, + test_play_select_advancement_tab, bench_write_play_select_advancement_tab, bench_read_play_select_advancement_tab); + + packet_test_cases!(Packet578, PlayWorldBorder, PlayWorldBorderSpec, + test_play_world_border, bench_write_play_world_border, bench_read_play_world_border); + + packet_test_cases!(Packet578, PlayCamera, PlayCameraSpec, + test_play_camera, bench_write_play_camera, bench_read_play_camera); + + packet_test_cases!(Packet578, PlayServerHeldItemChange, PlayServerHeldItemChangeSpec, + test_play_server_held_item_change, bench_write_play_server_held_item_change, bench_read_play_server_held_item_change); + + packet_test_cases!(Packet578, PlayUpdateViewPosition, PlayUpdateViewPositionSpec, + test_play_update_view_position, bench_write_play_update_view_position, bench_read_play_update_view_position); + + packet_test_cases!(Packet578, PlayUpdateViewDistance, PlayUpdateViewDistanceSpec, + test_play_update_view_distance, bench_write_play_update_view_distance, bench_read_play_update_view_distance); + + packet_test_cases!(Packet578, PlayDisplayScoreboard, PlayDisplayScoreboardSpec, + test_play_display_scoreboard, bench_write_play_display_scoreboard, bench_read_play_display_scoreboard); + + packet_test_cases!(Packet578, PlayEntityMetadata, PlayEntityMetadataSpec, + test_play_entity_metadata, bench_write_play_entity_metadata, bench_read_play_entity_metadata); + + packet_test_cases!(Packet578, PlayAttachEntity, PlayAttachEntitySpec, + test_play_attach_entity, bench_write_play_attach_entity, bench_read_play_attach_entity); + + packet_test_cases!(Packet578, PlayEntityVelocity, PlayEntityVelocitySpec, + test_play_entity_velocity, bench_write_play_entity_velocity, bench_read_play_entity_velocity); + + packet_test_cases!(Packet578, PlayEntityEquipment, PlayEntityEquiptmentSpec, + test_play_entity_equipment, bench_write_play_entity_equipment, bench_read_play_entity_equipment); + + packet_test_cases!(Packet578, PlaySetExperience, PlaySetExperienceSpec, + test_play_set_experience, bench_write_play_set_experience, bench_read_play_set_experience); + + packet_test_cases!(Packet578, PlayUpdatehealth, PlayUpdateHealthSpec, + test_play_updatehealth, bench_write_play_updatehealth, bench_read_play_updatehealth); + + packet_test_cases!(Packet578, PlayScoreboardObjective, PlayScoreboardObjectiveSpec, + test_play_scoreboard_objective, bench_write_play_scoreboard_objective, bench_read_play_scoreboard_objective); + + packet_test_cases!(Packet578, PlaySetPassengers, PlaySetPassengersSpec, + test_play_set_passengers, bench_write_play_set_passengers, bench_read_play_set_passengers); + + packet_test_cases!(Packet578, PlaySpawnPosition, PlaySpawnPositionSpec, + test_play_spawn_position, bench_write_play_spawn_position, bench_read_play_spawn_position); + + packet_test_cases!(Packet578, PlayTimeUpdate, PlayTimeUpdateSpec, + test_play_time_update, bench_write_play_time_update, bench_read_play_time_update); + + packet_test_cases!(Packet578, PlayEntitySoundEffect, PlayEntitySoundEffectSpec, + test_play_entity_sound_effect, bench_write_play_entity_sound_effect, bench_read_play_entity_sound_effect); + + packet_test_cases!(Packet578, PlaySoundEffect, PlaySoundEffectSpec, + test_play_sound_effect, bench_write_play_sound_effect, bench_read_play_sound_effect); + + packet_test_cases!(Packet578, PlayerPlayerListHeaderAndFooter, PlayPlayerListHeaderAndFooterSpec, + test_player_player_list_header_and_footer, bench_write_player_player_list_header_and_footer, bench_read_player_player_list_header_and_footer); + + packet_test_cases!(Packet578, PlayNbtQueryResponse, PlayNbtQueryResponseSpec, + test_play_nbt_query_response, bench_write_play_nbt_query_response, bench_read_play_nbt_query_response); + + packet_test_cases!(Packet578, PlayCollectItem, PlayCollectItemSpec, + test_play_collect_item, bench_write_play_collect_item, bench_read_play_collect_item); + + packet_test_cases!(Packet578, PlayEntityTeleport, PlayEntityTeleportSpec, + test_play_entity_teleport, bench_write_play_entity_teleport, bench_read_play_entity_teleport); + + packet_test_cases!(Packet578, PlayAdvancements, PlayAdvancementsSpec, + test_play_advancements, bench_write_play_advancements, bench_read_play_advancements); + + packet_test_cases!(Packet578, PlayEntityProperties, PlayEntityPropertiesSpec, + test_play_entity_properties, bench_write_play_entity_properties, bench_read_play_entity_properties); + + packet_test_cases!(Packet578, PlayEntityEffect, PlayEntityEffectSpec, + test_play_entity_effect, bench_write_play_entity_effect, bench_read_play_entity_effect); + + packet_test_cases!(Packet578, PlayDeclareRecipes, PlayDeclareRecipesSpec, + test_play_declare_recipes, bench_write_play_declare_recipes, bench_read_play_declare_recipes); + + packet_test_cases!(Packet578, PlayTags, PlayTagsSpec, + test_play_tags, bench_write_play_tags, bench_read_play_tags); + + packet_test_cases!(Packet578, PlayTeleportConfirm, PlayTeleportConfirmSpec, + test_play_teleport_confirm, bench_write_play_teleport_confirm, bench_read_play_teleport_confirm); + + packet_test_cases!(Packet578, PlayQueryBlockNbt, PlayQueryBlockNbtSpec, + test_play_query_block_nbt, bench_write_play_query_block_nbt, bench_read_play_query_block_nbt); + + packet_test_cases!(Packet578, PlayQueryEntityNbt, PlayQueryEntityNbtSpec, + test_play_query_entity_nbt, bench_write_play_query_entity_nbt, bench_read_play_query_entity_nbt); + + packet_test_cases!(Packet578, PlaySetDifficulty, PlaySetDifficultySpec, + test_play_set_difficulty, bench_write_play_set_difficulty, bench_read_play_set_difficulty); + + packet_test_cases!(Packet578, PlayClientChatMessage, PlayClientChatMessageSpec, + test_play_client_chat_message, bench_write_play_client_chat_message, bench_read_play_client_chat_message); + + packet_test_cases!(Packet578, PlayClientStatus, PlayClientStatusSpec, + test_play_client_status, bench_write_play_client_status, bench_read_play_client_status); + + packet_test_cases!(Packet578, PlayClientSettings, PlayClientSettingsSpec, + test_play_client_settings, bench_write_play_client_settings, bench_read_play_client_settings); + + packet_test_cases!(Packet578, PlayClientTabComplete, PlayClientTabCompleteSpec, + test_play_client_tab_complete, bench_write_play_client_tab_complete, bench_read_play_client_tab_complete); + + packet_test_cases!(Packet578, PlayClientWindowConfirmation, PlayClientWindowConfirmationSpec, + test_play_client_window_confirmation, bench_write_play_client_window_confirmation, bench_read_play_client_window_confirmation); + + packet_test_cases!(Packet578, PlayClickWindowButton, PlayClickWindowButtonSpec, + test_play_click_window_button, bench_write_play_click_window_button, bench_read_play_click_window_button); + + packet_test_cases!(Packet578, PlayClickWindow, PlayClickWindowSpec, + test_play_click_window, bench_write_play_click_window, bench_read_play_click_window); + + packet_test_cases!(Packet578, PlayClientCloseWindow, PlayClientCloseWindowSpec, + test_play_client_close_window, bench_write_play_client_close_window, bench_read_play_client_close_window); + + packet_test_cases!(Packet578, PlayClientPluginMessage, PlayClientPluginMessageSpec, + test_play_client_plugin_message, bench_write_play_client_plugin_message, bench_read_play_client_plugin_message); + + packet_test_cases!(Packet578, PlayEditBook, PlayEditBookSpec, + test_play_edit_book, bench_write_play_edit_book, bench_read_play_edit_book); + + packet_test_cases!(Packet578, PlayInteractEntity, PlayInteractEntitySpec, + test_play_interact_entity, bench_write_play_interact_entity, bench_read_play_interact_entity); + + packet_test_cases!(Packet578, PlayClientKeepAlive, PlayClientKeepAliveSpec, + test_play_client_keep_alive, bench_write_play_client_keep_alive, bench_read_play_client_keep_alive); + + packet_test_cases!(Packet578, PlayLockDifficulty, PlayLockDifficultySpec, + test_play_lock_difficulty, bench_write_play_lock_difficulty, bench_read_play_lock_difficulty); + + packet_test_cases!(Packet578, PlayPlayerPosition, PlayPlayerPositionSpec, + test_play_player_position, bench_write_play_player_position, bench_read_play_player_position); + + packet_test_cases!(Packet578, PlayClientPlayerPositionAndRotation, PlayClientPlayerPositionAndRotationSpec, + test_play_client_player_position_and_rotation, bench_write_play_client_player_position_and_rotation, bench_read_play_client_player_position_and_rotation); + + packet_test_cases!(Packet578, PlayPlayerRotation, PlayPlayerRotationSpec, + test_play_player_rotation, bench_write_play_player_rotation, bench_read_play_player_rotation); + + packet_test_cases!(Packet578, PlayPlayerMovement, PlayPlayerMovementSpec, + test_play_player_movement, bench_write_play_player_movement, bench_read_play_player_movement); + + packet_test_cases!(Packet578, PlayClientVehicleMove, PlayClientVehicleMoveSpec, + test_play_client_vehicle_move, bench_write_play_client_vehicle_move, bench_read_play_client_vehicle_move); + + packet_test_cases!(Packet578, PlaySteerBoat, PlaySteerBoatSpec, + test_play_steer_boat, bench_write_play_steer_boat, bench_read_play_steer_boat); + + packet_test_cases!(Packet578, PlayPickItem, PlayPickItemSpec, + test_play_pick_item, bench_write_play_pick_item, bench_read_play_pick_item); + + packet_test_cases!(Packet578, PlayCraftRecipeRequest, PlayCraftRecipeRequestSpec, + test_play_craft_recipe_request, bench_write_play_craft_recipe_request, bench_read_play_craft_recipe_request); + + packet_test_cases!(Packet578, PlayClientPlayerAbilities, PlayClientPlayerAbilitiesSpec, + test_play_client_player_abilities, bench_write_play_client_player_abilities, bench_read_play_client_player_abilities); + + packet_test_cases!(Packet578, PlayPlayerDigging, PlayPlayerDiggingSpec, + test_play_player_digging, bench_write_play_player_digging, bench_read_play_player_digging); + + packet_test_cases!(Packet578, PlayEntityAction, PlayEntityActionSpec, + test_play_entity_action, bench_write_play_entity_action, bench_read_play_entity_action); + + packet_test_cases!(Packet578, PlaySteerVehicle, PlaySteerVehicleSpec, + test_play_steer_vehicle, bench_write_play_steer_vehicle, bench_read_play_steer_vehicle); + + packet_test_cases!(Packet578, PlayNameItem, PlayNameItemSpec, + test_play_name_item, bench_write_play_name_item, bench_read_play_name_item); + + packet_test_cases!(Packet578, PlayResourcePackStatus, PlayResourcePackStatusSpec, + test_play_resource_pack_status, bench_write_play_resource_pack_status, bench_read_play_resource_pack_status); + + packet_test_cases!(Packet578, PlaySelectTrade, PlaySelectTradeSpec, + test_play_select_trade, bench_write_play_select_trade, bench_read_play_select_trade); + + packet_test_cases!(Packet578, PlaySetBeaconEffect, PlaySetBeaconEffectSpec, + test_play_set_beacon_effect, bench_write_play_set_beacon_effect, bench_read_play_set_beacon_effect); + + packet_test_cases!(Packet578, PlayClientHeldItemChange, PlayClientHeldItemChangeSpec, + test_play_client_held_item_change, bench_write_play_client_held_item_change, bench_read_play_client_held_item_change); + + packet_test_cases!(Packet578, PlayUpdateCommandBlock, PlayUpdateCommandBlockSpec, + test_play_update_command_block, bench_write_play_update_command_block, bench_read_play_update_command_block); + + packet_test_cases!(Packet578, PlayUpdateCommandBlockMinecart, PlayUpdateCommandBlockMinecartSpec, + test_play_update_command_block_minecart, bench_write_play_update_command_block_minecart, bench_read_play_update_command_block_minecart); + + packet_test_cases!(Packet578, PlayCreativeInventoryAction, PlayCreativeInventoryActionSpec, + test_play_creative_inventory_action, bench_write_play_creative_inventory_action, bench_read_play_creative_inventory_action); + + packet_test_cases!(Packet578, PlayUpdateJigsawBlock, PlayUpdateJigsawBlockSpec, + test_play_update_jigsaw_block, bench_write_play_update_jigsaw_block, bench_read_play_update_jigsaw_block); + + packet_test_cases!(Packet578, PlayUpdateStructureBlock, PlayUpdateStructureBlockSpec, + test_play_update_structure_block, bench_write_play_update_structure_block, bench_read_play_update_structure_block); + + packet_test_cases!(Packet578, PlayUpdateSign, PlayUpdateSignSpec, + test_play_update_sign, bench_write_play_update_sign, bench_read_play_update_sign); + + packet_test_cases!(Packet578, PlayClientAnimation, PlayClientAnimationSpec, + test_play_client_animation, bench_write_play_client_animation, bench_read_play_client_animation); + + packet_test_cases!(Packet578, PlaySpectate, PlaySpectateSpec, + test_play_spectate, bench_write_play_spectate, bench_read_play_spectate); + + packet_test_cases!(Packet578, PlayBlockPlacement, PlayBlockPlacementSpec, + test_play_block_placement, bench_write_play_block_placement, bench_read_play_block_placement); + + packet_test_cases!(Packet578, PlayUseItem, PlayUseItemSpec, + test_play_use_item, bench_write_play_use_item, bench_read_play_use_item); + + #[test] + fn test_generate_test_cases() { + Packet578::describe().packets.iter().map(move |packet| { + let snake_case = to_snake_case(packet.name.clone()); + format!("packet_test_cases!(Packet578, {}, {},\n test_{}, bench_write_{}, bench_read_{});\n", + packet.name, packet.body_struct, snake_case, snake_case, snake_case).to_owned() + }).for_each(move |line| { + println!("{}", line) + }) + } + + fn to_snake_case(camel: String) -> String { + let mut parts = Vec::new(); + let mut buf = String::new(); + for c in camel.chars() { + if !buf.is_empty() && char::is_uppercase(c) { + parts.push(buf); + buf = String::new(); + } + + buf.push(c.to_ascii_lowercase()); + } + + if !buf.is_empty() { + parts.push(buf); + } + + parts.join("_") + } }
\ No newline at end of file |