private bool PlayerSpawn(ref BinaryReader reader, int playerNumber)
        {
            int id = reader.ReadByte();

            if (Main.netMode == 2)
            {
                id = playerNumber;
            }
            Player player = Main.player[id];

            player.SpawnX = reader.ReadInt16();
            player.SpawnY = reader.ReadInt16();
            player.Spawn();
            if (id == Main.myPlayer && Main.netMode != 2)
            {
                Main.ActivePlayerFileData.StartPlayTimer();
                Player.Hooks.EnterWorld(Main.myPlayer);
            }
            if (Main.netMode != 2 || Netplay.Clients[playerNumber].State < 3)
            {
                return(true);
            }
            //如果数据中没有玩家的信息
            if (!ServerSideCharacter.XmlData.Data.ContainsKey(Main.player[playerNumber].name))
            {
                try
                {
                    //创建新的玩家数据
                    ServerPlayer serverPlayer = ServerPlayer.CreateNewPlayer(Main.player[playerNumber]);
                    serverPlayer.PrototypePlayer = Main.player[playerNumber];
                    ServerSideCharacter.XmlData.Data.Add(Main.player[playerNumber].name, serverPlayer);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                }
            }
            if (Netplay.Clients[playerNumber].State == 3)
            {
                Netplay.Clients[playerNumber].State = 10;
                NetMessage.greetPlayer(playerNumber);
                NetMessage.buffer[playerNumber].broadcast = true;
                ServerSideCharacter.SyncConnectedPlayer(playerNumber);
                NetMessage.SendData(MessageID.SpawnPlayer, -1, playerNumber, NetworkText.Empty, playerNumber, 0f, 0f, 0f, 0, 0, 0);
                NetMessage.SendData(MessageID.AnglerQuest, playerNumber, -1, NetworkText.FromLiteral(Main.player[playerNumber].name), Main.anglerQuest, 0f, 0f, 0f, 0, 0, 0);
                return(true);
            }
            NetMessage.SendData(MessageID.SpawnPlayer, -1, playerNumber, NetworkText.Empty, playerNumber, 0f, 0f, 0f, 0, 0, 0);
            return(true);
        }
 private bool TileChange(ref BinaryReader reader, int playerNumber)
 {
     if (Main.netMode == 2)
     {
         try
         {
             Player       p      = Main.player[playerNumber];
             ServerPlayer player = p.GetServerPlayer();
             int          action = reader.ReadByte();
             short        X      = reader.ReadInt16();
             short        Y      = reader.ReadInt16();
             short        type   = reader.ReadInt16();
             int          style  = reader.ReadByte();
             if (ServerSideCharacter.CheckSpawn(X, Y) && player.PermissionGroup.GroupName != "spadmin")
             {
                 player.SendErrorInfo("Warning: Spawn is protected from change");
                 NetMessage.SendTileSquare(-1, X, Y, 4);
                 return(true);
             }
             else if (ServerSideCharacter.RegionManager.CheckRegion(X, Y, player))
             {
                 player.SendErrorInfo("Warning: You don't have permission to change this tile");
                 NetMessage.SendTileSquare(-1, X, Y, 4);
                 return(true);
             }
             else if (player.PermissionGroup.GroupName == "criminal")
             {
                 player.SendErrorInfo("Warning: Criminals cannot change tiles");
                 NetMessage.SendTileSquare(-1, X, Y, 4);
                 return(true);
             }
         }
         catch (Exception ex)
         {
             CommandBoardcast.ConsoleError(ex);
         }
     }
     return(false);
 }