aboutsummaryrefslogtreecommitdiff
path: root/src/v1_15_2.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/v1_15_2.rs')
-rw-r--r--src/v1_15_2.rs668
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