diff --git a/Content.Server/GameObjects/Components/Disposal/DisposalEntryComponent.cs b/Content.Server/GameObjects/Components/Disposal/DisposalEntryComponent.cs
index 80765abd10..aaadca6f5e 100644
--- a/Content.Server/GameObjects/Components/Disposal/DisposalEntryComponent.cs
+++ b/Content.Server/GameObjects/Components/Disposal/DisposalEntryComponent.cs
@@ -1,7 +1,11 @@
using System.Collections.Generic;
+using System.Linq;
using Robust.Shared.GameObjects;
using Robust.Shared.Interfaces.GameObjects;
+using Robust.Shared.Interfaces.Random;
+using Robust.Shared.IoC;
using Robust.Shared.Maths;
+using Robust.Shared.Random;
namespace Content.Server.GameObjects.Components.Disposal
{
@@ -9,6 +13,8 @@ namespace Content.Server.GameObjects.Components.Disposal
[ComponentReference(typeof(IDisposalTubeComponent))]
public class DisposalEntryComponent : DisposalTubeComponent
{
+ [Dependency] private readonly IRobustRandom _random = default!;
+
private const string HolderPrototypeId = "DisposalHolder";
public override string Name => "DisposalEntry";
@@ -43,8 +49,19 @@ namespace Content.Server.GameObjects.Components.Disposal
return new[] {Owner.Transform.LocalRotation.GetDir()};
}
+ ///
+ /// Ejects contents when they come from the same direction the entry is facing.
+ ///
public override Direction NextDirection(DisposalHolderComponent holder)
{
+ if (holder.PreviousTube != null && DirectionTo(holder.PreviousTube) == ConnectableDirections()[0])
+ {
+ var invalidDirections = new Direction[] { ConnectableDirections()[0], Direction.Invalid };
+ var directions = System.Enum.GetValues(typeof(Direction))
+ .Cast().Except(invalidDirections).ToList();
+ return _random.Pick(directions);
+ }
+
return ConnectableDirections()[0];
}
}