infinity world
This commit is contained in:
parent
28407d2711
commit
3788bc36dd
@ -18,6 +18,7 @@ pub mod protocol;
|
|||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub enum ServerError {
|
pub enum ServerError {
|
||||||
UnexpectedPacket(u8), // Неожиданный пакет
|
UnexpectedPacket(u8), // Неожиданный пакет
|
||||||
|
WrongPacket, // Пакет поломан, неверные данные
|
||||||
Protocol(ProtocolError), // Ошибка в протоколе при работе с rust_mc_proto
|
Protocol(ProtocolError), // Ошибка в протоколе при работе с rust_mc_proto
|
||||||
ConnectionClosed, // Соединение закрыто, единственная ошибка которая не логируется у handle_connection
|
ConnectionClosed, // Соединение закрыто, единственная ошибка которая не логируется у handle_connection
|
||||||
SerTextComponent, // Ошибка при сериализации текст-компонента
|
SerTextComponent, // Ошибка при сериализации текст-компонента
|
||||||
|
@ -231,7 +231,7 @@ pub fn send_keep_alive(client: Arc<ClientContext>) -> Result<(), ServerError> {
|
|||||||
let timestamp2 = packet.read_long()?;
|
let timestamp2 = packet.read_long()?;
|
||||||
if timestamp2 != timestamp {
|
if timestamp2 != timestamp {
|
||||||
// Послать клиента нахуй
|
// Послать клиента нахуй
|
||||||
Err(ServerError::UnexpectedPacket(serverbound::play::KEEP_ALIVE))
|
Err(ServerError::WrongPacket)
|
||||||
} else {
|
} else {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
@ -248,6 +248,24 @@ pub fn send_system_message(
|
|||||||
client.write_packet(&packet)
|
client.write_packet(&packet)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn send_example_chunks_in_distance(
|
||||||
|
client: Arc<ClientContext>,
|
||||||
|
chunks: &mut Vec<(i32, i32)>,
|
||||||
|
distance: i32,
|
||||||
|
center: (i32, i32),
|
||||||
|
) -> Result<(), ServerError> {
|
||||||
|
for x in -distance + center.0..=distance + center.0 {
|
||||||
|
for z in -distance + center.1..=distance + center.1 {
|
||||||
|
if !chunks.contains(&(x, z)) {
|
||||||
|
send_example_chunk(client.clone(), x as i32, z as i32)?;
|
||||||
|
chunks.push((x, z));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
// Отдельная функция для работы с самой игрой
|
// Отдельная функция для работы с самой игрой
|
||||||
pub fn handle_play_state(
|
pub fn handle_play_state(
|
||||||
client: Arc<ClientContext>, // Контекст клиента
|
client: Arc<ClientContext>, // Контекст клиента
|
||||||
@ -266,11 +284,11 @@ pub fn handle_play_state(
|
|||||||
send_game_event(client.clone(), 13, 0.0)?; // 13 - Start waiting for level chunks
|
send_game_event(client.clone(), 13, 0.0)?; // 13 - Start waiting for level chunks
|
||||||
set_center_chunk(client.clone(), 0, 0)?;
|
set_center_chunk(client.clone(), 0, 0)?;
|
||||||
|
|
||||||
for x in -1..=1 {
|
let mut chunks = Vec::new();
|
||||||
for z in -1..=1 {
|
|
||||||
send_example_chunk(client.clone(), x, z)?;
|
let view_distance = client.client_info().unwrap().view_distance as i32;
|
||||||
}
|
|
||||||
}
|
send_example_chunks_in_distance(client.clone(), &mut chunks, view_distance, (0, 0))?;
|
||||||
|
|
||||||
thread::spawn({
|
thread::spawn({
|
||||||
let client = client.clone();
|
let client = client.clone();
|
||||||
@ -328,6 +346,17 @@ pub fn handle_play_state(
|
|||||||
// 1 sec timer
|
// 1 sec timer
|
||||||
let (x, y, z) = client.position();
|
let (x, y, z) = client.position();
|
||||||
|
|
||||||
|
let (chunk_x, chunk_z) = ((x / 16.0) as i64, (z / 16.0) as i64);
|
||||||
|
let (chunk_x, chunk_z) = (chunk_x as i32, chunk_z as i32);
|
||||||
|
|
||||||
|
set_center_chunk(client.clone(), chunk_x, chunk_z)?;
|
||||||
|
send_example_chunks_in_distance(
|
||||||
|
client.clone(),
|
||||||
|
&mut chunks,
|
||||||
|
view_distance,
|
||||||
|
(chunk_x, chunk_z),
|
||||||
|
)?;
|
||||||
|
|
||||||
send_system_message(
|
send_system_message(
|
||||||
client.clone(),
|
client.clone(),
|
||||||
TextComponent::rainbow(format!("Pos: {} {} {}", x as i64, y as i64, z as i64)),
|
TextComponent::rainbow(format!("Pos: {} {} {}", x as i64, y as i64, z as i64)),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user