public void ConfirmRequest(IUser user)
        {
            if (_pendingConfirmation.All(c => !Equals(c.User, user)))
            {
                user.SendLocalizedMessage(_wreckPlugin.Translations, "wreckingball_no_request");
                return;
            }

            DestructionRequest destructionRequest = _pendingConfirmation.FirstOrDefault(c => Equals(c.User, user));

            if (destructionRequest != null && (DateTime.Now - destructionRequest.RequestAdded).TotalSeconds >= 120)
            {
                _pendingConfirmation.Remove(destructionRequest);
                user.SendLocalizedMessage(_wreckPlugin.Translations, "wreckingball_no_request");
                return;
            }

            _scanQueue.Add(destructionRequest);
            _pendingConfirmation.Remove(destructionRequest);
            user.SendLocalizedMessage(_wreckPlugin.Translations, "wreckingball_confirmed");
        }
        public void ScanRun()
        {
            if (_scanQueue.Count == 0)
            {
                return;
            }
            DestructionRequest request = _scanQueue.First();

            int objectsFound = 0;

            foreach (BarricadeRegion region in BarricadeManager.regions)
            {
                foreach (BarricadeData data in region.barricades)
                {
                    if (Vector3.Distance(request.Position, data.point.ToSystemVector()) > request.Radius)
                    {
                        continue;
                    }

                    if (_destroyQueue.ContainsKey(data.GetHashCode()))
                    {
                        continue;
                    }

                    if (request.SteamID != 0)
                    {
                        if (data.owner != request.SteamID)
                        {
                            continue;
                        }
                        if (request.WreckType != WreckType.Scan && _permissionProvider.CheckHasAnyPermission(_wreckPlugin.Container.Resolve <IPlayerManager> ().GetPlayer(request.SteamID.ToString()), "wreckingball.skip.barricade", "wreckingball.skip.*", "wreckingball.*") == PermissionResult.Grant)
                        {
                            continue;
                        }
                    }

                    if (request.ItemID != 0)
                    {
                        if (data.barricade.id != request.ItemID)
                        {
                            continue;
                        }
                    }

                    if (request.Filters != null)
                    {
                        if (!_wreckPlugin.ConfigurationInstance.Elements.Any(c => request.Filters.Contains(c.CategoryId) && c.Id == data.barricade.id || request.Filters.Contains('*')))
                        {
                            continue;
                        }
                    }

                    if (request.WreckType != WreckType.Scan && _permissionProvider.CheckHasAnyPermission(request.User, "wreckingball.skip.barricade", "wreckingball.skip.*", "wreckingball.*") == PermissionResult.Grant)
                    {
                        continue;
                    }

                    objectsFound++;
                    if (request.WreckType == WreckType.Scan)
                    {
                        continue;
                    }
                    _destroyQueue.Add(data.GetHashCode(), data);
                }
            }

            foreach (StructureRegion region in StructureManager.regions)
            {
                foreach (StructureData data in region.structures)
                {
                    if (Vector3.Distance(request.Position, data.point.ToSystemVector()) > request.Radius)
                    {
                        continue;
                    }

                    if (_destroyQueue.ContainsKey(data.GetHashCode()))
                    {
                        continue;
                    }

                    if (request.SteamID != 0)
                    {
                        if (data.owner != request.SteamID)
                        {
                            continue;
                        }
                        if (request.WreckType != WreckType.Scan && _permissionProvider.CheckHasAnyPermission(_wreckPlugin.Container.Resolve <IPlayerManager> ().GetPlayer(request.SteamID.ToString()), "wreckingball.skip.structure", "wreckingball.skip.*", "wreckingball.*") == PermissionResult.Grant)
                        {
                            continue;
                        }
                    }

                    if (request.ItemID != 0)
                    {
                        if (data.structure.id != request.ItemID)
                        {
                            continue;
                        }
                    }

                    if (request.Filters != null)
                    {
                        if (!_wreckPlugin.ConfigurationInstance.Elements.Any(c => request.Filters.Contains(c.CategoryId) && c.Id == data.structure.id || request.Filters.Contains('*')))
                        {
                            continue;
                        }
                    }

                    if (request.WreckType != WreckType.Scan && _permissionProvider.CheckHasAnyPermission(request.User, "wreckingball.skip.structure", "wreckingball.skip.*", "wreckingball.*") == PermissionResult.Grant)
                    {
                        continue;
                    }

                    objectsFound++;
                    if (request.WreckType == WreckType.Scan)
                    {
                        continue;
                    }
                    _destroyQueue.Add(data.GetHashCode(), data);
                }
            }

            foreach (InteractableVehicle vehicle in VehicleManager.vehicles)
            {
                if (Vector3.Distance(request.Position, vehicle.transform.position.ToSystemVector()) > request.Radius)
                {
                    continue;
                }

                if (_destroyQueue.ContainsKey(vehicle.GetHashCode()))
                {
                    continue;
                }

                if (request.SteamID != 0)
                {
                    if (vehicle.lockedOwner.m_SteamID != request.SteamID)
                    {
                        continue;
                    }
                    if (request.WreckType != WreckType.Scan && _permissionProvider.CheckHasAnyPermission(_wreckPlugin.Container.Resolve <IPlayerManager> ().GetPlayer(request.SteamID.ToString()), "wreckingball.skip.vehicle", "wreckingball.skip.*", "wreckingball.*") == PermissionResult.Grant)
                    {
                        continue;
                    }
                }

                if (request.ItemID != 0)
                {
                    if (vehicle.id != request.ItemID)
                    {
                        continue;
                    }
                }

                if (request.Filters != null)
                {
                    if (!_wreckPlugin.ConfigurationInstance.Elements.Any(c => request.Filters.Contains(c.CategoryId) && c.Id == vehicle.id || request.Filters.Contains('*')))
                    {
                        continue;
                    }
                }

                if (request.WreckType != WreckType.Scan && _permissionProvider.CheckHasAnyPermission(request.User, "wreckingball.skip.vehicle", "wreckingball.skip.*", "wreckingball.*") == PermissionResult.Grant)
                {
                    continue;
                }

                objectsFound++;
                if (request.WreckType == WreckType.Scan)
                {
                    continue;
                }
                _destroyQueue.Add(vehicle.GetHashCode(), vehicle);
            }

            if (request.Filters.Contains('A'))
            {
                foreach (Animal animal in AnimalManager.animals)
                {
                    if (Vector3.Distance(request.Position, animal.transform.position.ToSystemVector()) > request.Radius)
                    {
                        continue;
                    }

                    if (_destroyQueue.ContainsKey(animal.GetHashCode()))
                    {
                        continue;
                    }

                    if (request.ItemID != 0)
                    {
                        if (animal.id != request.ItemID)
                        {
                            continue;
                        }
                    }

                    objectsFound++;
                    if (request.WreckType == WreckType.Scan)
                    {
                        continue;
                    }
                    _destroyQueue.Add(animal.GetHashCode(), animal);
                }
            }
            if (request.Filters.Contains('Z'))
            {
                foreach (ZombieRegion region in ZombieManager.regions)
                {
                    foreach (Zombie zombie in region.zombies)
                    {
                        if (Vector3.Distance(request.Position, zombie.transform.position.ToSystemVector()) > request.Radius)
                        {
                            continue;
                        }

                        if (_destroyQueue.ContainsKey(zombie.GetHashCode()))
                        {
                            continue;
                        }

                        if (request.ItemID != 0)
                        {
                            if (zombie.id != request.ItemID)
                            {
                                continue;
                            }
                        }

                        objectsFound++;
                        if (request.WreckType == WreckType.Scan)
                        {
                            continue;
                        }
                        _destroyQueue.Add(zombie.GetHashCode(), zombie);
                    }
                }
            }

            request.User.SendLocalizedMessage(_wreckPlugin.Translations, "wreckingball_scan", objectsFound);
            _scanQueue.Remove(request);
            if (request.WreckType == WreckType.Scan)
            {
                return;
            }
            request.User.SendLocalizedMessage(_wreckPlugin.Translations, "wreckingball_added_destruction", FormattedTimeUntilDestroyed());
        }