]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Fix recycled containers deleting items inside them (#26045)
authorSlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com>
Tue, 19 Mar 2024 02:36:21 +0000 (03:36 +0100)
committerGitHub <noreply@github.com>
Tue, 19 Mar 2024 02:36:21 +0000 (13:36 +1100)
* Removes items from containers in reclaimers

* Made it into an event instead

* Sloth review comment

* Fix indentation and rename field

Content.Shared/Materials/SharedMaterialReclaimerSystem.cs
Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs

index ad8547acc02ebdcbeefd7ce47d7d465b957eb3b0..fb1702bb94e07df67ed661690d9e39abda58846c 100644 (file)
@@ -1,7 +1,8 @@
-using System.Linq;
+using System.Linq;
 using Content.Shared.Administration.Logs;
 using Content.Shared.Audio;
 using Content.Shared.Body.Components;
+using Content.Shared.Coordinates;
 using Content.Shared.Database;
 using Content.Shared.Emag.Components;
 using Content.Shared.Emag.Systems;
@@ -11,6 +12,7 @@ using Content.Shared.Stacks;
 using Robust.Shared.Audio;
 using Robust.Shared.Audio.Systems;
 using Robust.Shared.Containers;
+using Robust.Shared.Map;
 using Robust.Shared.Physics.Events;
 using Robust.Shared.Timing;
 
@@ -110,6 +112,9 @@ public abstract class SharedMaterialReclaimerSystem : EntitySystem
             component.NextSound = Timing.CurTime + component.SoundCooldown;
         }
 
+        var reclaimedEvent = new GotReclaimedEvent(Transform(uid).Coordinates);
+        RaiseLocalEvent(item, ref reclaimedEvent);
+
         var duration = GetReclaimingDuration(uid, item, component);
         // if it's instant, don't bother with all the active comp stuff.
         if (duration == TimeSpan.Zero)
@@ -237,3 +242,6 @@ public abstract class SharedMaterialReclaimerSystem : EntitySystem
         }
     }
 }
+
+[ByRefEvent]
+public record struct GotReclaimedEvent(EntityCoordinates ReclaimerCoordinates);
index c26419998604c77f3a3b5469f9da1a57d856a7a8..98eac962e9af53047271bda6d07789cdd48a7277 100644 (file)
@@ -3,6 +3,7 @@ using System.Diagnostics.CodeAnalysis;
 using System.Linq;
 using Content.Shared.ActionBlocker;
 using Content.Shared.Containers.ItemSlots;
+using Content.Shared.Coordinates;
 using Content.Shared.Destructible;
 using Content.Shared.DoAfter;
 using Content.Shared.Hands.Components;
@@ -11,6 +12,7 @@ using Content.Shared.Implants.Components;
 using Content.Shared.Interaction;
 using Content.Shared.Item;
 using Content.Shared.Lock;
+using Content.Shared.Materials;
 using Content.Shared.Placeable;
 using Content.Shared.Popups;
 using Content.Shared.Stacks;
@@ -95,6 +97,9 @@ public abstract class SharedStorageSystem : EntitySystem
         SubscribeAllEvent<StorageSetItemLocationEvent>(OnSetItemLocation);
         SubscribeAllEvent<StorageInsertItemIntoLocationEvent>(OnInsertItemIntoLocation);
         SubscribeAllEvent<StorageRemoveItemEvent>(OnRemoveItem);
+
+        SubscribeLocalEvent<StorageComponent, GotReclaimedEvent>(OnReclaimed);
+
         UpdatePrototypeCache();
     }
 
@@ -388,6 +393,11 @@ public abstract class SharedStorageSystem : EntitySystem
         args.Handled = true;
     }
 
+    private void OnReclaimed(EntityUid uid, StorageComponent storageComp, GotReclaimedEvent args)
+    {
+        _containerSystem.EmptyContainer(storageComp.Container, destination: args.ReclaimerCoordinates);
+    }
+
     private void OnDestroy(EntityUid uid, StorageComponent storageComp, DestructionEventArgs args)
     {
         var coordinates = TransformSystem.GetMoverCoordinates(uid);