diff --git a/src/data/async_reader.rs b/src/data/async_reader.rs index 61f7cae..4462d4d 100644 --- a/src/data/async_reader.rs +++ b/src/data/async_reader.rs @@ -32,10 +32,6 @@ pub trait AsyncReader { Ok(self.read_bytes(1).await?[0]) } - async fn read_signed_byte(&mut self) -> Result { - Ok(self.read_byte().await? as i8) - } - async fn read_varint_size(&mut self) -> Result<(i32, usize), DataError> { let mut value = 0; let mut position = 0; @@ -71,36 +67,4 @@ pub trait AsyncReader { let id = cursor.read_varint()?; Ok(Packet::new(id as u8, cursor)) } - - async fn read_short(&mut self) -> Result { - Ok(u16::from_be_bytes( - self.read_bytes(2).await?.try_into().unwrap() - )) - } - - async fn read_signed_short(&mut self) -> Result { - Ok(self.read_short().await? as i16) - } - - async fn read_string(&mut self) -> Result { - let size = self.read_varint().await?; - let vec = self.read_bytes(size as usize).await?; - String::from_utf8(vec).or( Err(DataError::StringDecodeError)) - } - - async fn read_long(&mut self) -> Result { - Ok(u64::from_be_bytes( - self.read_bytes(8).await?.try_into().unwrap() - )) - } - - async fn read_signed_long(&mut self) -> Result { - Ok(self.read_long().await? as i64) - } - - async fn read_uuid(&mut self) -> Result { - Ok(u128::from_be_bytes( - self.read_bytes(16).await?.try_into().unwrap() - )) - } } \ No newline at end of file diff --git a/src/data/async_writer.rs b/src/data/async_writer.rs index f21d569..3bc952d 100644 --- a/src/data/async_writer.rs +++ b/src/data/async_writer.rs @@ -15,30 +15,6 @@ impl AsyncWriter for TcpStream { pub trait AsyncWriter { async fn write_bytes(&mut self, bytes: &[u8]) -> Result<(), DataError>; - async fn write_byte(&mut self, value: u8) -> Result<(), DataError> { - self.write_bytes(&[value]).await - } - - async fn write_signed_byte(&mut self, value: i8) -> Result<(), DataError> { - self.write_byte(value as u8).await - } - - async fn write_varint_size(&mut self, value: i32) -> Result { - let mut _value = value as u32; - let mut position = 0; - loop { - let mut byte = (_value & 127) as u8; - position += 1; _value >>= 7; - if _value != 0 { byte += 128; }; - self.write_byte(byte).await?; - if _value == 0 { return Ok(position) } - } - } - - async fn write_varint(&mut self, value: i32) -> Result<(), DataError> { - self.write_varint_size(value).await?; Ok(()) - } - async fn write_packet(&mut self, packet: Packet, threshold: Option) -> Result<(), DataError> { let mut buf = Vec::new(); @@ -67,30 +43,4 @@ pub trait AsyncWriter { self.write_bytes(&buf).await?; Ok(()) } - - async fn write_short(&mut self, value: u16) -> Result<(), DataError> { - self.write_bytes(&value.to_be_bytes()).await - } - - async fn write_signed_short(&mut self, value: i16) -> Result<(), DataError> { - self.write_short(value as u16).await - } - - async fn write_string(&mut self, value: &str) -> Result<(), DataError> { - self.write_varint(value.len() as i32).await?; - self.write_bytes(value.as_bytes()).await?; - Ok(()) - } - - async fn write_long(&mut self, value: u64) -> Result<(), DataError> { - self.write_bytes(&value.to_be_bytes()).await - } - - async fn write_signed_long(&mut self, value: i64) -> Result<(), DataError> { - self.write_long(value as u64).await - } - - async fn write_uuid(&mut self, value: u128) -> Result<(), DataError> { - self.write_bytes(&value.to_be_bytes()).await - } } \ No newline at end of file diff --git a/src/data/mod.rs b/src/data/mod.rs index 64bf474..46a1a5d 100644 --- a/src/data/mod.rs +++ b/src/data/mod.rs @@ -12,6 +12,7 @@ mod writer; mod packet; mod packet_id; mod component; +mod nbt; #[derive(Debug)] pub enum DataError { @@ -44,4 +45,5 @@ pub use async_writer::*; pub use writer::*; pub use packet::*; pub use packet_id::{clientbound, serverbound}; -pub use component::*; \ No newline at end of file +pub use component::*; +pub use nbt::*; \ No newline at end of file diff --git a/src/data/nbt.rs b/src/data/nbt.rs new file mode 100644 index 0000000..8eb1322 --- /dev/null +++ b/src/data/nbt.rs @@ -0,0 +1,53 @@ +use std::io::Cursor; + + + + +const TAG_END: u8 = 0; +const TAG_BYTE: u8 = 1; +const TAG_SHORT: u8 = 2; +const TAG_INT: u8 = 3; +const TAG_LONG: u8 = 4; +const TAG_FLOAT: u8 = 5; +const TAG_DOUBLE: u8 = 6; +const TAG_BYTE_ARRAY: u8 = 7; +const TAG_STRING: u8 = 8; +const TAG_LIST: u8 = 9; +const TAG_COMPOUND: u8 = 10; +const TAG_INT_ARRAY: u8 = 11; +const TAG_LONG_ARRAY: u8 = 12; + +enum TAG { + END, + COMPOUND(Vec), + STRING(String), + BYTE(i8), + SHORT(i16), + INT(i32), + LONG(i64), + FLOAT(f32), + DOUBLE(f64), + // LIST + // BYTE_ARRAY + // INT_ARRAY + // LONG_ARRAY +} + +struct NBT { + key: String, + value: TAG, +} + +impl NBT { + fn new(key: String, value: TAG) -> Self { + Self { key, value } + } +} + +pub trait NBT_Reader { + +} + +impl NBT_Reader for Cursor> { + +} \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 923a66e..24af8b6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -9,14 +9,16 @@ mod cycle; #[tokio::main] async fn main() { - let Ok(server) = Server::new("127.0.0.1:25565").await else { - println!("Не удалось забиндить сервер"); - return; - }; + // let Ok(server) = Server::new("127.0.0.1:25565").await else { + // println!("Не удалось забиндить сервер"); + // return; + // }; - loop { - let stream = server.accept().await; - tokio::spawn(cycle::main(stream)); - } + // loop { + // let stream = server.accept().await; + // tokio::spawn(cycle::main(stream)); + // } + + }