mirror of https://github.com/zyllian/classics.git synced 2025-05-10 00:16:39 -07:00

add basic server configuration + password protection

This commit is contained in:
Zoey 2024-04-19 11:50:11 -07:00
parent ca94ec10f2
commit c78303cf44
No known key found for this signature in database
GPG key ID: 8611B896D1AAFAF2
7 changed files with 146 additions and 17 deletions

View file

@ -98,12 +98,11 @@ async fn handle_stream_inner(
let mut reader = PacketReader::new(&read_buf);
if let Some(packet) = ClientPacket::read(packet_buf[0], &mut reader) {
// println!("{packet:#?}");
match packet {
ClientPacket::PlayerIdentification {
protocol_version,
username,
verification_key: _,
verification_key,
_unused,
} => {
if protocol_version != 0x07 {
@ -114,6 +113,12 @@ async fn handle_stream_inner(
let mut data = data.write().await;
if let Some(password) = &data.config.password {
if verification_key != *password {
return Ok(Some("Incorrect password!".to_string()));
}
}
for player in &data.players {
if player.username == username {
return Ok(Some(
@ -144,8 +149,8 @@ async fn handle_stream_inner(
reply_queue.push_back(ServerPacket::ServerIdentification {
protocol_version: 0x07,
server_name: "test server".to_string(),
server_motd: "whoaaaaaa".to_string(),
server_name: data.config.name.clone(),
server_motd: data.config.motd.clone(),
user_type: PlayerType::Normal,
});
@ -156,12 +161,19 @@ async fn handle_stream_inner(
let username = player.username.clone();
data.players.push(player);
let (spawn_x, spawn_y, spawn_z) =
if let Some(spawn) = &data.config.spawn {
(spawn.x, spawn.y, spawn.z)
} else {
(16, data.level.y_size / 2 + 2, 16)
};
let spawn_packet = ServerPacket::SpawnPlayer {
player_id: *own_id,
player_name: username.clone(),
x: f16::from_f32(16.5),
y: f16::from_f32((data.level.y_size / 2 + 2) as f32),
z: f16::from_f32(16.5),
x: f16::from_f32(spawn_x as f32 + 0.5),
y: f16::from_f32(spawn_y as f32),
z: f16::from_f32(spawn_z as f32 + 0.5),
yaw: 0,
pitch: 0,
};