diff --git a/Content.Server/Bed/Sleep/SleepingSystem.cs b/Content.Server/Bed/Sleep/SleepingSystem.cs
index ae6cd54140..c7f7e4f036 100644
--- a/Content.Server/Bed/Sleep/SleepingSystem.cs
+++ b/Content.Server/Bed/Sleep/SleepingSystem.cs
@@ -141,7 +141,15 @@ namespace Content.Server.Bed.Sleep
private void OnInteractHand(EntityUid uid, SleepingComponent component, InteractHandEvent args)
{
args.Handled = true;
+
+ var curTime = _gameTiming.CurTime;
+ if (curTime < component.CoolDownEnd)
+ {
+ return;
+ }
+
TryWaking(args.Target, user: args.User);
+ component.CoolDownEnd = curTime + component.Cooldown;
}
private void OnExamined(EntityUid uid, SleepingComponent component, ExaminedEvent args)
diff --git a/Content.Shared/Bed/Sleep/SleepingComponent.cs b/Content.Shared/Bed/Sleep/SleepingComponent.cs
index b35132929c..76ced65b89 100644
--- a/Content.Shared/Bed/Sleep/SleepingComponent.cs
+++ b/Content.Shared/Bed/Sleep/SleepingComponent.cs
@@ -2,13 +2,22 @@ using Robust.Shared.GameStates;
namespace Content.Shared.Bed.Sleep;
-[NetworkedComponent, RegisterComponent]
///
/// Added to entities when they go to sleep.
///
+[NetworkedComponent, RegisterComponent]
public sealed class SleepingComponent : Component
{
// How much damage of any type it takes to wake this entity.
[DataField("wakeThreshold")]
public float WakeThreshold = 2;
+
+ ///
+ /// Cooldown time between users hand interaction.
+ ///
+ [DataField("cooldown")]
+ [ViewVariables(VVAccess.ReadWrite)]
+ public TimeSpan Cooldown = TimeSpan.FromSeconds(1f);
+
+ public TimeSpan CoolDownEnd;
}