diff --git a/pumpkin/src/lib.rs b/pumpkin/src/lib.rs index 9714616a7..adca28979 100644 --- a/pumpkin/src/lib.rs +++ b/pumpkin/src/lib.rs @@ -478,11 +478,15 @@ impl PumpkinServer { .add_player(Arc::new(ClientPlatform::Java(java_client)), profile, Some(config)) .await { + // Set the player on the client BEFORE spawning so that chunk + // sends during spawn_java_player don't get silently dropped. + if let ClientPlatform::Java(client) = player.client.as_ref() { + *client.player.lock().await = Some(player.clone()); + } world .spawn_java_player(&server_clone.basic_config, &player, &server_clone) .await; if let ClientPlatform::Java(client) = player.client.as_ref() { - *client.player.lock().await = Some(player.clone()); client.progress_player_packets(&player, &server_clone).await; // Close when done diff --git a/pumpkin/src/net/bedrock/mod.rs b/pumpkin/src/net/bedrock/mod.rs index 8b3c0104d..034a1b3f9 100644 --- a/pumpkin/src/net/bedrock/mod.rs +++ b/pumpkin/src/net/bedrock/mod.rs @@ -360,6 +360,10 @@ impl BedrockClient { pub async fn send_chunks(&self, chunks: &[SyncChunk]) { let player = self.player.lock().await.clone(); let Some(player) = player.as_ref() else { + debug!( + "send_chunks: player not set yet, dropping {} chunks", + chunks.len() + ); return; }; let Some(server) = player.world().server.upgrade() else { diff --git a/pumpkin/src/net/java/mod.rs b/pumpkin/src/net/java/mod.rs index 5f9038333..6fe5a1d4e 100644 --- a/pumpkin/src/net/java/mod.rs +++ b/pumpkin/src/net/java/mod.rs @@ -341,6 +341,10 @@ impl JavaClient { pub async fn send_chunks(&self, chunks: &[SyncChunk]) { let player = self.player.lock().await.clone(); let Some(player) = player.as_ref() else { + debug!( + "send_chunks: player not set yet, dropping {} chunks", + chunks.len() + ); return; }; let Some(server) = player.world().server.upgrade() else {