diff --git a/Content.Shared/Pulling/Components/PullableComponent.cs b/Content.Shared/Pulling/Components/PullableComponent.cs index 7b1c77bef9..802e77eeb6 100644 --- a/Content.Shared/Pulling/Components/PullableComponent.cs +++ b/Content.Shared/Pulling/Components/PullableComponent.cs @@ -40,49 +40,6 @@ namespace Content.Shared.Pulling.Components [ViewVariables] public bool PrevFixedRotation; - public override ComponentState GetComponentState() - { - return new PullableComponentState(Puller); - } - - public override void HandleComponentState(ComponentState? curState, ComponentState? nextState) - { - base.HandleComponentState(curState, nextState); - - if (curState is not PullableComponentState state) - { - return; - } - - if (!state.Puller.HasValue) - { - EntitySystem.Get().ForceDisconnectPullable(this); - return; - } - - if (!state.Puller.Value.IsValid()) - { - Logger.Error($"Invalid entity {state.Puller.Value} for pulling"); - return; - } - - if (Puller == state.Puller) - { - // don't disconnect and reconnect a puller for no reason - return; - } - - if (!IoCManager.Resolve().TryGetComponent(state.Puller.Value, out var comp)) - { - Logger.Error($"Entity {state.Puller.Value} for pulling had no Puller component"); - // ensure it disconnects from any different puller, still - EntitySystem.Get().ForceDisconnectPullable(this); - return; - } - - EntitySystem.Get().ForceRelationship(comp, this); - } - protected override void OnRemove() { if (Puller != null) diff --git a/Content.Shared/Pulling/Systems/SharedPullingStateManagementSystem.cs b/Content.Shared/Pulling/Systems/SharedPullingStateManagementSystem.cs index 4cbdd13f54..763486925d 100644 --- a/Content.Shared/Pulling/Systems/SharedPullingStateManagementSystem.cs +++ b/Content.Shared/Pulling/Systems/SharedPullingStateManagementSystem.cs @@ -2,6 +2,7 @@ using System.Linq; using Content.Shared.Physics.Pull; using Content.Shared.Pulling.Components; using JetBrains.Annotations; +using Robust.Shared.GameStates; using Robust.Shared.Map; using Robust.Shared.Physics; using Robust.Shared.Timing; @@ -24,6 +25,41 @@ namespace Content.Shared.Pulling base.Initialize(); SubscribeLocalEvent(OnShutdown); + SubscribeLocalEvent(OnGetState); + SubscribeLocalEvent(OnHandleState); + } + + private void OnGetState(EntityUid uid, SharedPullableComponent component, ref ComponentGetState args) + { + args.State = new PullableComponentState(component.Puller); + } + + private void OnHandleState(EntityUid uid, SharedPullableComponent component, ref ComponentHandleState args) + { + if (args.Current is not PullableComponentState state) + return; + + if (!state.Puller.HasValue) + { + ForceDisconnectPullable(component); + return; + } + + if (component.Puller == state.Puller) + { + // don't disconnect and reconnect a puller for no reason + return; + } + + if (!TryComp(state.Puller.Value, out var comp)) + { + Logger.Error($"Pullable state for entity {ToPrettyString(uid)} had invalid puller entity {ToPrettyString(state.Puller.Value)}"); + // ensure it disconnects from any different puller, still + ForceDisconnectPullable(component); + return; + } + + ForceRelationship(comp, component); } private void OnShutdown(EntityUid uid, SharedPullableComponent component, ComponentShutdown args)