fCraft.DrawCommands.UndoPlayerLookup C# (CSharp) Method

UndoPlayerLookup() static private method

static private UndoPlayerLookup ( [ task ) : void
task [
return void
        static void UndoPlayerLookup([NotNull] SchedulerTask task) {
            BlockDBUndoArgs args = (BlockDBUndoArgs)task.UserState;
            if (args == null) throw new NullReferenceException("task.UserState");

            bool allPlayers = (args.Targets.Length == 0);
            string cmdName = (args.Not ? "UndoPlayerNot" : "UndoPlayer");

            // prepare to look up
            string targetList;
            if (allPlayers) {
                targetList = "EVERYONE";
            } else if (args.Not) {
                targetList = "EVERYONE except " + args.Targets.JoinToClassyString();
            } else {
                targetList = args.Targets.JoinToClassyString();
            }
            BlockDBEntry[] changes;

            if (args.CountLimit > 0) {
                // count-limited lookup
                if (args.Targets.Length == 0) {
                    changes = args.World.BlockDB.Lookup(args.CountLimit);
                } else {
                    changes = args.World.BlockDB.Lookup(args.CountLimit, args.Targets, args.Not);
                }
                if (changes.Length > 0) {
                    Logger.Log(LogType.UserActivity,
                               "{0}: Asked {1} to confirm undo on world {2}",
                               cmdName,
                               args.Player.Name,
                               args.World.Name);
                    args.Player.Confirm(BlockDBUndoConfirmCallback,
                                        args,
                                        "Undo last {0} changes made by {1}&S?",
                                        changes.Length,
                                        targetList);
                }
            } else {
                // time-limited lookup
                if (args.Targets.Length == 0) {
                    changes = args.World.BlockDB.Lookup(Int32.MaxValue, args.AgeLimit);
                } else {
                    changes = args.World.BlockDB.Lookup(Int32.MaxValue, args.Targets, args.Not, args.AgeLimit);
                }
                if (changes.Length > 0) {
                    Logger.Log(LogType.UserActivity,
                               "{0}: Asked {1} to confirm undo on world {2}",
                               cmdName,
                               args.Player.Name,
                               args.World.Name);
                    args.Player.Confirm(BlockDBUndoConfirmCallback,
                                        args,
                                        "Undo changes ({0}) made by {1}&S in the last {2}?",
                                        changes.Length,
                                        targetList,
                                        args.AgeLimit.ToMiniString());
                }
            }

            // stop if there's nothing to undo
            if (changes.Length == 0) {
                args.Player.Message("{0}: Found nothing to undo.", cmdName);
            } else {
                args.Entries = changes;
            }
        }