]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Revert "Remove IContainer and move functions to the container system.… (#19975)
authormetalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
Sun, 10 Sep 2023 11:46:36 +0000 (21:46 +1000)
committerGitHub <noreply@github.com>
Sun, 10 Sep 2023 11:46:36 +0000 (21:46 +1000)
19 files changed:
Content.Client/Actions/ActionsSystem.cs
Content.Client/UserInterface/Systems/Inventory/InventoryUIController.cs
Content.IntegrationTests/Tests/Interaction/Click/InteractionSystemTests.cs
Content.Server/Disposal/Unit/EntitySystems/DisposableSystem.cs
Content.Server/Disposal/Unit/EntitySystems/DisposalUnitSystem.cs
Content.Server/Explosion/EntitySystems/TriggerSystem.cs
Content.Server/Singularity/EntitySystems/EventHorizonSystem.cs
Content.Server/Singularity/Events/EntityConsumedByEventHorizonEvent.cs
Content.Server/Singularity/Events/EventHorizonConsumedEntityEvent.cs
Content.Shared/Actions/SharedActionsSystem.cs
Content.Shared/Body/Systems/SharedBodySystem.Organs.cs
Content.Shared/Body/Systems/SharedBodySystem.Parts.cs
Content.Shared/Containers/ItemSlot/ItemSlotsSystem.cs
Content.Shared/Hands/EntitySystems/SharedHandsSystem.Drop.cs
Content.Shared/Hands/EntitySystems/SharedHandsSystem.Pickup.cs
Content.Shared/Implants/SharedImplanterSystem.cs
Content.Shared/Interaction/Helpers/SharedUnoccludedExtensions.cs
Content.Shared/Inventory/InventorySystem.Equip.cs
Content.Shared/Silicons/Borgs/Components/BorgChassisComponent.cs

index 709bd09483957de473abec4d6f308bdb15931c97..2d9b777abd767510600805d8ddf54da69809808a 100644 (file)
@@ -72,7 +72,7 @@ namespace Content.Client.Actions
             _actionHoldersQueue.Enqueue(uid);
         }
 
-        protected override void AddActionInternal(EntityUid holderId, EntityUid actionId, BaseContainer container, ActionsComponent holder)
+        protected override void AddActionInternal(EntityUid holderId, EntityUid actionId, IContainer container, ActionsComponent holder)
         {
             // Sometimes the client receives actions from the server, before predicting that newly added components will add
             // their own shared actions. Just in case those systems ever decided to directly access action properties (e.g.,
@@ -87,7 +87,7 @@ namespace Content.Client.Actions
             }
         }
 
