From 4d04729809ee35aa67f7441df1507ab56280f683 Mon Sep 17 00:00:00 2001 From: MeexReay Date: Sat, 3 May 2025 20:42:23 +0300 Subject: [PATCH] more helper functions --- src/server/data/mod.rs | 1 - src/server/player/helper.rs | 44 +++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/src/server/data/mod.rs b/src/server/data/mod.rs index 609cfbc..a57ef54 100644 --- a/src/server/data/mod.rs +++ b/src/server/data/mod.rs @@ -25,4 +25,3 @@ impl ReadWritePosition for Packet { Ok(self.write_long(((x & 0x3FFFFFF) << 38) | ((z & 0x3FFFFFF) << 12) | (y & 0xFFF))?) } } - diff --git a/src/server/player/helper.rs b/src/server/player/helper.rs index ccb6146..5b86c88 100644 --- a/src/server/player/helper.rs +++ b/src/server/player/helper.rs @@ -37,6 +37,32 @@ impl ProtocolHelper { } } + pub fn reset_chat(&self) -> Result<(), ServerError> { + match self.state { + ConnectionState::Configuration => { + self.client + .write_packet(&Packet::empty(clientbound::configuration::RESET_CHAT))?; + Ok(()) + } + _ => Err(ServerError::UnexpectedState), + } + } + + pub fn store_cookie(&self, id: &str, data: &[u8]) -> Result<(), ServerError> { + self.client.write_packet(&Packet::build( + match self.state { + ConnectionState::Configuration => clientbound::configuration::STORE_COOKIE, + ConnectionState::Play => clientbound::play::STORE_COOKIE, + _ => { return Err(ServerError::UnexpectedState) }, + }, + |p| { + p.write_string(id)?; + p.write_bytes(data) + }, + )?)?; + Ok(()) + } + /// Leave from Configuration to Play state pub fn leave_configuration(&self) -> Result<(), ServerError> { match self.state { @@ -132,6 +158,24 @@ impl ProtocolHelper { None }; + Ok(data) + }, + ConnectionState::Play => { + let mut packet = Packet::empty(clientbound::play::COOKIE_REQUEST); + packet.write_string(id)?; + self.client.write_packet(&packet)?; + + let mut packet = self + .client + .read_packet(serverbound::play::COOKIE_RESPONSE)?; + packet.read_string()?; + let data = if packet.read_boolean()? { + let n = packet.read_usize_varint()?; + Some(packet.read_bytes(n)?) + } else { + None + }; + Ok(data) } _ => Err(ServerError::UnexpectedState),