using Content.Server.Construction.Components; using JetBrains.Annotations; using Robust.Shared.Containers; using Robust.Shared.GameObjects; using Content.Shared.Containers.ItemSlots; using Robust.Shared.IoC; namespace Content.Server.Containers { /// /// Implements functionality of EmptyOnMachineDeconstructComponent. /// [UsedImplicitly] public class EmptyOnMachineDeconstructSystem : EntitySystem { public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnDeconstruct); SubscribeLocalEvent(OnSlotsDeconstruct); } // really this should be handled by ItemSlotsSystem, but for whatever reason MachineDeconstructedEvent is server-side? So eh. private void OnSlotsDeconstruct(EntityUid uid, ItemSlotsComponent component, MachineDeconstructedEvent args) { foreach (var slot in component.Slots.Values) { if (slot.EjectOnDeconstruct && slot.Item != null) slot.ContainerSlot.Remove(slot.Item); } } private void OnDeconstruct(EntityUid uid, EmptyOnMachineDeconstructComponent component, MachineDeconstructedEvent ev) { if (!EntityManager.TryGetComponent(uid, out var mComp)) return; var baseCoords = IoCManager.Resolve().GetComponent(component.Owner.Uid).Coordinates; foreach (var v in component.Containers) { if (mComp.TryGetContainer(v, out var container)) { container.EmptyContainer(true, baseCoords); } } } } }