71 lines
2.7 KiB
Rust
71 lines
2.7 KiB
Rust
use minecraft_protocol::version::{v1_16_3, v1_17};
|
|
use tokio::net::tcp::WriteHalf;
|
|
|
|
use super::join_game::JoinGameData;
|
|
use crate::mc::dimension;
|
|
use crate::proto::client::{Client, ClientInfo};
|
|
use crate::proto::packet;
|
|
|
|
/// Send respawn packet to client to jump from lobby into now loaded server.
|
|
///
|
|
/// The required details will be fetched from the `join_game` packet as provided by the server.
|
|
pub async fn lobby_send(
|
|
client: &Client,
|
|
client_info: &ClientInfo,
|
|
writer: &mut WriteHalf<'_>,
|
|
data: JoinGameData,
|
|
) -> Result<(), ()> {
|
|
match client_info.protocol() {
|
|
Some(p) if p < v1_17::PROTOCOL => {
|
|
packet::write_packet(
|
|
v1_16_3::game::Respawn {
|
|
dimension: data.dimension.unwrap_or_else(|| {
|
|
dimension::lobby_dimension(
|
|
&data
|
|
.dimension_codec
|
|
.unwrap_or_else(dimension::default_dimension_codec),
|
|
)
|
|
}),
|
|
world_name: data
|
|
.world_name
|
|
.unwrap_or_else(|| "minecraft:overworld".into()),
|
|
hashed_seed: data.hashed_seed.unwrap_or(0),
|
|
game_mode: data.game_mode.unwrap_or(0),
|
|
previous_game_mode: data.previous_game_mode.unwrap_or(-1i8 as u8),
|
|
is_debug: data.is_debug.unwrap_or(false),
|
|
is_flat: data.is_flat.unwrap_or(false),
|
|
copy_metadata: false,
|
|
},
|
|
client,
|
|
writer,
|
|
)
|
|
.await
|
|
}
|
|
_ => {
|
|
packet::write_packet(
|
|
v1_17::game::Respawn {
|
|
dimension: data.dimension.unwrap_or_else(|| {
|
|
dimension::lobby_dimension(
|
|
&data
|
|
.dimension_codec
|
|
.unwrap_or_else(dimension::default_dimension_codec),
|
|
)
|
|
}),
|
|
world_name: data
|
|
.world_name
|
|
.unwrap_or_else(|| "minecraft:overworld".into()),
|
|
hashed_seed: data.hashed_seed.unwrap_or(0),
|
|
game_mode: data.game_mode.unwrap_or(0),
|
|
previous_game_mode: data.previous_game_mode.unwrap_or(-1i8 as u8),
|
|
is_debug: data.is_debug.unwrap_or(false),
|
|
is_flat: data.is_flat.unwrap_or(false),
|
|
copy_metadata: false,
|
|
},
|
|
client,
|
|
writer,
|
|
)
|
|
.await
|
|
}
|
|
}
|
|
}
|