예제 #1
0
        public void OnResourcePackClientResponsePacket(ResourcePackClientResponsePacket packet)
        {
            if (packet.ResponseStatus == ResourcePackClientResponsePacket.STATUS_REFUSED)
            {
                Close("disconnectionScreen.resourcePack");
            }
            else if (packet.ResponseStatus == ResourcePackClientResponsePacket.STATUS_SEND_PACKS)
            {
                //TODO: ResourcePackDataInfoPacket
            }
            else if (packet.ResponseStatus == ResourcePackClientResponsePacket.STATUS_HAVE_ALL_PACKS)
            {
                ResourcePackStackPacket resourcePackStackPacket = new ResourcePackStackPacket();
                SendDataPacket(resourcePackStackPacket);
            }
            else if (packet.ResponseStatus == ResourcePackClientResponsePacket.STATUS_COMPLETED)
            {
                StartGamePacket startGamePacket = new StartGamePacket();
                SendDataPacket(startGamePacket);

                PlayStatusPacket playStatusPacket = new PlayStatusPacket();
                playStatusPacket.Status = PlayStatusPacket.PLAYER_SPAWN;
                SendDataPacket(playStatusPacket);
            }
        }
예제 #2
0
        public void SendPlayStatus(int status)
        {
            PlayStatusPacket pk = new PlayStatusPacket();

            pk.Status = status;

            this.SendPacket(pk);
        }
예제 #3
0
        public void SendPlayStatus(int status, int flag = RakNetProtocol.FlagNormal)
        {
            PlayStatusPacket pk = new PlayStatusPacket
            {
                Status = status
            };

            this.SendPacket(pk, flag: flag);
        }
예제 #4
0
        private void LoginSuccess()
        {
            PlayStatusPacket pk = new PlayStatusPacket();

            pk.Status = PlayStatusPacket.LOGIN_SUCCESS;
            SendDataPacket(pk);

            ResourcePacksInfoPacket pk2 = new ResourcePacksInfoPacket();

            SendDataPacket(pk2);
        }
예제 #5
0
        private void OnLoginPacket(LoginPacket packet)
        {
            LoginData  = packet.LoginData;
            ClientData = packet.ClientData;

            PlayStatusPacket pk = new PlayStatusPacket();

            if (packet.Protocol > Protocol.ProtocolNumber)
            {
                pk.Status = PlayStatusPacket.LOGIN_FAILED_SERVER;
                SendDataPacket(pk);
                _logger.Info("minecore.login.failedServer", LoginData.DisplayName, ClientPeer.PeerEndPoint);
                return;
            }

            if (packet.Protocol < Protocol.ProtocolNumber)
            {
                pk.Status = PlayStatusPacket.LOGIN_FAILED_CLIENT;
                SendDataPacket(pk);
                _logger.Info("minecore.login.failedClient", LoginData.DisplayName, ClientPeer.PeerEndPoint);
                return;
            }

            if (ServerListData.JoinedPlayer > ServerListData.MaxPlayer)
            {
                pk.Status = PlayStatusPacket.LOGIN_FAILED_SERVER_FULL;
                SendDataPacket(pk);
                _logger.Info("minecore.login.serverFull", LoginData.DisplayName, ClientPeer.PeerEndPoint);
                return;
            }

            if (ServerConfig.UseXboxLiveAuth && !packet.TokenValidated)
            {
                Close("disconnectionScreen.notAuthenticated");
                _logger.Info("minecore.login.faildXbox", LoginData.DisplayName, ClientPeer.PeerEndPoint);
                return;
            }

            _logger.Info(StringManager.GetString("minecore.login", LoginData.DisplayName, EntityId,
                                                 ClientPeer.PeerEndPoint));

            if (ServerConfig.UseEncryption)
            {
                // TODO: Generate Jwt
                ServerToClientHandshakePacket handshake = new ServerToClientHandshakePacket();
                handshake.Token = "";
                SendDataPacket(handshake);
            }
            else
            {
                LoginSuccess();
            }
        }