aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0346-Don-t-move-existing-players-to-world-spawn.patch
blob: f002120e5421759bf6b28cc4da99323dbec106bd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Thu, 9 Apr 2020 21:20:33 -0400
Subject: [PATCH] Don't move existing players to world spawn

This can cause a nasty server lag the spawn chunks are not kept loaded
or they aren't finished loading yet, or if the world spawn radius is
larger than the keep loaded range.

By skipping this, we avoid potential for a large spike on server start.

== AT ==
public net.minecraft.server.level.ServerPlayer fudgeSpawnLocation(Lnet/minecraft/server/level/ServerLevel;)V

diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
index e695b5ee0b9ce5dad81a7f894ef1e7fd868f11eb..b6698a65d778cea6b7dc9b8ebfceec2425c732b7 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -337,7 +337,7 @@ public class ServerPlayer extends Player {
         this.stats = server.getPlayerList().getPlayerStats(this);
         this.advancements = server.getPlayerList().getPlayerAdvancements(this);
         this.setMaxUpStep(1.0F);
-        this.fudgeSpawnLocation(world);
+        // this.fudgeSpawnLocation(world); // Paper - Don't move existing players to world spawn
         this.updateOptions(clientOptions);
 
         this.cachedSingleHashSet = new com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet<>(this); // Paper
@@ -571,7 +571,7 @@ public class ServerPlayer extends Player {
                 position = Vec3.atCenterOf(world.getSharedSpawnPos());
             }
             this.setLevel(world);
-            this.setPos(position);
+            this.setPosRaw(position.x(), position.y(), position.z()); // Paper - don't register to chunks yet
         }
         this.gameMode.setLevel((ServerLevel) world);
     }
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
index 6bd83549e2ff84b1bc993ef2be79a336ced28f67..8f23597eee06e721a25f7be3a5a65dff6a59ee55 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
@@ -227,6 +227,7 @@ public abstract class PlayerList {
         // Paper start - Entity#getEntitySpawnReason
         if (nbttagcompound == null) {
             player.spawnReason = org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.DEFAULT; // set Player SpawnReason to DEFAULT on first login
+            player.fudgeSpawnLocation(worldserver1); // Paper - Don't move existing players to world spawn
         }
         // Paper end - Entity#getEntitySpawnReason
         player.setServerLevel(worldserver1);