From 80887eec91067fc09a45d35a8d64761550cc9ab5 Mon Sep 17 00:00:00 2001 From: ice_iix Date: Sun, 27 Dec 2020 18:13:51 -0800 Subject: [PATCH] 1.16.2+: fix Respawn dimension field, closes #452 --- protocol/src/protocol/packet.rs | 10 ++++++++++ protocol/src/protocol/versions/v1_16_4.rs | 2 +- src/server/mod.rs | 5 +++++ 3 files changed, 16 insertions(+), 1 deletion(-) 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);