diff --git a/Content.Shared/Item/ItemToggle/ComponentTogglerSystem.cs b/Content.Shared/Item/ItemToggle/ComponentTogglerSystem.cs index 59a04201a3..168b32713c 100644 --- a/Content.Shared/Item/ItemToggle/ComponentTogglerSystem.cs +++ b/Content.Shared/Item/ItemToggle/ComponentTogglerSystem.cs @@ -16,13 +16,26 @@ public sealed class ComponentTogglerSystem : EntitySystem private void OnToggled(Entity ent, ref ItemToggledEvent args) { - var target = ent.Comp.Parent ? Transform(ent).ParentUid : ent.Owner; - if (TerminatingOrDeleted(target)) - return; - if (args.Activated) + { + var target = ent.Comp.Parent ? Transform(ent).ParentUid : ent.Owner; + + if (TerminatingOrDeleted(target)) + return; + + ent.Comp.Target = target; + EntityManager.AddComponents(target, ent.Comp.Components); + } else - EntityManager.RemoveComponents(target, ent.Comp.RemoveComponents ?? ent.Comp.Components); + { + if (ent.Comp.Target == null) + return; + + if (TerminatingOrDeleted(ent.Comp.Target.Value)) + return; + + EntityManager.RemoveComponents(ent.Comp.Target.Value, ent.Comp.RemoveComponents ?? ent.Comp.Components); + } } } diff --git a/Content.Shared/Item/ItemToggle/Components/ComponentTogglerComponent.cs b/Content.Shared/Item/ItemToggle/Components/ComponentTogglerComponent.cs index 20ef0a0231..cecdb4dc77 100644 --- a/Content.Shared/Item/ItemToggle/Components/ComponentTogglerComponent.cs +++ b/Content.Shared/Item/ItemToggle/Components/ComponentTogglerComponent.cs @@ -29,4 +29,10 @@ public sealed partial class ComponentTogglerComponent : Component /// [DataField] public bool Parent; + + // + // It holds the entity that the component gave the component to, so it can remove from it even if it changes parent. + // + [DataField] + public EntityUid? Target; }