fCraft.InfoCommands.RankInfoHandler C# (CSharp) Method

RankInfoHandler() private static method

private static RankInfoHandler ( Player player, Command cmd ) : void
player Player
cmd Command
return void
        private static void RankInfoHandler( Player player, Command cmd )
        {
            Rank rank;

            string rankName = cmd.Next();
            if ( cmd.HasNext ) {
                CdRankInfo.PrintUsage( player );
                return;
            }

            if ( rankName == null ) {
                rank = player.Info.Rank;
            } else {
                rank = RankManager.FindRank( rankName );
                if ( rank == null ) {
                    player.Message( "No such rank: \"{0}\". See &H/Ranks", rankName );
                    return;
                }
            }

            List<Permission> permissions = new List<Permission>();
            for ( int i = 0; i < rank.Permissions.Length; i++ ) {
                if ( rank.Permissions[i] ) {
                    permissions.Add( ( Permission )i );
                }
            }

            Permission[] sortedPermissionNames =
                permissions.OrderBy( s => s.ToString(), StringComparer.OrdinalIgnoreCase ).ToArray();
            {
                StringBuilder sb = new StringBuilder();
                sb.AppendFormat( "Players of rank {0}&S can: ", rank.ClassyName );
                bool first = true;
                foreach (Permission p in sortedPermissionNames)
                {
                    if ( !first )
                        sb.Append( ',' ).Append( ' ' );
                    Rank permissionLimit = rank.PermissionLimits[( int )p];
                    sb.Append( p );
                    if ( permissionLimit != null ) {
                        sb.AppendFormat( "({0}&S)", permissionLimit.ClassyName );
                    }
                    first = false;
                }
                player.Message( sb.ToString() );
            }

            if ( rank.Can( Permission.Draw ) ) {
                StringBuilder sb = new StringBuilder();
                if ( rank.DrawLimit > 0 ) {
                    sb.AppendFormat( "Draw limit: {0} blocks.", rank.DrawLimit );
                } else {
                    sb.AppendFormat( "Draw limit: None (unlimited)." );
                }
                if ( rank.Can( Permission.CopyAndPaste ) ) {
                    sb.AppendFormat( " Copy/paste slots: {0}", rank.CopySlots );
                }
                player.Message( sb.ToString() );
            }

            if ( rank.IdleKickTimer > 0 ) {
                player.Message( "Idle kick after {0}", TimeSpan.FromMinutes( rank.IdleKickTimer ).ToMiniString() );
            }
        }