-        public override void AddAction(EntityUid holderId, EntityUid actionId, EntityUid? provider, ActionsComponent? holder = null, BaseActionComponent? action = null, bool dirty = true, BaseContainer? actionContainer = null)
+        public override void AddAction(EntityUid holderId, EntityUid actionId, EntityUid? provider, ActionsComponent? holder = null, BaseActionComponent? action = null, bool dirty = true, IContainer? actionContainer = null)
         {
             if (!Resolve(holderId, ref holder, false))
                 return;
index 7b71cc28df389c4c6e86b42522f2b67d32ce87b6..23b6a026ef693e27849af45b70e0ed21e1303d55 100644 (file)
@@ -27,7 +27,6 @@ public sealed class InventoryUIController : UIController, IOnStateEntered<Gamepl
 
     [UISystemDependency] private readonly ClientInventorySystem _inventorySystem = default!;
     [UISystemDependency] private readonly HandsSystem _handsSystem = default!;
-    [UISystemDependency] private readonly ContainerSystem _container = default!;
 
     private EntityUid? _playerUid;
     private InventorySlotsComponent? _playerInventory;
@@ -282,7 +281,7 @@ public sealed class InventoryUIController : UIController, IOnStateEntered<Gamepl
         var hoverEntity = _entities.SpawnEntity("hoverentity", MapCoordinates.Nullspace);
         var hoverSprite = _entities.GetComponent<SpriteComponent>(hoverEntity);
         var fits = _inventorySystem.CanEquip(player.Value, held, control.SlotName, out _, slotDef) &&
-                   _container.CanInsert(held, container);
+                   container.CanInsert(held, _entities);
 
         hoverSprite.CopyFrom(sprite);
         hoverSprite.Color = fits ? new Color(0, 255, 0, 127) : new Color(255, 0, 0, 127);
index b05f2732651b746d419658d79b6849ff3e3f59d2..402569981ae5d1620d4f016f2dc480e2ed4d8542 100644 (file)
@@ -341,7 +341,7 @@ namespace Content.IntegrationTests.Tests.Interaction.Click
             EntityUid target = default;
             EntityUid item = default;
             EntityUid containerEntity = default;
-            BaseContainer container = null;
+            IContainer container = null;
 
             await server.WaitAssertion(() =>
             {
index 3edc2a5fa7839265ada0492656b367fa9e2049f4..83e079746ea6f53d1ee0f672d98e1d49b0a4e4a3 100644 (file)
@@ -57,7 +57,7 @@ namespace Content.Server.Disposal.Unit.EntitySystems
             if (!Resolve(uid, ref holder))
                 return false;
 
-            if (!_containerSystem.CanInsert(toInsert, holder.Container))
+            if (!holder.Container.CanInsert(toInsert))
             {
                 return false;
             }
index 53e058c73e42ce1b2c9159c193372c5b6c6f7152..e97215f64619576a8af4d4e9e9af57c734110822 100644 (file)
@@ -753,10 +753,10 @@ public sealed class DisposalUnitSystem : SharedDisposalUnitSystem
 
     public override bool CanInsert(EntityUid uid, SharedDisposalUnitComponent component, EntityUid entity)
     {
-        if (!base.CanInsert(uid, component, entity))
+        if (!base.CanInsert(uid, component, entity) || component is not SharedDisposalUnitComponent serverComp)
             return false;
 
-        return _containerSystem.CanInsert(entity, component.Container);
+        return serverComp.Container.CanInsert(entity);
     }
 
     /// <summary>
index 427edf21e31969a3bcb80fc2781a28887b4e1f03..e5d8f69850bc270c023ab1d9131bb3092a9e5db8 100644 (file)
@@ -236,7 +236,7 @@ namespace Content.Server.Explosion.EntitySystems
             if (user != null)
             {
                 // Check if entity is bomb/mod. grenade/etc
-                if (_container.TryGetContainer(uid, "payload", out BaseContainer? container) &&
+                if (_container.TryGetContainer(uid, "payload", out IContainer? container) &&
                     container.ContainedEntities.Count > 0 &&
                     TryComp(container.ContainedEntities[0], out ChemicalPayloadComponent? chemicalPayloadComponent))
                 {
index fd9eb3e8c62aa30b5a4dfa875a97e66ca1934312..69d1fd7c3412f928e82c363b8986292babdc67c8 100644 (file)
@@ -120,7 +120,7 @@ public sealed class EventHorizonSystem : SharedEventHorizonSystem
     /// <summary>
     /// Makes an event horizon consume a given entity.
     /// </summary>
-    public void ConsumeEntity(EntityUid hungry, EntityUid morsel, EventHorizonComponent eventHorizon, BaseContainer? outerContainer = null)
+    public void ConsumeEntity(EntityUid hungry, EntityUid morsel, EventHorizonComponent eventHorizon, IContainer? outerContainer = null)
     {
         if (!EntityManager.IsQueuedForDeletion(morsel) // I saw it log twice a few times for some reason?
         && (HasComp<MindContainerComponent>(morsel)
@@ -140,7 +140,7 @@ public sealed class EventHorizonSystem : SharedEventHorizonSystem
     /// <summary>
     /// Makes an event horizon attempt to consume a given entity.
     /// </summary>
-    public bool AttemptConsumeEntity(EntityUid hungry, EntityUid morsel, EventHorizonComponent eventHorizon, BaseContainer? outerContainer = null)
+    public bool AttemptConsumeEntity(EntityUid hungry, EntityUid morsel, EventHorizonComponent eventHorizon, IContainer? outerContainer = null)
     {
         if (!CanConsumeEntity(hungry, morsel, eventHorizon))
             return false;
@@ -192,7 +192,7 @@ public sealed class EventHorizonSystem : SharedEventHorizonSystem
     /// Excludes the event horizon itself.
     /// All immune entities within the container will be dumped to a given container or the map/grid if that is impossible.
     /// </summary>
-    public void ConsumeEntitiesInContainer(EntityUid hungry, BaseContainer container, EventHorizonComponent eventHorizon, BaseContainer? outerContainer = null)
+    public void ConsumeEntitiesInContainer(EntityUid hungry, IContainer container, EventHorizonComponent eventHorizon, IContainer? outerContainer = null)
     {
         // Removing the immune entities from the container needs to be deferred until after iteration or the iterator raises an error.
         List<EntityUid> immune = new();
index ce5184c7174ca83a71317ba8ea0886d5c3b325c6..84e8a8ff2b8a866d7081b64734c95cfeddc9721c 100644 (file)
@@ -8,7 +8,7 @@ namespace Content.Server.Singularity.Events;
 /// </summary>
 [ByRefEvent]
 public readonly record struct EntityConsumedByEventHorizonEvent
-(EntityUid entity, EntityUid eventHorizonUid, EventHorizonComponent eventHorizon, BaseContainer? container)
+(EntityUid entity, EntityUid eventHorizonUid, EventHorizonComponent eventHorizon, IContainer? container)
 {
     /// <summary>
     /// The entity being consumed by the event horizon.
@@ -29,5 +29,5 @@ public readonly record struct EntityConsumedByEventHorizonEvent
     /// The innermost container of the entity being consumed by the event horizon that is not also in the process of being consumed by the event horizon.
     /// Used to correctly dump out the contents containers that are consumed by the event horizon.
     /// </summary>
-    public readonly BaseContainer? Container = container;
+    public readonly IContainer? Container = container;
 }
index d71b1da7e7bcde2c5978cf4ee5b52eee617f160f..19342195177acd6ecf67b039e6aab79d4d70a5b0 100644 (file)
@@ -8,7 +8,7 @@ namespace Content.Server.Singularity.Events;
 /// </summary>
 [ByRefEvent]
 public readonly record struct EventHorizonConsumedEntityEvent
-(EntityUid entity, EntityUid eventHorizonUid, EventHorizonComponent eventHorizon, BaseContainer? container)
+(EntityUid entity, EntityUid eventHorizonUid, EventHorizonComponent eventHorizon, IContainer? container)
 {
     /// <summary>
     /// The entity being consumed by the event horizon.
@@ -29,5 +29,5 @@ public readonly record struct EventHorizonConsumedEntityEvent
     /// The innermost container of the entity being consumed by the event horizon that is not also in the process of being consumed by the event horizon.
     /// Used to correctly dump out the contents containers that are consumed by the event horizon.
     /// </summary>
-    public readonly BaseContainer? Container = container;
+    public readonly IContainer? Container = container;
 }
index b281249c55969cb180ed5dcef6a43efb48eeaf06..12e5c2260a565fd64bcdc133ed1c1ca8386a03f2 100644 (file)
@@ -177,7 +177,7 @@ public abstract class SharedActionsSystem : EntitySystem
 
     protected bool TryGetContainer(
         EntityUid holderId,
-        [NotNullWhen(true)] out BaseContainer? container,
+        [NotNullWhen(true)] out IContainer? container,
         ContainerManagerComponent? containerManager = null)
     {
         return _containerSystem.TryGetContainer(holderId, ActionContainerId, out container, containerManager);
@@ -185,7 +185,7 @@ public abstract class SharedActionsSystem : EntitySystem
 
     protected bool TryGetProvidedContainer(
         EntityUid providerId,
-        [NotNullWhen(true)] out BaseContainer? container,
+        [NotNullWhen(true)] out IContainer? container,
         ContainerManagerComponent? containerManager = null)
     {
         return _containerSystem.TryGetContainer(providerId, ProvidedActionContainerId, out container, containerManager);
@@ -550,7 +550,7 @@ public abstract class SharedActionsSystem : EntitySystem
     /// <param name="holder">Component of <see cref="holderId"/></param>
     /// <param name="action">Component of <see cref="actionId"/></param>
     /// <param name="actionContainer">Action container of <see cref="holderId"/></param>
-    public virtual void AddAction(EntityUid holderId, EntityUid actionId, EntityUid? provider, ActionsComponent? holder = null, BaseActionComponent? action = null, bool dirty = true, BaseContainer? actionContainer = null)
+    public virtual void AddAction(EntityUid holderId, EntityUid actionId, EntityUid? provider, ActionsComponent? holder = null, BaseActionComponent? action = null, bool dirty = true, IContainer? actionContainer = null)
     {
         action ??= GetActionData(actionId);
         // TODO remove when action subscriptions are split up
@@ -572,7 +572,7 @@ public abstract class SharedActionsSystem : EntitySystem
             Dirty(holderId, holder);
     }
 
-    protected virtual void AddActionInternal(EntityUid holderId, EntityUid actionId, BaseContainer container, ActionsComponent holder)
+    protected virtual void AddActionInternal(EntityUid holderId, EntityUid actionId, IContainer container, ActionsComponent holder)
     {
         container.Insert(actionId);
         holder.Actions.Add(actionId);
index 292864839a6190627160f483d2abdd0e15b7e9e4..dbfadc6a0fecd5aca02f245cb00ff8d7fb4fa514 100644 (file)
@@ -12,8 +12,6 @@ namespace Content.Shared.Body.Systems;
 
 public partial class SharedBodySystem
 {
-    [Dependency] private readonly SharedContainerSystem _container = default!;
-
     private void InitializeOrgans()
     {
         SubscribeLocalEvent<OrganComponent, ComponentGetState>(OnOrganGetState);
@@ -37,7 +35,7 @@ public partial class SharedBodySystem
                slot.Child == null &&
                Resolve(organId.Value, ref organ, false) &&
                Containers.TryGetContainer(slot.Parent, BodyContainerId, out var container) &&
-               _container.CanInsert(organId.Value, container);
+               container.CanInsert(organId.Value);
     }
 
     private void OnOrganGetState(EntityUid uid, OrganComponent organ, ref ComponentGetState args)
index f86c4a8bfcfbdda41201fa3d22b157e0e69da1f6..8c55fe9cddc4e3cbafe00982b228d11b326fc220 100644 (file)
@@ -171,7 +171,7 @@ public partial class SharedBodySystem
                Resolve(partId.Value, ref part, false) &&
                (slot.Type == null || slot.Type == part.PartType) &&
                Containers.TryGetContainer(slot.Parent, BodyContainerId, out var container) &&
-               _container.CanInsert(partId.Value, container);
+               container.CanInsert(partId.Value);
     }
 
     public virtual bool AttachPart(
index 594479d0dfd4d1f08d53c6b5d3e928b77d806158..1d491a01bad3007b83f6249891d69d24b24ea2f6 100644 (file)
@@ -246,9 +246,6 @@ namespace Content.Shared.Containers.ItemSlots
         /// </remarks>
         public bool CanInsert(EntityUid uid, EntityUid usedUid, EntityUid? user, ItemSlot slot, bool swap = false, EntityUid? popup = null)
         {
-            if (slot.ContainerSlot == null)
-                return false;
-
             if (slot.Locked)
                 return false;
 
@@ -268,7 +265,7 @@ namespace Content.Shared.Containers.ItemSlots
             if (ev.Cancelled)
                 return false;
 
-            return _containers.CanInsert(usedUid, slot.ContainerSlot, assumeEmpty: true);
+            return slot.ContainerSlot?.CanInsertIfEmpty(usedUid, EntityManager) ?? false;
         }
 
         /// <summary>
@@ -328,16 +325,16 @@ namespace Content.Shared.Containers.ItemSlots
 
         public bool CanEject(EntityUid uid, EntityUid? user, ItemSlot slot)
         {
-            if (slot.Locked || slot.ContainerSlot?.ContainedEntity is not {} item)
+            if (slot.Locked || slot.Item == null)
                 return false;
 
-            var ev = new ItemSlotEjectAttemptEvent(uid, item, user, slot);
+            var ev = new ItemSlotEjectAttemptEvent(uid, slot.Item.Value, user, slot);
             RaiseLocalEvent(uid, ref ev);
-            RaiseLocalEvent(item, ref ev);
+            RaiseLocalEvent(slot.Item.Value, ref ev);
             if (ev.Cancelled)
                 return false;
 
-            return _containers.CanRemove(item, slot.ContainerSlot);
+            return slot.ContainerSlot?.CanRemove(slot.Item.Value, EntityManager) ?? false;
         }
 
         /// <summary>
index e43f2561a16142dab4d95e4006414f36187a08c6..87edd472820b4399eaccffe364818781229bff59 100644 (file)
@@ -8,8 +8,6 @@ namespace Content.Shared.Hands.EntitySystems;
 
 public abstract partial class SharedHandsSystem : EntitySystem
 {
-    [Dependency] private readonly SharedContainerSystem _container = default!;
-
     private void InitializeDrop()
     {
         SubscribeLocalEvent<HandsComponent, EntRemovedFromContainerMessage>(HandleEntityRemoved);
@@ -34,10 +32,10 @@ public abstract partial class SharedHandsSystem : EntitySystem
     /// </summary>
     public bool CanDropHeld(EntityUid uid, Hand hand, bool checkActionBlocker = true)
     {
-        if (hand.Container?.ContainedEntity is not {} held)
+        if (hand.HeldEntity == null)
             return false;
 
-        if (!_container.CanRemove(held, hand.Container))
+        if (!hand.Container!.CanRemove(hand.HeldEntity.Value, EntityManager))
             return false;
 
         if (checkActionBlocker && !_actionBlocker.CanDrop(uid))
@@ -112,7 +110,7 @@ public abstract partial class SharedHandsSystem : EntitySystem
     /// <summary>
     ///     Attempts to move a held item from a hand into a container that is not another hand, without dropping it on the floor in-between.
     /// </summary>
-    public bool TryDropIntoContainer(EntityUid uid, EntityUid entity, BaseContainer targetContainer, bool checkActionBlocker = true, HandsComponent? handsComp = null)
+    public bool TryDropIntoContainer(EntityUid uid, EntityUid entity, IContainer targetContainer, bool checkActionBlocker = true, HandsComponent? handsComp = null)
     {
         if (!Resolve(uid, ref handsComp))
             return false;
@@ -123,7 +121,7 @@ public abstract partial class SharedHandsSystem : EntitySystem
         if (!CanDropHeld(uid, hand, checkActionBlocker))
             return false;
 
-        if (!_container.CanInsert(entity, targetContainer))
+        if (!targetContainer.CanInsert(entity, EntityManager))
             return false;
 
         DoDrop(uid, hand, false, handsComp);
index e62723df06e8f88d6f5c66be5686d8eaf0a43b22..eaa10ed077f4d53074b7ba291872df39a5017cfa 100644 (file)
@@ -181,7 +181,7 @@ public abstract partial class SharedHandsSystem : EntitySystem
             return false;
 
         // check can insert (including raising attempt events).
-        return _containerSystem.CanInsert(entity, handContainer);
+        return handContainer.CanInsert(entity, EntityManager);
     }
 
     /// <summary>
index 1cf9f446630da465efdcf6fb6aeee16d7341755d..6d0a65f2385773fc39af72baea3fea47eab83127 100644 (file)
@@ -111,7 +111,7 @@ public abstract class SharedImplanterSystem : EntitySystem
                     continue;
 
                 //Don't remove a permanent implant and look for the next that can be drawn
-                if (!_container.CanRemove(implant, implantContainer))
+                if (!implantContainer.CanRemove(implant))
                 {
                     var implantName = Identity.Entity(implant, EntityManager);
                     var targetName = Identity.Entity(target, EntityManager);
index 9ea48a89c8eaf9155845e13abd2f3f8362f21cee..0a13fc4f1b375e5b0631bc5a07d5a6599e4376e8 100644 (file)
@@ -32,7 +32,7 @@ namespace Content.Shared.Interaction.Helpers
 
         public static bool InRangeUnOccluded(
             this EntityUid origin,
-            BaseContainer other,
+            IContainer other,
             float range = InteractionRange,
             Ignored? predicate = null,
             bool ignoreInsideBlocker = true)
@@ -90,7 +90,7 @@ namespace Content.Shared.Interaction.Helpers
 
         public static bool InRangeUnOccluded(
             this IComponent origin,
-            BaseContainer other,
+            IContainer other,
             float range = InteractionRange,
             Ignored? predicate = null,
             bool ignoreInsideBlocker = true)
@@ -130,7 +130,7 @@ namespace Content.Shared.Interaction.Helpers
 
         #region Containers
         public static bool InRangeUnOccluded(
-            this BaseContainer origin,
+            this IContainer origin,
             EntityUid other,
             float range = InteractionRange,
             Ignored? predicate = null,
@@ -143,7 +143,7 @@ namespace Content.Shared.Interaction.Helpers
         }
 
         public static bool InRangeUnOccluded(
-            this BaseContainer origin,
+            this IContainer origin,
             IComponent other,
             float range = InteractionRange,
             Ignored? predicate = null,
@@ -155,8 +155,8 @@ namespace Content.Shared.Interaction.Helpers
         }
 
         public static bool InRangeUnOccluded(
-            this BaseContainer origin,
-            BaseContainer other,
+            this IContainer origin,
+            IContainer other,
             float range = InteractionRange,
             Ignored? predicate = null,
             bool ignoreInsideBlocker = true)
@@ -169,7 +169,7 @@ namespace Content.Shared.Interaction.Helpers
         }
 
         public static bool InRangeUnOccluded(
-            this BaseContainer origin,
+            this IContainer origin,
             EntityCoordinates other,
             float range = InteractionRange,
             Ignored? predicate = null,
@@ -181,7 +181,7 @@ namespace Content.Shared.Interaction.Helpers
         }
 
         public static bool InRangeUnOccluded(
-            this BaseContainer origin,
+            this IContainer origin,
             MapCoordinates other,
             float range = InteractionRange,
             Ignored? predicate = null,
@@ -226,7 +226,7 @@ namespace Content.Shared.Interaction.Helpers
 
         public static bool InRangeUnOccluded(
             this EntityCoordinates origin,
-            BaseContainer other,
+            IContainer other,
             float range = InteractionRange,
             Ignored? predicate = null,
             bool ignoreInsideBlocker = true)
@@ -304,7 +304,7 @@ namespace Content.Shared.Interaction.Helpers
 
         public static bool InRangeUnOccluded(
             this MapCoordinates origin,
-            BaseContainer other,
+            IContainer other,
             float range = InteractionRange,
             Ignored? predicate = null,
             bool ignoreInsideBlocker = true)
index f3181a87b161dd6ea5862239a4767caaa782af64..25dcf56921dd58e0771c2da95e71c1bc42ad0c25 100644 (file)
@@ -360,7 +360,7 @@ public abstract partial class InventorySystem
         }
 
         //we need to do this to make sure we are 100% removing this entity, since we are now dropping dependant slots
-        if (!force && !_containerSystem.CanRemove(removedItem.Value, slotContainer))
+        if (!force && !slotContainer.CanRemove(removedItem.Value))
             return false;
 
         foreach (var slotDef in GetSlots(target, inventory))
@@ -426,12 +426,14 @@ public abstract partial class InventorySystem
         if ((containerSlot == null || slotDefinition == null) && !TryGetSlotContainer(target, slot, out containerSlot, out slotDefinition, inventory))
             return false;
 
-        if (containerSlot.ContainedEntity is not {} itemUid)
+        if (containerSlot.ContainedEntity == null)
             return false;
 
-        if (!_containerSystem.CanRemove(itemUid, containerSlot))
+        if (!containerSlot.ContainedEntity.HasValue || !containerSlot.CanRemove(containerSlot.ContainedEntity.Value))
             return false;
 
+        var itemUid = containerSlot.ContainedEntity.Value;
+
         // make sure the user can actually reach the target
         if (!CanAccess(actor, target, itemUid))
         {
index 71d3a7bd166c7b36caa6208f428a9c8405482e61..36441b50ad2ce92ded64d6ae0da0e6398d800493 100644 (file)
@@ -33,7 +33,7 @@ public sealed partial class BorgChassisComponent : Component
     public string BrainContainerId = "borg_brain";
 
     [ViewVariables(VVAccess.ReadWrite)]
-    public ContainerSlot BrainContainer = default!;
+    public ContainerSlot BrainContainer = new();
 
     public EntityUid? BrainEntity => BrainContainer.ContainedEntity;
     #endregion