diff --git a/Quaver.API/Maps/AutoMod/AutoMod.cs b/Quaver.API/Maps/AutoMod/AutoMod.cs
index 795f8c4f2..ff418224e 100644
--- a/Quaver.API/Maps/AutoMod/AutoMod.cs
+++ b/Quaver.API/Maps/AutoMod/AutoMod.cs
@@ -47,6 +47,11 @@ public class AutoMod
///
public const int OverlappingObjectsThreshold = 10;
+ ///
+ /// The minimum amount of time in milliseconds between a mine and a note
+ ///
+ public const int OverlappingMineThreshold = 36;
+
///
/// The amount of time in milliseconds where a break would be considered too excessive
/// and against the ranking criteria.
@@ -179,6 +184,26 @@ private void DetectHitObjectIssues()
continue;
}
+ // Check for mines overlapping with notes
+ switch ((prevColObject.Type, hitObject.Type))
+ {
+ case (HitObjectType.Mine, HitObjectType.Normal):
+ case (HitObjectType.Normal, HitObjectType.Mine):
+ {
+ var prevEndTime = prevColObject.IsLongNote
+ ? prevColObject.EndTime
+ : prevColObject.StartTime;
+ if (hitObject.StartTime - prevEndTime <= OverlappingMineThreshold)
+ {
+ var issue = prevColObject.Type is HitObjectType.Mine
+ ? new AutoModIssueOverlappingMine(prevColObject, hitObject)
+ : new AutoModIssueOverlappingMine(hitObject, prevColObject);
+ Issues.Add(issue);
+ }
+ break;
+ }
+ }
+
// Check for long note overlaps
if (prevColObject.IsLongNote)
{
diff --git a/Quaver.API/Maps/AutoMod/Issues/HitObjects/AutoModIssueOverlappingMine.cs b/Quaver.API/Maps/AutoMod/Issues/HitObjects/AutoModIssueOverlappingMine.cs
new file mode 100644
index 000000000..b2b8ac30d
--- /dev/null
+++ b/Quaver.API/Maps/AutoMod/Issues/HitObjects/AutoModIssueOverlappingMine.cs
@@ -0,0 +1,25 @@
+using Quaver.API.Maps.Structures;
+
+namespace Quaver.API.Maps.AutoMod.Issues.HitObjects
+{
+ public class AutoModIssueOverlappingMine : AutoModIssue
+ {
+ public override AutoModIssueCategory Category { get; protected set; } =
+ AutoModIssueCategory.HitObjects;
+
+ public HitObjectInfo Mine { get; }
+
+ public HitObjectInfo CoveredHitObject { get; }
+
+ public AutoModIssueOverlappingMine(HitObjectInfo mine, HitObjectInfo coveredHitObject) :
+ base(AutoModIssueLevel.Ranking)
+ {
+ Mine = mine;
+ CoveredHitObject = coveredHitObject;
+ Text =
+ $"Mine at {Mine.StartTime} lane {Mine.Lane} should be " +
+ $">{AutoMod.OverlappingMineThreshold}ms away from hit object " +
+ $"at {CoveredHitObject.StartTime}.";
+ }
+ }
+}
\ No newline at end of file