From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Aikar 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. diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java index 286b75a27103a084a9f9d79a90716ebcad65d813..162b1a8c6ab57aafa4f6deefc842755a8e14208e 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -251,7 +251,7 @@ public class ServerPlayer extends Player implements ContainerListener { this.stats = server.getPlayerList().getStatisticManager(this); this.advancements = server.getPlayerList().getPlayerAdvancements(this); this.maxUpStep = 1.0F; - this.fudgeSpawnLocation(world); + //this.c(worldserver); // Paper - don't move to spawn on login, only first join this.textFilter = server.createTextFilterForPlayer(this); this.cachedSingleHashSet = new com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet<>(this); // Paper @@ -303,6 +303,7 @@ public class ServerPlayer extends Player implements ContainerListener { } // CraftBukkit end + public final void moveToSpawn(ServerLevel worldserver) { fudgeSpawnLocation(worldserver); } // Paper - OBFHELPER private void fudgeSpawnLocation(ServerLevel world) { BlockPos blockposition = world.getSpawn(); @@ -480,7 +481,7 @@ public class ServerPlayer extends Player implements ContainerListener { position = Vec3.atCenterOf(((ServerLevel) world).getSpawn()); } this.level = world; - this.setPos(position.x(), position.y(), position.z()); + 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 86c5549196a4e9011c5240e7918b466c299be4a3..30666fca36b683158ff60302684b5093f5536e24 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -204,6 +204,8 @@ public abstract class PlayerList { worldserver1 = worldserver; } + if (nbttagcompound == null) player.moveToSpawn(worldserver1); // Paper - only move to spawn on first login, otherwise, stay where you are.... + player.setLevel(worldserver1); player.gameMode.setLevel((ServerLevel) player.level); String s1 = "local";