diff --git a/Content.Server/Atmos/Piping/Unary/Components/GasCanisterComponent.cs b/Content.Server/Atmos/Piping/Unary/Components/GasCanisterComponent.cs index aee060049d..9943d8b9d3 100644 --- a/Content.Server/Atmos/Piping/Unary/Components/GasCanisterComponent.cs +++ b/Content.Server/Atmos/Piping/Unary/Components/GasCanisterComponent.cs @@ -3,7 +3,7 @@ using Content.Shared.Atmos; namespace Content.Server.Atmos.Piping.Unary.Components { [RegisterComponent] - public sealed class GasCanisterComponent : Component + public sealed class GasCanisterComponent : Component, IGasMixtureHolder { [ViewVariables(VVAccess.ReadWrite)] [DataField("port")] @@ -18,7 +18,7 @@ namespace Content.Server.Atmos.Piping.Unary.Components [ViewVariables(VVAccess.ReadWrite)] [DataField("gasMixture")] - public GasMixture Air { get; } = new(); + public GasMixture Air { get; set; } = new(); /// /// Last recorded pressure, for appearance-updating purposes. diff --git a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasCanisterSystem.cs b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasCanisterSystem.cs index 405e62f894..081f796163 100644 --- a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasCanisterSystem.cs +++ b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasCanisterSystem.cs @@ -139,6 +139,8 @@ namespace Content.Server.Atmos.Piping.Unary.EntitySystems private void OnCanisterUpdated(EntityUid uid, GasCanisterComponent canister, AtmosDeviceUpdateEvent args) { + _atmosphereSystem.React(canister.Air, canister); + if (!EntityManager.TryGetComponent(uid, out NodeContainerComponent? nodeContainer) || !EntityManager.TryGetComponent(uid, out AppearanceComponent? appearance)) return; @@ -146,8 +148,6 @@ namespace Content.Server.Atmos.Piping.Unary.EntitySystems if (!nodeContainer.TryGetNode(canister.PortName, out PortablePipeNode? portNode)) return; - _atmosphereSystem.React(canister.Air, portNode); - if (portNode.NodeGroup is PipeNet {NodeCount: > 1} net) { var buffer = new GasMixture(net.Air.Volume + canister.Air.Volume); diff --git a/Content.Server/NodeContainer/NodeGroups/BaseNodeGroup.cs b/Content.Server/NodeContainer/NodeGroups/BaseNodeGroup.cs index fb0c3dd84b..1481d7b1c2 100644 --- a/Content.Server/NodeContainer/NodeGroups/BaseNodeGroup.cs +++ b/Content.Server/NodeContainer/NodeGroups/BaseNodeGroup.cs @@ -20,7 +20,7 @@ namespace Content.Server.NodeContainer.NodeGroups void Create(NodeGroupID groupId); - void Initialize(Node sourceNode, IEntityManager? entMan = null); + void Initialize(Node sourceNode, IEntityManager entMan); void RemoveNode(Node node); @@ -70,7 +70,7 @@ namespace Content.Server.NodeContainer.NodeGroups GroupId = groupId; } - public virtual void Initialize(Node sourceNode, IEntityManager? entMan = null) + public virtual void Initialize(Node sourceNode, IEntityManager entMan) { } diff --git a/Content.Server/NodeContainer/NodeGroups/PipeNet.cs b/Content.Server/NodeContainer/NodeGroups/PipeNet.cs index e5dd31cbc1..e905a6e78e 100644 --- a/Content.Server/NodeContainer/NodeGroups/PipeNet.cs +++ b/Content.Server/NodeContainer/NodeGroups/PipeNet.cs @@ -24,17 +24,15 @@ namespace Content.Server.NodeContainer.NodeGroups public EntityUid? Grid { get; private set; } - public override void Initialize(Node sourceNode, IEntityManager? entMan = null) + public override void Initialize(Node sourceNode, IEntityManager entMan) { - IoCManager.Resolve(ref entMan); - base.Initialize(sourceNode, entMan); Grid = entMan.GetComponent(sourceNode.Owner).GridUid; if (Grid == null) { - Logger.Error($"Created a pipe network without an associated grid. Pipe networks currently need to be tied to a grid for amtos to work. Source entity: {entMan.ToPrettyString(sourceNode.Owner)}"); + // This is probably due to a cannister or something like that being spawned in space. return; } @@ -82,13 +80,11 @@ namespace Content.Server.NodeContainer.NodeGroups newAir.Add(newPipeNet.Air); } - _atmosphereSystem!.DivideInto(Air, newAir); + _atmosphereSystem?.DivideInto(Air, newAir); } private void RemoveFromGridAtmos() { - DebugTools.AssertNotNull(_atmosphereSystem); - if (Grid == null) return; diff --git a/Content.Server/Power/NodeGroups/ApcNet.cs b/Content.Server/Power/NodeGroups/ApcNet.cs index 300373bd6b..a3adf2a820 100644 --- a/Content.Server/Power/NodeGroups/ApcNet.cs +++ b/Content.Server/Power/NodeGroups/ApcNet.cs @@ -26,7 +26,7 @@ namespace Content.Server.Power.NodeGroups [UsedImplicitly] public sealed class ApcNet : BaseNetConnectorNodeGroup, IApcNet { - private readonly PowerNetSystem _powerNetSystem = EntitySystem.Get(); + private PowerNetSystem? _powerNetSystem; [ViewVariables] public readonly List Apcs = new(); [ViewVariables] public readonly List Providers = new(); @@ -42,10 +42,11 @@ namespace Content.Server.Power.NodeGroups [ViewVariables] public PowerState.Network NetworkNode { get; } = new(); - public override void Initialize(Node sourceNode, IEntityManager? entMan = null) + public override void Initialize(Node sourceNode, IEntityManager entMan) { base.Initialize(sourceNode, entMan); + _powerNetSystem = entMan.EntitySysManager.GetEntitySystem(); _powerNetSystem.InitApcNet(this); } @@ -53,7 +54,7 @@ namespace Content.Server.Power.NodeGroups { base.AfterRemake(newGroups); - _powerNetSystem.DestroyApcNet(this); + _powerNetSystem?.DestroyApcNet(this); } public void AddApc(ApcComponent apc) @@ -104,7 +105,7 @@ namespace Content.Server.Power.NodeGroups public void QueueNetworkReconnect() { - _powerNetSystem.QueueReconnectApcNet(this); + _powerNetSystem?.QueueReconnectApcNet(this); } protected override void SetNetConnectorNet(IBaseNetConnectorComponent netConnectorComponent) @@ -114,6 +115,9 @@ namespace Content.Server.Power.NodeGroups public override string? GetDebugData() { + if (_powerNetSystem == null) + return null; + // This is just recycling the multi-tool examine. var ps = _powerNetSystem.GetNetworkStatistics(NetworkNode); diff --git a/Content.Server/Power/NodeGroups/PowerNet.cs b/Content.Server/Power/NodeGroups/PowerNet.cs index d5c86e2946..3f90879711 100644 --- a/Content.Server/Power/NodeGroups/PowerNet.cs +++ b/Content.Server/Power/NodeGroups/PowerNet.cs @@ -27,7 +27,7 @@ namespace Content.Server.Power.NodeGroups [UsedImplicitly] public sealed class PowerNet : BaseNetConnectorNodeGroup, IPowerNet { - private readonly PowerNetSystem _powerNetSystem = EntitySystem.Get(); + private PowerNetSystem? _powerNetSystem; [ViewVariables] public readonly List Suppliers = new(); [ViewVariables] public readonly List Consumers = new(); @@ -37,10 +37,11 @@ namespace Content.Server.Power.NodeGroups [ViewVariables] public PowerState.Network NetworkNode { get; } = new(); - public override void Initialize(Node sourceNode, IEntityManager? entMan = null) + public override void Initialize(Node sourceNode, IEntityManager entMan) { base.Initialize(sourceNode, entMan); + _powerNetSystem = entMan.EntitySysManager.GetEntitySystem(); _powerNetSystem.InitPowerNet(this); } @@ -48,7 +49,7 @@ namespace Content.Server.Power.NodeGroups { base.AfterRemake(newGroups); - _powerNetSystem.DestroyPowerNet(this); + _powerNetSystem?.DestroyPowerNet(this); } protected override void SetNetConnectorNet(IBaseNetConnectorComponent netConnectorComponent) @@ -60,28 +61,28 @@ namespace Content.Server.Power.NodeGroups { supplier.NetworkSupply.LinkedNetwork = default; Suppliers.Add(supplier); - _powerNetSystem.QueueReconnectPowerNet(this); + _powerNetSystem?.QueueReconnectPowerNet(this); } public void RemoveSupplier(PowerSupplierComponent supplier) { supplier.NetworkSupply.LinkedNetwork = default; Suppliers.Remove(supplier); - _powerNetSystem.QueueReconnectPowerNet(this); + _powerNetSystem?.QueueReconnectPowerNet(this); } public void AddConsumer(PowerConsumerComponent consumer) { consumer.NetworkLoad.LinkedNetwork = default; Consumers.Add(consumer); - _powerNetSystem.QueueReconnectPowerNet(this); + _powerNetSystem?.QueueReconnectPowerNet(this); } public void RemoveConsumer(PowerConsumerComponent consumer) { consumer.NetworkLoad.LinkedNetwork = default; Consumers.Remove(consumer); - _powerNetSystem.QueueReconnectPowerNet(this); + _powerNetSystem?.QueueReconnectPowerNet(this); } public void AddDischarger(BatteryDischargerComponent discharger) @@ -89,7 +90,7 @@ namespace Content.Server.Power.NodeGroups var battery = IoCManager.Resolve().GetComponent(discharger.Owner); battery.NetworkBattery.LinkedNetworkCharging = default; Dischargers.Add(discharger); - _powerNetSystem.QueueReconnectPowerNet(this); + _powerNetSystem?.QueueReconnectPowerNet(this); } public void RemoveDischarger(BatteryDischargerComponent discharger) @@ -99,7 +100,7 @@ namespace Content.Server.Power.NodeGroups battery.NetworkBattery.LinkedNetworkCharging = default; Dischargers.Remove(discharger); - _powerNetSystem.QueueReconnectPowerNet(this); + _powerNetSystem?.QueueReconnectPowerNet(this); } public void AddCharger(BatteryChargerComponent charger) @@ -107,7 +108,7 @@ namespace Content.Server.Power.NodeGroups var battery = IoCManager.Resolve().GetComponent(charger.Owner); battery.NetworkBattery.LinkedNetworkCharging = default; Chargers.Add(charger); - _powerNetSystem.QueueReconnectPowerNet(this); + _powerNetSystem?.QueueReconnectPowerNet(this); } public void RemoveCharger(BatteryChargerComponent charger) @@ -117,11 +118,14 @@ namespace Content.Server.Power.NodeGroups battery.NetworkBattery.LinkedNetworkCharging = default; Chargers.Remove(charger); - _powerNetSystem.QueueReconnectPowerNet(this); + _powerNetSystem?.QueueReconnectPowerNet(this); } public override string? GetDebugData() { + if (_powerNetSystem == null) + return null; + // This is just recycling the multi-tool examine. var ps = _powerNetSystem.GetNetworkStatistics(NetworkNode);