From a257d91f5fce397b07fe802eda2a56e782a5aba6 Mon Sep 17 00:00:00 2001 From: Whatstone <166147148+whatston3@users.noreply.github.com> Date: Mon, 5 Oct 2026 01:54:56 +0000 Subject: [PATCH] Cleanup: Modernize MaterialReclaimerSystem (#46281) * MaterialReclaimerSystem: cleanup * more cleanup --------- Co-authored-by: Pok245 <113675512+Pok27@users.noreply.github.com> --- .../Materials/MaterialReclaimerSystem.cs | 33 +++------ .../SharedMaterialReclaimerSystem.cs | 68 +++++++++---------- 2 files changed, 43 insertions(+), 58 deletions(-) diff --git a/Content.Server/Materials/MaterialReclaimerSystem.cs b/Content.Server/Materials/MaterialReclaimerSystem.cs index a7344575d5..bf846612c9 100644 --- a/Content.Server/Materials/MaterialReclaimerSystem.cs +++ b/Content.Server/Materials/MaterialReclaimerSystem.cs @@ -2,7 +2,6 @@ using Content.Server.Administration.Logs; using Content.Server.Fluids.EntitySystems; using Content.Server.Ghost; using Content.Server.Popups; -using Content.Server.Stack; using Content.Shared.Chemistry.Components; using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Damage.Systems; @@ -28,31 +27,18 @@ namespace Content.Server.Materials; public sealed partial class MaterialReclaimerSystem : SharedMaterialReclaimerSystem { [Dependency] private AppearanceSystem _appearance = default!; - [Dependency] private GhostSystem _ghostSystem = default!; + [Dependency] private GhostSystem _ghost = default!; [Dependency] private MaterialStorageSystem _materialStorage = default!; [Dependency] private PopupSystem _popup = default!; [Dependency] private SharedSolutionContainerSystem _solutionContainer = default!; [Dependency] private GibbingSystem _gibbing = default!; [Dependency] private PuddleSystem _puddle = default!; - [Dependency] private StackSystem _stack = default!; [Dependency] private SharedMindSystem _mind = default!; [Dependency] private IAdminLogManager _adminLogger = default!; [Dependency] private SharedDestructibleSystem _destructible = default!; [Dependency] private DamageableSystem _damage = default!; - /// - public override void Initialize() - { - base.Initialize(); - - SubscribeLocalEvent(OnPowerChanged); - SubscribeLocalEvent(OnSuicideByEnvironment); - SubscribeLocalEvent(OnActivePowerChanged); - - SubscribeLocalEvent(OnBreakage); - SubscribeLocalEvent(OnRepaired); - } - + [SubscribeLocalEvent] private void OnPowerChanged(Entity entity, ref PowerChangedEvent args) { AmbientSound.SetAmbience(entity.Owner, entity.Comp.Enabled && args.Powered); @@ -60,6 +46,7 @@ public sealed partial class MaterialReclaimerSystem : SharedMaterialReclaimerSys Dirty(entity); } + [SubscribeLocalEvent] private void OnSuicideByEnvironment(Entity entity, ref SuicideByEnvironmentEvent args) { if (args.Handled) @@ -69,7 +56,7 @@ public sealed partial class MaterialReclaimerSystem : SharedMaterialReclaimerSys if (TryComp(victim, out ActorComponent? actor) && _mind.TryGetMind(actor.PlayerSession, out var mindId, out var mind)) { - _ghostSystem.OnGhostAttempt(mindId, false, mind: mind); + _ghost.OnGhostAttempt(mindId, false, mind: mind); if (mind.OwnedEntity is { Valid: true } suicider) { _popup.PopupEntity(Loc.GetString("recycler-component-suicide-message"), suicider); @@ -87,12 +74,14 @@ public sealed partial class MaterialReclaimerSystem : SharedMaterialReclaimerSys args.Handled = true; } + [SubscribeLocalEvent] private void OnActivePowerChanged(Entity entity, ref PowerChangedEvent args) { if (!args.Powered) TryFinishProcessItem(entity, null, entity.Comp); } + [SubscribeLocalEvent] private void OnBreakage(Entity ent, ref BreakageEventArgs args) { //un-emags itself when it breaks @@ -100,6 +89,7 @@ public sealed partial class MaterialReclaimerSystem : SharedMaterialReclaimerSys SetBroken(ent, true); } + [SubscribeLocalEvent] private void OnRepaired(Entity ent, ref RepairedEvent args) { SetBroken(ent, false); @@ -133,7 +123,7 @@ public sealed partial class MaterialReclaimerSystem : SharedMaterialReclaimerSys Dirty(uid, component); // scales the output if the process was interrupted. - var completion = 1f - Math.Clamp((float) Math.Round((active.EndTime - Timing.CurTime) / active.Duration), + var completion = 1f - Math.Clamp((float)Math.Round((active.EndTime - Timing.CurTime) / active.Duration), 0f, 1f); Reclaim(uid, item, completion, component); @@ -159,10 +149,7 @@ public sealed partial class MaterialReclaimerSystem : SharedMaterialReclaimerSys if (CanDamageAndGib(uid, item, component)) { - var didBloody = false; - - if (component.DamageOnEmag is not null && _damage.TryChangeDamage(item, component.DamageOnEmag, false)) // It shouldn't ignore resistance - didBloody = true; + var didBloody = component.DamageOnEmag is not null && _damage.TryChangeDamage(item, component.DamageOnEmag); // It shouldn't ignore resistance if (_destructible.CanDestroy(item) && component.GibOnEmag) { @@ -204,7 +191,7 @@ public sealed partial class MaterialReclaimerSystem : SharedMaterialReclaimerSys foreach (var (material, amount) in composition.MaterialComposition) { - var outputAmount = (int) (amount * efficiency * modifier); + var outputAmount = (int)(amount * efficiency * modifier); _materialStorage.TryChangeMaterialAmount(reclaimer, material, outputAmount, storage); } diff --git a/Content.Shared/Materials/SharedMaterialReclaimerSystem.cs b/Content.Shared/Materials/SharedMaterialReclaimerSystem.cs index a43f374d87..4555439335 100644 --- a/Content.Shared/Materials/SharedMaterialReclaimerSystem.cs +++ b/Content.Shared/Materials/SharedMaterialReclaimerSystem.cs @@ -1,3 +1,4 @@ +using System.Linq; using Content.Shared.Administration.Logs; using Content.Shared.Audio; using Content.Shared.Body; @@ -17,7 +18,6 @@ using Robust.Shared.Containers; using Robust.Shared.Map; using Robust.Shared.Physics.Events; using Robust.Shared.Timing; -using System.Linq; namespace Content.Shared.Materials; @@ -27,30 +27,22 @@ namespace Content.Shared.Materials; /// public abstract partial class SharedMaterialReclaimerSystem : EntitySystem { + [Dependency] private EmagSystem _emag = default!; + [Dependency] private EntityWhitelistSystem _whitelist = default!; [Dependency] private ISharedAdminLogManager _adminLog = default!; + [Dependency] private OpenableSystem _openable = default!; + [Dependency] private SharedAudioSystem _audio = default!; + [Dependency] private SharedSolutionContainerSystem _solutionContainer = default!; [Dependency] protected IGameTiming Timing = default!; [Dependency] protected SharedAmbientSoundSystem AmbientSound = default!; - [Dependency] private SharedAudioSystem _audio = default!; [Dependency] protected SharedContainerSystem Container = default!; - [Dependency] private EntityWhitelistSystem _whitelistSystem = default!; - [Dependency] private EmagSystem _emag = default!; - [Dependency] private OpenableSystem _openable = default!; - [Dependency] private SharedSolutionContainerSystem _solutionContainer = default!; + + [Dependency] private EntityQuery _materialReclaimerQuery; + [Dependency] private EntityQuery _solutionTransferQuery; public const string ActiveReclaimerContainerId = "active-material-reclaimer-container"; - /// - public override void Initialize() - { - SubscribeLocalEvent(OnShutdown); - SubscribeLocalEvent(OnExamined); - SubscribeLocalEvent(OnEmagged); - SubscribeLocalEvent(OnMapInit); - SubscribeLocalEvent(OnCollide); - SubscribeLocalEvent(OnActiveStartup); - SubscribeLocalEvent(OnInteractUsing, - before: [typeof(SolutionTransferSystem), typeof(AnchorableSystem)]); - } + [SubscribeLocalEvent(before: [typeof(SolutionTransferSystem), typeof(AnchorableSystem)])] private void OnInteractUsing(Entity entity, ref InteractUsingEvent args) { if (args.Handled) @@ -64,7 +56,7 @@ public abstract partial class SharedMaterialReclaimerSystem : EntitySystem if (_openable.IsClosed(args.Used)) return; - if (TryComp(args.Used, out var transfer) && + if (_solutionTransferQuery.TryComp(args.Used, out var transfer) && transfer.CanSend) return; } @@ -73,44 +65,50 @@ public abstract partial class SharedMaterialReclaimerSystem : EntitySystem args.Handled = TryStartProcessItem(entity.Owner, args.Used, entity.Comp, args.User); } - private void OnMapInit(EntityUid uid, MaterialReclaimerComponent component, MapInitEvent args) + [SubscribeLocalEvent] + private void OnMapInit(Entity ent, ref MapInitEvent args) { - component.NextSound = Timing.CurTime; + ent.Comp.NextSound = Timing.CurTime; } - private void OnShutdown(EntityUid uid, MaterialReclaimerComponent component, ComponentShutdown args) + [SubscribeLocalEvent] + private void OnShutdown(Entity ent, ref ComponentShutdown args) { - _audio.Stop(component.Stream); + _audio.Stop(ent.Comp.Stream); } - private void OnExamined(EntityUid uid, MaterialReclaimerComponent component, ExaminedEvent args) + [SubscribeLocalEvent] + private void OnExamined(Entity ent, ref ExaminedEvent args) { - args.PushMarkup(Loc.GetString("recycler-count-items", ("items", component.ItemsProcessed))); + args.PushMarkup(Loc.GetString("recycler-count-items", ("items", ent.Comp.ItemsProcessed))); } - private void OnEmagged(EntityUid uid, MaterialReclaimerComponent component, ref GotEmaggedEvent args) + [SubscribeLocalEvent] + private void OnEmagged(Entity ent, ref GotEmaggedEvent args) { if (!_emag.CompareFlag(args.Type, EmagType.Interaction)) return; - if (_emag.CheckFlag(uid, EmagType.Interaction)) + if (_emag.CheckFlag(ent, EmagType.Interaction)) return; args.Handled = true; } - private void OnCollide(EntityUid uid, CollideMaterialReclaimerComponent component, ref StartCollideEvent args) + [SubscribeLocalEvent] + private void OnCollide(Entity ent, ref StartCollideEvent args) { - if (args.OurFixtureId != component.FixtureId) + if (args.OurFixtureId != ent.Comp.FixtureId) return; - if (!TryComp(uid, out var reclaimer)) + if (!_materialReclaimerQuery.TryComp(ent, out var reclaimer)) return; - TryStartProcessItem(uid, args.OtherEntity, reclaimer); + TryStartProcessItem(ent, args.OtherEntity, reclaimer); } - private void OnActiveStartup(EntityUid uid, ActiveMaterialReclaimerComponent component, ComponentStartup args) + [SubscribeLocalEvent] + private void OnActiveStartup(Entity ent, ref ComponentStartup args) { - component.ReclaimingContainer = Container.EnsureContainer(uid, ActiveReclaimerContainerId); + ent.Comp.ReclaimingContainer = Container.EnsureContainer(ent, ActiveReclaimerContainerId); } /// @@ -127,8 +125,8 @@ public abstract partial class SharedMaterialReclaimerSystem : EntitySystem if (HasComp(item) && !CanDamageAndGib(uid, item, component)) // whitelist? We be gibbing, boy! return false; - if (_whitelistSystem.IsWhitelistFail(component.Whitelist, item) || - _whitelistSystem.IsWhitelistPass(component.Blacklist, item)) + if (_whitelist.IsWhitelistFail(component.Whitelist, item) || + _whitelist.IsWhitelistPass(component.Blacklist, item)) return false; if (Container.TryGetContainingContainer((item, null, null), out _) && !Container.TryRemoveFromContainer(item))