diff --git a/protocol/src/protocol/packet.rs b/protocol/src/protocol/packet.rs index 8b05429..cb807b7 100644 --- a/protocol/src/protocol/packet.rs +++ b/protocol/src/protocol/packet.rs @@ -1634,6 +1634,16 @@ state_packets!( field gamemode: u8 =, field level_type: String =, } + packet Respawn_NBT { + field dimension: Option =, + field world_name: String =, + field hashed_seed: i64 =, + field gamemode: u8 =, + field previous_gamemode: u8 =, + field is_debug: bool =, + field is_flat: bool =, + field copy_metadata: bool =, + } packet Respawn_WorldName { field dimension: String =, field world_name: String =, diff --git a/protocol/src/protocol/versions/v1_16_4.rs b/protocol/src/protocol/versions/v1_16_4.rs index 2c351c6..8a9cd66 100644 --- a/protocol/src/protocol/versions/v1_16_4.rs +++ b/protocol/src/protocol/versions/v1_16_4.rs @@ -115,7 +115,7 @@ protocol_packet_ids!( 0x36 => EntityDestroy 0x37 => EntityRemoveEffect 0x38 => ResourcePackSend - 0x39 => Respawn_WorldName + 0x39 => Respawn_NBT 0x3a => EntityHeadLook 0x3b => MultiBlockChange_Packed 0x3c => SelectAdvancementTab diff --git a/src/server/mod.rs b/src/server/mod.rs index 37844ba..2959fbe 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -519,6 +519,7 @@ impl Server { Respawn_Gamemode => on_respawn_gamemode, Respawn_HashedSeed => on_respawn_hashedseed, Respawn_WorldName => on_respawn_worldname, + Respawn_NBT => on_respawn_nbt, KeepAliveClientbound_i64 => on_keep_alive_i64, KeepAliveClientbound_VarInt => on_keep_alive_varint, KeepAliveClientbound_i32 => on_keep_alive_i32, @@ -1057,6 +1058,10 @@ impl Server { self.respawn(respawn.gamemode) } + fn on_respawn_nbt(&mut self, respawn: packet::play::clientbound::Respawn_NBT) { + self.respawn(respawn.gamemode) + } + fn respawn(&mut self, gamemode_u8: u8) { self.world = world::World::new(self.protocol_version); let gamemode = Gamemode::from_int((gamemode_u8 & 0x7) as i32);