aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0672-Force-close-world-loading-screen.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/server/0672-Force-close-world-loading-screen.patch')
-rw-r--r--patches/server/0672-Force-close-world-loading-screen.patch32
1 files changed, 32 insertions, 0 deletions
diff --git a/patches/server/0672-Force-close-world-loading-screen.patch b/patches/server/0672-Force-close-world-loading-screen.patch
new file mode 100644
index 0000000000..d63c80e4e2
--- /dev/null
+++ b/patches/server/0672-Force-close-world-loading-screen.patch
@@ -0,0 +1,32 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Nassim Jahnke <[email protected]>
+Date: Wed, 2 Mar 2022 09:45:56 +0100
+Subject: [PATCH] Force close world loading screen
+
+Dead players would be stuck in the world loading screen and other players may
+miss messages and similar sent in the join event if chunk loading is slow.
+Paper already circumvents falling through the world before chunks are loaded,
+so we do not need that. The client only needs the chunk it is currently in to
+be loaded to close the loading screen, so we just send an empty one.
+
+diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
+index 2b104326f718bdfa263554c60ead798659ab5fa0..22c1bf5989065016364505a0665a5205fd8528b5 100644
+--- a/src/main/java/net/minecraft/server/players/PlayerList.java
++++ b/src/main/java/net/minecraft/server/players/PlayerList.java
+@@ -394,6 +394,16 @@ public abstract class PlayerList {
+ this.sendActivePlayerEffects(player);
+ // Paper start - Fire PlayerJoinEvent when Player is actually ready; move vehicle into method so it can be called above - short circuit around that code
+ this.onPlayerJoinFinish(player, worldserver1, s1);
++ // Paper start - Send empty chunk, so players aren't stuck in the world loading screen with our chunk system not sending chunks when dead
++ if (player.isDeadOrDying()) {
++ net.minecraft.core.Holder<net.minecraft.world.level.biome.Biome> plains = worldserver1.registryAccess().registryOrThrow(net.minecraft.core.registries.Registries.BIOME)
++ .getHolderOrThrow(net.minecraft.world.level.biome.Biomes.PLAINS);
++ player.connection.send(new net.minecraft.network.protocol.game.ClientboundLevelChunkWithLightPacket(
++ new net.minecraft.world.level.chunk.EmptyLevelChunk(worldserver1, player.chunkPosition(), plains),
++ worldserver1.getLightEngine(), (java.util.BitSet)null, (java.util.BitSet) null)
++ );
++ }
++ // Paper end - Send empty chunk
+ }
+ private void mountSavedVehicle(ServerPlayer player, ServerLevel worldserver1, Optional<CompoundTag> optional) {
+ // Paper end - Fire PlayerJoinEvent when Player is actually ready