From 4076cda942b028edaf9ec999fd1ce0778aca86bb Mon Sep 17 00:00:00 2001 From: Snowiiii Date: Fri, 11 Oct 2024 12:00:18 +0200 Subject: [PATCH] Add Clientbound Set Health --- .../src/client/play/c_set_health.rs | 22 +++++++++++++++++++ pumpkin-protocol/src/client/play/mod.rs | 2 ++ pumpkin/src/entity/player.rs | 6 +++-- 3 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 pumpkin-protocol/src/client/play/c_set_health.rs diff --git a/pumpkin-protocol/src/client/play/c_set_health.rs b/pumpkin-protocol/src/client/play/c_set_health.rs new file mode 100644 index 000000000..a598444f7 --- /dev/null +++ b/pumpkin-protocol/src/client/play/c_set_health.rs @@ -0,0 +1,22 @@ +use pumpkin_macros::packet; +use serde::Serialize; + +use crate::VarInt; + +#[derive(Serialize)] +#[packet(0x5D)] +pub struct CSetHealth { + health: f32, + food: VarInt, + food_saturation: f32, +} + +impl CSetHealth { + pub fn new(health: f32, food: VarInt, food_saturation: f32) -> Self { + Self { + health, + food, + food_saturation, + } + } +} diff --git a/pumpkin-protocol/src/client/play/mod.rs b/pumpkin-protocol/src/client/play/mod.rs index ff9dd2461..47838aed6 100644 --- a/pumpkin-protocol/src/client/play/mod.rs +++ b/pumpkin-protocol/src/client/play/mod.rs @@ -28,6 +28,7 @@ mod c_remove_entities; mod c_set_container_content; mod c_set_container_property; mod c_set_container_slot; +mod c_set_health; mod c_set_held_item; mod c_set_title; mod c_spawn_player; @@ -72,6 +73,7 @@ pub use c_remove_entities::*; pub use c_set_container_content::*; pub use c_set_container_property::*; pub use c_set_container_slot::*; +pub use c_set_health::*; pub use c_set_held_item::*; pub use c_set_title::*; pub use c_spawn_player::*; diff --git a/pumpkin/src/entity/player.rs b/pumpkin/src/entity/player.rs index aee382fe2..5850da0d8 100644 --- a/pumpkin/src/entity/player.rs +++ b/pumpkin/src/entity/player.rs @@ -17,8 +17,8 @@ use pumpkin_inventory::player::PlayerInventory; use pumpkin_protocol::{ bytebuf::{packet_id::Packet, DeserializerError}, client::play::{ - CGameEvent, CPlayDisconnect, CPlayerAbilities, CPlayerInfoUpdate, CSyncPlayerPosition, - CSystemChatMessage, GameEvent, PlayerAction, + CGameEvent, CPlayDisconnect, CPlayerAbilities, CPlayerInfoUpdate, CSetHealth, + CSyncPlayerPosition, CSystemChatMessage, GameEvent, PlayerAction, }, server::play::{ SChatCommand, SChatMessage, SClickContainer, SClientInformationPlay, SConfirmTeleport, @@ -232,6 +232,8 @@ impl Player { self.entity.health.store(health); self.food.store(food, std::sync::atomic::Ordering::Relaxed); self.food_saturation.store(food_saturation); + self.client + .send_packet(&CSetHealth::new(health, food.into(), food_saturation)); } pub fn set_gamemode(&self, gamemode: GameMode) {