diff --git a/Content.Server/GameObjects/Components/AnchorableComponent.cs b/Content.Server/GameObjects/Components/AnchorableComponent.cs
index 6ad088bdbe..b1d07fbc60 100644
--- a/Content.Server/GameObjects/Components/AnchorableComponent.cs
+++ b/Content.Server/GameObjects/Components/AnchorableComponent.cs
@@ -14,6 +14,8 @@ namespace Content.Server.GameObjects.Components
{
public override string Name => "Anchorable";
+ int IInteractUsing.Priority => 1;
+
///
/// Checks if a tool can change the anchored status.
///
diff --git a/Content.Server/GameObjects/Components/PlaceableSurfaceComponent.cs b/Content.Server/GameObjects/Components/PlaceableSurfaceComponent.cs
index 3ac23365fe..54469fb856 100644
--- a/Content.Server/GameObjects/Components/PlaceableSurfaceComponent.cs
+++ b/Content.Server/GameObjects/Components/PlaceableSurfaceComponent.cs
@@ -1,4 +1,4 @@
-using Content.Server.GameObjects.Components.GUI;
+using Content.Server.GameObjects.Components.GUI;
using Content.Shared.GameObjects.Components;
using Content.Shared.Interfaces.GameObjects.Components;
using Robust.Shared.GameObjects;
@@ -12,6 +12,8 @@ namespace Content.Server.GameObjects.Components
private bool _isPlaceable;
public bool IsPlaceable { get => _isPlaceable; set => _isPlaceable = value; }
+ int IInteractUsing.Priority => 1;
+
public override void ExposeData(ObjectSerializer serializer)
{
base.ExposeData(serializer);
diff --git a/Content.Server/GameObjects/EntitySystems/Click/InteractionSystem.cs b/Content.Server/GameObjects/EntitySystems/Click/InteractionSystem.cs
index 41640a0fac..8c6e8f1912 100644
--- a/Content.Server/GameObjects/EntitySystems/Click/InteractionSystem.cs
+++ b/Content.Server/GameObjects/EntitySystems/Click/InteractionSystem.cs
@@ -447,7 +447,7 @@ namespace Content.Server.GameObjects.EntitySystems.Click
return;
}
- var attackBys = attacked.GetAllComponents().ToList();
+ var attackBys = attacked.GetAllComponents().OrderByDescending(x => x.Priority);
var attackByEventArgs = new InteractUsingEventArgs
{
User = user, ClickLocation = clickLocation, Using = weapon, Target = attacked
diff --git a/Content.Shared/Interfaces/GameObjects/Components/Interaction/IInteractUsing.cs b/Content.Shared/Interfaces/GameObjects/Components/Interaction/IInteractUsing.cs
index 79890756a0..21c0dacedb 100644
--- a/Content.Shared/Interfaces/GameObjects/Components/Interaction/IInteractUsing.cs
+++ b/Content.Shared/Interfaces/GameObjects/Components/Interaction/IInteractUsing.cs
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
using JetBrains.Annotations;
using Robust.Shared.GameObjects;
using Robust.Shared.Interfaces.GameObjects;
@@ -12,6 +13,12 @@ namespace Content.Shared.Interfaces.GameObjects.Components
///
public interface IInteractUsing
{
+ ///
+ /// The interaction priority. Higher numbers get called first.
+ ///
+ /// Priority defaults to 0
+ int Priority => 0;
+
///
/// Called when using one object on another when user is in range of the target entity.
///