diff --git a/src/protocol/packet.rs b/src/protocol/packet.rs index 21b0615..6fb57e9 100644 --- a/src/protocol/packet.rs +++ b/src/protocol/packet.rs @@ -1310,6 +1310,14 @@ state_packets!( field pitch: f32 =, field flags: u8 =, } + packet TeleportPlayer_OnGround { + field x: f64 =, + field eyes_y: f64 =, + field z: f64 =, + field yaw: f32 =, + field pitch: f32 =, + field on_ground: bool =, + } /// EntityUsedBed is sent by the server when a player goes to bed. packet EntityUsedBed { field entity_id: VarInt =, diff --git a/src/protocol/versions/v1_7_10.rs b/src/protocol/versions/v1_7_10.rs index 1bc92ff..c930e42 100644 --- a/src/protocol/versions/v1_7_10.rs +++ b/src/protocol/versions/v1_7_10.rs @@ -42,7 +42,7 @@ protocol_packet_ids!( 0x05 => SpawnPosition_i32 0x06 => UpdateHealth_u16 0x07 => Respawn - 0x08 => TeleportPlayer_NoConfirm + 0x08 => TeleportPlayer_OnGround 0x09 => SetCurrentHotbarSlot 0x0a => EntityUsedBed_i32 0x0b => Animation diff --git a/src/server/mod.rs b/src/server/mod.rs index f6f8cf2..c2f0a55 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -415,6 +415,7 @@ impl Server { MultiBlockChange_u16 => on_multi_block_change_u16, TeleportPlayer_WithConfirm => on_teleport_player_withconfirm, TeleportPlayer_NoConfirm => on_teleport_player_noconfirm, + TeleportPlayer_OnGround => on_teleport_player_onground, TimeUpdate => on_time_update, ChangeGameState => on_game_state_change, UpdateBlockEntity => on_block_entity_update, @@ -1000,6 +1001,11 @@ impl Server { self.on_teleport_player(teleport.x, teleport.y, teleport.z, teleport.yaw as f64, teleport.pitch as f64, teleport.flags, None) } + fn on_teleport_player_onground(&mut self, teleport: packet::play::clientbound::TeleportPlayer_OnGround) { + let flags: u8 = 0; // always absolute + self.on_teleport_player(teleport.x, teleport.eyes_y - 1.62, teleport.z, teleport.yaw as f64, teleport.pitch as f64, flags, None) + } + fn on_teleport_player(&mut self, x: f64, y: f64, z: f64, yaw: f64, pitch: f64, flags: u8, teleport_id: Option) { use std::f64::consts::PI; if let Some(player) = self.player {