fix: set client player before spawn to prevent invisible chunks on first join (#2307)

* Fix First Join Invisible Chunk

* downgrade warn! to debug! in send_chunks drop path
This commit is contained in:
ZlordHUN
2026-07-07 14:20:18 +02:00
committed by GitHub
parent 44fd621294
commit cc2b537371
3 changed files with 13 additions and 1 deletions

View File

@@ -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

View File

@@ -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 {

View File

@@ -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 {