public virtual void SpawnLevel(Level toLevel, PlayerLocation spawnPoint) { SetNoAi(true); // send teleport straight up, no chunk loading SetPosition(new PlayerLocation { X = KnownPosition.X, Y = 4000, Z = KnownPosition.Z, Yaw = 91, Pitch = 28, HeadYaw = 91, }); Level.RemovePlayer(this, true); Level.EntityManager.RemoveEntity(null, this); Level = toLevel; // Change level SpawnPosition = spawnPoint; Level.AddPlayer(this, "", false); // reset all health states HealthManager.ResetHealth(); SendSetHealth(); SendSetSpawnPosition(); SendAdventureSettings(); SendPlayerInventory(); lock (_chunksUsed) { _chunksUsed.Clear(); } ForcedSendChunksForKnownPosition(spawnPoint); // send teleport to spawn SetPosition(spawnPoint); SetNoAi(false); Level.SpawnToAll(this); IsSpawned = true; Log.InfoFormat("Respawn player {0} on level {1}", Username, Level.LevelId); SendSetTime(); }