Fix client id increment (#1087)

* fix: client id increment (passing &mut u64)

* clippy
This commit is contained in:
Liyan Zhao
2025-07-29 18:40:28 +08:00
committed by GitHub
parent fd8d89a219
commit 018457d199

View File

@@ -13,6 +13,7 @@ use plugin::PluginManager;
use plugin::server::server_command::ServerCommandEvent;
use pumpkin_config::{BASIC_CONFIG, advanced_config};
use pumpkin_macros::send_cancellable;
use pumpkin_protocol::ConnectionState::Play;
use pumpkin_util::permission::{PermissionManager, PermissionRegistry};
use pumpkin_util::text::TextComponent;
use rustyline_async::{Readline, ReadlineEvent};
@@ -270,12 +271,12 @@ impl PumpkinServer {
pub async fn start(&self) {
let tasks = Arc::new(TaskTracker::new());
let master_client_id: u64 = 0;
let mut master_client_id: u64 = 0;
let bedrock_clients = Arc::new(Mutex::new(HashMap::new()));
while !SHOULD_STOP.load(Ordering::Relaxed) {
if !self
.unified_listener_task(master_client_id, &tasks, &bedrock_clients)
.unified_listener_task(&mut master_client_id, &tasks, &bedrock_clients)
.await
{
break;
@@ -321,10 +322,9 @@ impl PumpkinServer {
}
}
#[expect(unused_assignments)]
pub async fn unified_listener_task(
&self,
mut master_client_id_counter: u64,
master_client_id_counter: &mut u64,
tasks: &Arc<TaskTracker>,
bedrock_clients: &Arc<Mutex<HashMap<SocketAddr, Arc<BedrockClient>>>>,
) -> bool {
@@ -339,8 +339,8 @@ impl PumpkinServer {
log::warn!("Failed to set TCP_NODELAY: {e}");
}
let client_id = master_client_id_counter;
master_client_id_counter += 1;
let client_id = *master_client_id_counter;
*master_client_id_counter += 1;
let formatted_address = if BASIC_CONFIG.scrub_ips {
scrub_address(&format!("{client_addr}"))
@@ -356,24 +356,26 @@ impl PumpkinServer {
let server_clone = self.server.clone();
tasks.spawn(async move {
java_client.process_packets(&server_clone).await;
java_client.close();
java_client.await_tasks().await;
java_client.process_packets(&server_clone).await;
java_client.close();
java_client.await_tasks().await;
let player = java_client.player.lock().await;
if let Some(player) = player.as_ref() {
log::debug!("Cleaning up player for id {client_id}");
let player = java_client.player.lock().await;
if let Some(player) = player.as_ref() {
log::debug!("Cleaning up player for id {client_id}");
if let Err(e) = server_clone.player_data_storage
.handle_player_leave(player)
.await
{
log::error!("Failed to save player data on disconnect: {e}");
}
player.remove().await;
server_clone.remove_player(player).await;
if let Err(e) = server_clone.player_data_storage
.handle_player_leave(player)
.await
{
log::error!("Failed to save player data on disconnect: {e}");
}
player.remove().await;
server_clone.remove_player(player).await;
} else if java_client.connection_state.load() == Play {
log::error!("No player found for id {client_id}. This should not happen!");
}
});
}
Err(e) => {
@@ -406,7 +408,7 @@ impl PumpkinServer {
client.process_packet(&server, reader).await;
});
} else if let Ok(packet) = BedrockClient::is_connection_request(&mut Cursor::new(&udp_buf[4..len])) {
master_client_id_counter += 1;
*master_client_id_counter += 1;
let mut platform = BedrockClient::new(self.udp_socket.clone(), client_addr, be_clients);
platform.handle_connection_request(packet).await;