Hide the player in the PlayerLoginEvent instead of the PlayerJoinEvent to fully fix the race condition