           {:name "pitch" :type "f32" :getter "Get the pitch"}
           {:name "flags" :type "u8" :getter "Get the raw flags bitmask"}
           {:name "teleport_id" :type "i32" :getter "Get the teleport ID to be used in the serverbound TeleportConfirm packet." :read "varint"}]}
-{:name "UseBed"
- :id 51
- :fields [{:name "entity_id" :type "i32" :getter "Get the entity ID of the player sleeping" :read "varint"}
-          {:name "position" :type "(i32, i32, i32)" :getter "Get the (x, y, z) position" :read "position"}]}
 {:name "UnlockRecipes"
- :id 52
+ :id 55
  :automatic-serialize false
  :fields [{:name "action" :type "i32" :getter "Get the action enum ID"}
           {:name "crafting_book_open" :type "bool" :getter "Get whether the crafting book shall open when the player opens their inventory"}

	  {:name "recipes" :type "Vec<String>" :getter "Get all the recipes in list 1"}
	  {:name "recipes2" :type "Vec<String>" :getter "Get all the recipes in list 2. Is empty unless action == 0"}]}
{:name "DestroyEntities"
 :id 53
 :fields [{:name "entity_ids" :type "Vec<i32>" :getter "Get the list of entity IDs that have been destroyed" :read "prefixed_varintarray"}]}
{:name "RemoveEntityEffect"
 :id 54
 :fields [{:name "entity_id" :type "i32" :getter "Get the entity ID to remove the effect from" :read "varint"}
          {:name "effect_id" :type "u8" :getter "Get the effect ID (enum)"}]}
{:name "ResourcePackSend"
 :id 55
 :fields [{:name "url" :type "String" :getter "Get the URL to the resource pack"}
          {:name "hash" :type "String" :getter "Get the expected SHA-1 hash of the resource pack"}]}
{:name "Respawn"
 :id 56
 :fields  [{:name "dimension" :type "i32" :getter "Get the integer value for the dimension the player is spawning in"}
           {:name "difficulty" :type "u8" :getter "Get the integer value for the difficulty"}
           {:name "gamemode" :type "u8" :getter "Get the integer value for the gamemode"}
           {:name "level_type" :type "String" :getter "Get the level type"}]}
{:name "EntityHeadLook"
 :id 57
 :fields [{:name "entity_id" :type "i32" :getter "Get the entity ID" :read "varint"}
          {:name "head_yaw" :type "i8" :getter "Get the new head yaw"}]}
{:name "SelectAdvancementTab"
 :id 58
 :automatic-serialize false
 :fields [{:name "identifier" :type "Option<String>" :getter "Get the identifier to switch to. If None, switch to default"}]}
{:name "WorldBorder"
 :id 59
 :fields [{:name "data" :type "Vec<u8>" :getter "Get this packet's raw data. This library does not attempt to parse this packet" :read "bytearray_to_end"}]}
{:name "Camera"
 :id 60
 :fields [{:name "entity_id" :type "i32" :getter "Get the entity ID to set the camera to" :read "varint"}]}
{:name "ClientboundHeldItemChange"
 :id 61
 :fields [{:name "slot" :type "u8" :getter "Get the slot number which the player has selected"}]}
{:name "DisplayScoreboard"
 :id 62
 :fields [{:name "position" :type "u8" :getter "Get the raw integer representing the scoreboard's position"}
          {:name "name" :type "String" :getter "Get the name of the scoreboard"}]}
{:name "EntityMetadata"
 :id 63
 :fields [{:name "entity_id" :type "i32" :getter "Get the entity ID of the entity which metadata is being updated" :read "varint"}
          {:name "metadata" :type "Vec<u8>" :getter "Get the raw data for the metadata. This library does not attempt to parse the metadata." :read "bytearray_to_end"}]}
{:name "AttachEntity"
 :id 64
 :fields [{:name "attached_entity_id" :type "i32" :getter "Get the entity ID of the entity that has been attached"}
          {:name "holding_entity_id" :type "i32" :getter "Get the entity ID of the entity that has been attached to"}]}
{:name "EntityVelocity"
 :id 65
 :fields [{:name "entity_id" :type "i32" :getter "Get the entity ID" :read "varint"}
          {:name "x_velocity" :type "i16" :getter "Get the X velocity"}
          {:name "y_velocity" :type "i16" :getter "Get the Y velocity"}
          {:name "z_velocity" :type "i16" :getter "Get the Z velocity"}]}
{:name "EntityEquipment"
 :id 66
 :fields [{:name "entity_id" :type "i32" :getter "Get the entity ID" :read "varint"}
          {:name "slot_enum" :type "i32" :getter "Get the raw slot identification number" :read "varint"}
          {:name "slot_data" :type "Vec<u8>" :getter "Get the raw slot data. This library does not attempt to parse it" :read "bytearray_to_end"}]}
{:name "SetExperience"
 :id 67
 :fields [{:name "experience" :type "f32" :getter "Get how filled up the experience bar is"}
          {:name "level" :type "i32" :getter "Get the new level" :read "varint"}
          {:name "total_experience" :type "i32" :getter "Get the total experience" :read "varint"}]}
{:name "UpdateHealth"
 :id 68
 :fields [{:name "health" :type "f32" :getter "Get how much health the player has"}
          {:name "food" :type "i32" :getter "Get how much food the player has" :read "varint"}
          {:name "saturation" :type "f32" :getter "Get the saturation level"}]}
{:name "ScoreboardObjective"
 :id 69
 :automatic-serialize false
 :fields [{:name "name" :type "String" :getter "Get the name for the object"}
          {:name "mode" :type "u8" :getter "Get the raw mode enum integer"}
          {:name "value" :type "Option<String>" :getter "Get the text to be displayed"}
          {:name "objective_type" :type "Option<String>" :getter "Get the raw string representing the type (`integer` or `hearts`)"}]}
{:name "SetPassengers"
 :id 70
 :fields [{:name "entity_id" :type "i32" :getter "Get the entity ID" :read "varint"}
          {:name "passengers" :type "Vec<i32>" :getter "Get the vec of all the passengers" :read "prefixed_varintarray"}]}
{:name "Teams"
 :id 71
 :fields [{:name "data" :type "Vec<u8>" :getter "Get the raw data, this library does not attempt to parse this packet." :read "bytearray_to_end"}]}
{:name "UpdateScore"
 :id 72
 :automatic-serialize false
 :fields [{:name "name" :type "String" :getter "Get the name of the score to be updated"}
          {:name "action" :type "u8" :getter "Get the action being performed"}
          {:name "objective_name" :type "String" :getter "Get the name of the objective the score belongs to"}
          {:name "value" :type "Option<i32>" :getter "Get the score to be displayed if this packet is updating a score, else `None`"}]}
{:name "SpawnPosition"
 :id 73
 :fields [{:name "position" :type "(i32, i32, i32)" :getter "Get the position" :read "position"}]}
{:name "TimeUpdate"
 :id 74
 :fields [{:name "world_age" :type "i64" :getter "Get the world's age in ticks"}
          {:name "time_of_day" :type "i64" :getter "Get the current time in ticks (0 is sunrise, 6000 is noon, ...)"}]}
{:name "Title"
 :id 75
 :automatic-serialize false
 :fields [{:name "action" :type "i32" :getter "Get the raw action enum integer"}
          {:name "text" :type "Option<String>" :getter "Get the title/subtitle/action bar text if action is set title/subtitle/action bar in raw json"}
          {:name "times" :type "Option<(i32, i32, i32)>" :getter "If action is 'set times and display' get `Some((fade_in, stay, fade_out))` else get `None`"}]}
{:name "StopSound"
 :id 76
 :automatic-serialize false
 :fields [{:name "flags" :type "u8"}
          {:name "source" :type "Option<i32>" :getter "Get the source to stop sound from. If None stop from all sources."}
	  {:name "sound" :type "Option<String>" :getter "Get the identifier to stop, if relevant."}]}
{:name "SoundEffect"
 :id 77
 :fields [{:name "sound_id" :type "i32" :getter "Get the raw sound effect ID. Note that the meaning of this is liable to change between MC releases." :read "varint"}
          {:name "sound_category" :type "i32" :getter "Get the raw sound category ID." :read "varint"}
          {:name "x" :type "i32" :getter "Get the X effect multiplied by 8"}

          {:name "z" :type "i32" :getter "Get the Z effect multiplied by 8"}
          {:name "volume" :type "f32" :getter "Get the volume where 1.0 is 100%"}
          {:name "pitch" :type "f32" :getter "Get the pitch"}]}
{:name "StopSound"
 :id 83
 :automatic-serialize false
 :fields [{:name "flags" :type "u8"}
          {:name "source" :type "Option<i32>" :getter "Get the source to stop sound from. If None stop from all sources."}
	  {:name "sound" :type "Option<String>" :getter "Get the identifier to stop, if relevant."}]}
{:name "PlayerListHeaderFooter"
 :id 84
 :fields [{:name "header" :type "String" :getter "Get the raw json data for the header"}
          {:name "footer" :type "String" :getter "Get the raw json data for the footer"}]}
{:name "NBTQueryResponse"
 :id 85
 :fields [{:name "transaction_id" :type "i32" :read "varint" :getter "Get the transaction ID"}
          {:name "nbt" :type "Vec<u8>" :read "bytearray_to_end" :getter "Get the raw NBT data"}]}
{:name "CollectItem"
 :id 86
 :fields [{:name "collected_entity_id" :type "i32" :getter "Get the entity ID of the collected item" :read "varint"}
          {:name "collector_entity_id" :type "i32" :getter "Get the entity ID of the person picking up the item" :read "varint"}
          {:name "item_count" :type "i32" :getter "Get how many items were picked up" :read "varint"}]}
{:name "EntityTeleport"
 :id 87
 :fields [{:name "entity_id" :type "i32" :getter "Get the entity ID of the entity teleported" :read "varint"}
          {:name "x" :type "f64" :getter "Get the X coordinate the entity moved to"}
          {:name "y" :type "f64" :getter "Get the Y coordinate the entity moved to"}
