using Content.Shared.Interaction; using Content.Shared.Storage; using JetBrains.Annotations; using Robust.Server.GameObjects; using Robust.Shared.Containers; using Robust.Shared.Player; namespace Content.Server.Interaction { /// /// Governs interactions during clicking on entities /// [UsedImplicitly] public sealed partial class InteractionSystem : SharedInteractionSystem { [Dependency] private readonly SharedContainerSystem _container = default!; [Dependency] private readonly UserInterfaceSystem _uiSystem = default!; public override bool CanAccessViaStorage(EntityUid user, EntityUid target) { if (Deleted(target)) return false; if (!_container.TryGetContainingContainer(target, out var container)) return false; if (!TryComp(container.Owner, out StorageComponent? storage)) return false; if (storage.Container?.ID != container.ID) return false; // we don't check if the user can access the storage entity itself. This should be handed by the UI system. return _uiSystem.IsUiOpen(container.Owner, StorageComponent.StorageUiKey.Key, user); } } }