public void OnPlayerLoad(Packet packet)
        {
            int characterId = packet.ReadInt();

            ThreadContext.Properties["CharacterID"] = characterId;

            if (RedisBackend.Instance.HoldoffPlayerConnection(characterId))
            {
                Program.MainForm.LogAppend("Bouncing charid: " + characterId);
                SendConnectToServer(Server.Instance.PublicIP.GetAddressBytes(), Server.Instance.Port, true);
                return;
            }


            if (RedisBackend.Instance.PlayerIsMigrating(characterId, true) == false)
            {
                Program.MainForm.LogAppend("Disconnecting because not migrating. Charid: " + characterId);
                goto cleanup_and_disconnect;
            }


            if (Server.Instance.CharacterList.ContainsKey(characterId))
            {
                Program.MainForm.LogAppend($"Player tried to login while already being loggedin. Playerid: {characterId}");
                goto cleanup_and_disconnect;
            }

            var character  = new Character(characterId);
            var loadResult = character.Load(IP);

            if (loadResult != Character.LoadFailReasons.None)
            {
                Program.MainForm.LogAppend($"Player tried to login, but we failed loading the char! Playerid: {characterId}, reason {loadResult}");
                goto cleanup_and_disconnect;
            }

            Player.Character = character;
            character.Player = Player;

            Program.MainForm.LogAppend($"{character.Name} connected!");
            Program.MainForm.ChangeLoad(true);
            Server.Instance.CharacterList.Add(characterId, character);

            Server.Instance.CenterConnection.RegisterCharacter(
                characterId,
                character.Name,
                character.CharacterStat.Job,
                character.CharacterStat.Level,
                character.GMLevel
                );

            Loaded = true;

            MapPacket.SendJoinCashServer(character);
            CashPacket.SendInfo(character);

            TryRegisterHackDetection();

            return;

cleanup_and_disconnect:

            Server.Instance.CCIngPlayerList.Remove(characterId);
            Disconnect();
        }