From 50262ff1d7c93bf84ae637802298ffbf3ef6061d Mon Sep 17 00:00:00 2001 From: MeexReay Date: Sat, 3 May 2025 19:03:52 +0300 Subject: [PATCH] add read+write position --- src/server/data/mod.rs | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/server/data/mod.rs b/src/server/data/mod.rs index 1e887b3..609cfbc 100644 --- a/src/server/data/mod.rs +++ b/src/server/data/mod.rs @@ -1,4 +1,4 @@ -use rust_mc_proto::{DataReader, DataWriter}; +use rust_mc_proto::{DataReader, DataWriter, Packet}; use super::ServerError; @@ -9,3 +9,20 @@ pub trait ReadWriteNBT: DataReader + DataWriter { fn read_nbt(&mut self) -> Result; fn write_nbt(&mut self, val: &T) -> Result<(), ServerError>; } + +pub trait ReadWritePosition: DataReader + DataWriter { + fn read_position(&mut self) -> Result<(i64, i64, i64), ServerError>; + fn write_position(&mut self, x: i64, y: i64, z: i64) -> Result<(), ServerError>; +} + +impl ReadWritePosition for Packet { + fn read_position(&mut self) -> Result<(i64, i64, i64), ServerError> { + let val = self.read_long()?; + Ok((val >> 38, val << 52 >> 52, val << 26 >> 38)) + } + + fn write_position(&mut self, x: i64, y: i64, z: i64) -> Result<(), ServerError> { + Ok(self.write_long(((x & 0x3FFFFFF) << 38) | ((z & 0x3FFFFFF) << 12) | (y & 0xFFF))?) + } +} +