  :automatic-serialize false
  :fields [{:name "particle_id" :type "i32" :getter "Get the particle ID"}
           {:name "use_long_distance" :type "bool" :getter "Get whether to use long distance (65536) instead of short (256)"}
-          {:name "x" :type "f32" :getter "Get the X coordinate"}
-          {:name "y" :type "f32" :getter "Get the Y coordinate"}
-          {:name "z" :type "f32" :getter "Get the Z coordinate"}
+          {:name "x" :type "f64" :getter "Get the X coordinate"}
+          {:name "y" :type "f64" :getter "Get the Y coordinate"}
+          {:name "z" :type "f64" :getter "Get the Z coordinate"}
           {:name "offset_x" :type "f32" :getter "Get the X offset"}
           {:name "offset_y" :type "f32" :getter "Get the Y offset"}
           {:name "offset_z" :type "f32" :getter "Get the Z offset"}
           {:name "particle_data" :type "f32" :getter "Get the particle data for each particle"}
           {:name "count" :type "i32" :getter "Get the amount of particles to create"}
           {:name "data" :type "Vec<u8>" :read "bytearray_to_end" :getter "Get the particle data"}]}
+{:name "UpdateLight"
+ :id 37
+ :fields [{:name "chunk_x" :type "i32" :getter "Chunk X coordinate" :read "varint"}
+          {:name "chunk_z" :type "i32" :getter "Chunk Z coordinate" :read "varint"}
+          {:name "sky_light_mask" :type "i32" :getter "Get the sky light mask" :read "varint"}
+          {:name "block_light_mask" :type "i32" :getter "Get the block light mask" :read "varint"}
+          {:name "empty_sky_light_mask" :type "i32" :getter "Get the empty sky light mask" :read "varint"}
+          {:name "empty_block_light_mask" :type "i33" :getter "Get the empty block light mask" :read "varint"}
+          {:name "data" :type "Vec<u8>" :read "bytearray_to_end" :getter "Get the light data"}]}
 {:name "JoinGame"
- :id 37
+ :id 38
  :fields [{:name "entity_id" :type "i32" :getter "Get the player's entity ID"}
           {:name "gamemode" :type "u8" :getter "Get the player's gamemode"}
           {:name "dimension" :type "i32" :getter "Get the dimension the player is in. Not the specific world (in case of servers with multiworld), but the kind of world"}
-          {:name "difficulty" :type "u8" :getter "Get the difficulty"}
+          {:name "hashed_seed" :type "i64" :getter "Get the first 8 bytes of the SHA-256 hash of the world's seed"}
           {:name "max_players" :type "u8"}; Apparently this field is no longer used but for some reason hasn't been removed yet
           {:name "level_type" :type "String" :getter "Get the level type of the world the player joined in"}
-          {:name "reduced_debug" :type "bool" :getter "Get whether to show reduced debug info"}]}
+          {:name "view_distance" :type "i32" :getter "Get the render distance in chunks" :read "varint"}
+          {:name "reduced_debug" :type "bool" :getter "Get whether to show reduced debug info"}
+          {:name "enable_respawn_screen" :type "bool" :getter "Get whether or not the respawn screen should be shown. Will be false if the doImmediateRespawn gamerule is true."}]}
 {:name "Map"
- :id 38
+ :id 39
  :fields [{:name "data" :type "Vec<u8>" :getter "Get the raw data from this packet. Parsing this is very dependent on the specific client, and doing so would be out of scope for this library, therefore parsing this packet is left to the user of the library." :read "bytearray_to_end"}]}
-{:name "Entity"
- :id 39
- :fields [{:name "entity_id" :type "i32" :getter "Get the entity ID" :read "varint"}]}
+{:name "TradeList"
+ :id 40
+ :fields [{:name "data" :type "Vec<u8>" :getter "Get the raw data from this packet. Parsing this is very dependent on the specific client, and doing so would be out of scope for this library, therefore parsing this packet is left to the user of the library." :read "bytearray_to_end"}]}
 {:name "EntityRelativeMove"
- :id 40
+ :id 41
  :fields [{:name "entity_id" :type "i32" :getter "Get the entity ID" :read "varint"}
           {:name "x" :type "i16" :getter "Get the relative distance moved in the X direction times 128"}
           {:name "y" :type "i16" :getter "Get the relative distance moved in the Y direction times 128"}
           {:name "z" :type "i16" :getter "Get the relative distance moved in the Z direction times 128"}
           {:name "on_ground" :type "bool" :getter "Get whether the entity is on the ground"}]}
 {:name "EntityLookRelativeMove"
- :id 41
+ :id 42
  :fields [{:name "entity_id" :type "i32" :getter "Get the entity ID" :read "varint"}
           {:name "x" :type "i16" :getter "Get the relative distance moved in the X direction times 128"}
           {:name "y" :type "i16" :getter "Get the relative distance moved in the Y direction times 128"}

            {:name "head_pitch" :type "i8" :getter "Get the pitch of the head of the mob"}
            {:name "velocity_x" :type "i16" :getter "Get the X velocity"}
            {:name "velocity_y" :type "i16" :getter "Get the Y velocity"}
            {:name "velocity_z" :type "i16" :getter "Get the Z velocity"}
            {:name "metadata" :type "Vec<u8>" :getter "Get the raw metadata field. This library does not currently attempt to parse this field" :read "bytearray_to_end"}]}
  {:name "SpawnPainting"
   :id 4
   :fields [{:name "entity_id" :type "i32" :getter "Get the entity ID of the painting" :read "varint"}

          {:name "pitch" :type "i8" :getter "Get the (absolute) pitch"}
          {:name "on_ground" :type "bool" :getter "Get whether the entity is now on the ground"}]}
{:name "Advancements"
 :id 88
 :fields [{:name "data" :type "Vec<u8>" :read "bytearray_to_end" :getter "Get the raw data for the packet. Parsing it is out of the scope of this library"}]}
{:name "EntityProperties"
 :id 89
 :fields [{:name "entity_id" :type "i32" :getter "Get the entity ID" :read "varint"}
          {:name "data" :type "Vec<u8>" :getter "Get the raw data for this packet. This library does not attempt to parse the packet" :read "bytearray_to_end"}]}
{:name "EntityEffect"
 :id 90
 :fields [{:name "entity_id" :type "i32" :getter "Get the entity ID" :read "varint"}
          {:name "effect_id" :type "u8" :getter "Get the raw effect ID integer enum"}
          {:name "amplifier" :type "i8" :getter "Get the amplifier = effect level - 1"}
          {:name "duration" :type "i32" :getter "Get the duration of the effect in seconds" :read "varint"}
          {:name "flags" :type "u8" :getter "Get the raw flags byte"}]}
{:name "DeclareRecipes"
 :id 91
 :fields [{:name "data" :type "Vec<u8>" :read "bytearray_to_end" :getter "Get the raw packet data. This packet is not attempted serialized by ozelot"}]}
{:name "Tags"
 :id 92
 ; We could probably serialize this packet
 :fields [{:name "data" :type "Vec<u8>" :read "bytearray_to_end" :getter "Get the raw packet data. This packet is not attempted serialized by ozelot"}]}
]}})
