diff --git a/sniff-packets/src/main.rs b/sniff-packets/src/main.rs
index 67f3194..0a84c2d 100644
--- a/sniff-packets/src/main.rs
+++ b/sniff-packets/src/main.rs
@@ -175,5 +175,24 @@ fn main() -> Result<(), ProtocolError> {
fs::write("registry-data.bin", &data).unwrap();
+ let packet = conn.read_packet()?;
+ conn.write_packet(&packet)?; // finish conf
+
+ loop {
+ let mut packet = conn.read_packet()?;
+
+ if packet.id() == 0x41 {
+ let id = packet.read_varint()?;
+
+ conn.write_packet(&Packet::build(0x00, |packet| packet.write_varint(id))?)?;
+ }
+
+ if packet.id() == 0x27 {
+ // here you can read "Chunk Data and Update Light" packet
+
+ break;
+ }
+ }
+
Ok(())
}
diff --git a/src/main.rs b/src/main.rs
index 1e650f2..e34a01b 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -156,7 +156,7 @@ fn main() {
let mut server = ServerContext::new(config);
server.add_listener(Box::new(ExampleListener)); // Добавляем пример листенера
- // server.add_packet_handler(Box::new(ExamplePacketHandler)); // Добавляем пример пакет хандлера
+ server.add_packet_handler(Box::new(ExamplePacketHandler)); // Добавляем пример пакет хандлера
// Бетонируем сервер контекст от изменений
let server = Arc::new(server);
diff --git a/src/server/mod.rs b/src/server/mod.rs
index fed3abd..58414ec 100644
--- a/src/server/mod.rs
+++ b/src/server/mod.rs
@@ -17,7 +17,7 @@ pub mod protocol;
// Ошибки сервера
#[derive(Debug)]
pub enum ServerError {
- UnexpectedPacket, // Неожиданный пакет
+ UnexpectedPacket(u8), // Неожиданный пакет
Protocol(ProtocolError), // Ошибка в протоколе при работе с rust_mc_proto
ConnectionClosed, // Соединение закрыто, единственная ошибка которая не логируется у handle_connection
SerTextComponent, // Ошибка при сериализации текст-компонента
@@ -25,7 +25,6 @@ pub enum ServerError {
SerNbt, // Ошибка при сериализации nbt
DeNbt, // Ошибка при десериализации nbt
UnexpectedState, // Указывает на то что этот пакет не может быть отправлен в данном режиме (в основном через ProtocolHelper)
- ReadLoopMode, // Ошибка когда вызывается read_any_packet во время работы read_loop
Other(String), // Другая ошибка, либо очень специфичная, либо хз, лучше не использовать и создавать новое поле ошибки
}
diff --git a/src/server/player/context.rs b/src/server/player/context.rs
index 4b52b0c..2a1c85d 100644
--- a/src/server/player/context.rs
+++ b/src/server/player/context.rs
@@ -1,15 +1,10 @@
use std::{
- hash::Hash,
- net::{SocketAddr, TcpStream},
- sync::{
- Arc, RwLock,
- atomic::{AtomicBool, Ordering},
- mpsc::{self, Sender},
- },
+ collections::VecDeque, hash::Hash, net::{SocketAddr, TcpStream}, sync::{
+ atomic::{AtomicBool, Ordering}, Arc, Mutex, RwLock
+ }, thread, time::Duration
};
-use dashmap::DashMap;
-use rust_mc_proto::{MinecraftConnection, Packet};
+use rust_mc_proto::{MinecraftConnection, Packet, ProtocolError};
use uuid::Uuid;
use crate::server::{ServerError, context::ServerContext, protocol::ConnectionState};
@@ -26,8 +21,9 @@ pub struct ClientContext {
client_info: RwLock