diff --git a/Content.Server/Chemistry/EntitySystems/ChemMasterSystem.cs b/Content.Server/Chemistry/EntitySystems/ChemMasterSystem.cs index c402088685..9b03b4eb4b 100644 --- a/Content.Server/Chemistry/EntitySystems/ChemMasterSystem.cs +++ b/Content.Server/Chemistry/EntitySystems/ChemMasterSystem.cs @@ -1,6 +1,7 @@ using System.Diagnostics.CodeAnalysis; using System.Linq; using Content.Server.Chemistry.Components; +using Content.Server.Labels; using Content.Server.Labels.Components; using Content.Server.Popups; using Content.Server.Storage.Components; @@ -33,6 +34,7 @@ namespace Content.Server.Chemistry.EntitySystems [Dependency] private readonly ItemSlotsSystem _itemSlotsSystem = default!; [Dependency] private readonly UserInterfaceSystem _userInterfaceSystem = default!; [Dependency] private readonly StorageSystem _storageSystem = default!; + [Dependency] private readonly LabelSystem _labelSystem = default!; private const string PillPrototypeId = "Pill"; @@ -191,13 +193,13 @@ namespace Content.Server.Chemistry.EntitySystems if (!WithdrawFromBuffer(chemMaster, needed, user, out var withdrawal)) return; - Label(container, message.Label); + _labelSystem.Label(container, message.Label); for (var i = 0; i < message.Number; i++) { var item = Spawn(PillPrototypeId, Transform(container).Coordinates); _storageSystem.Insert(container, item, storage); - Label(item, message.Label); + _labelSystem.Label(item, message.Label); var itemSolution = _solutionContainerSystem.EnsureSolution(item, SharedChemMaster.PillSolutionName); @@ -231,7 +233,7 @@ namespace Content.Server.Chemistry.EntitySystems if (!WithdrawFromBuffer(chemMaster, message.Dosage, user, out var withdrawal)) return; - Label(container, message.Label); + _labelSystem.Label(container, message.Label); _solutionContainerSystem.TryAddSolution( container, solution, withdrawal); @@ -270,18 +272,6 @@ namespace Content.Server.Chemistry.EntitySystems return true; } - private void Label(EntityUid ent, string label) - { - if (string.IsNullOrEmpty(label)) - return; - var labelComponent = EnsureComp(ent); - - labelComponent.OriginalName = Name(ent); - var val = Name(ent) + $" ({label})"; - MetaData(ent).EntityName = val; - labelComponent.CurrentLabel = label; - } - private void ClickSound(ChemMasterComponent chemMaster) { _audioSystem.Play(chemMaster.ClickSound, Filter.Pvs(chemMaster.Owner), chemMaster.Owner, AudioParams.Default.WithVolume(-2f)); diff --git a/Content.Server/Labels/Label/HandLabelerSystem.cs b/Content.Server/Labels/Label/HandLabelerSystem.cs index 32ecc3ff81..ab6b423bf4 100644 --- a/Content.Server/Labels/Label/HandLabelerSystem.cs +++ b/Content.Server/Labels/Label/HandLabelerSystem.cs @@ -15,6 +15,7 @@ namespace Content.Server.Labels public sealed class HandLabelerSystem : EntitySystem { [Dependency] private readonly UserInterfaceSystem _userInterfaceSystem = default!; + [Dependency] private readonly LabelSystem _labelSystem = default!; public override void Initialize() { @@ -44,23 +45,14 @@ namespace Content.Server.Labels return; } - LabelComponent label = target.EnsureComponent(); - - if (label.OriginalName != null) - EntityManager.GetComponent(target).EntityName = label.OriginalName; - label.OriginalName = null; - if (handLabeler.AssignedLabel == string.Empty) { - label.CurrentLabel = null; + _labelSystem.Label(target, null); result = Loc.GetString("hand-labeler-successfully-removed"); return; } - label.OriginalName = EntityManager.GetComponent(target).EntityName; - string val = EntityManager.GetComponent(target).EntityName + $" ({handLabeler.AssignedLabel})"; - EntityManager.GetComponent(target).EntityName = val; - label.CurrentLabel = handLabeler.AssignedLabel; + _labelSystem.Label(target, handLabeler.AssignedLabel); result = Loc.GetString("hand-labeler-successfully-applied"); } diff --git a/Content.Server/Labels/Label/LabelSystem.cs b/Content.Server/Labels/Label/LabelSystem.cs index e0e1bf3ffc..7d7da51a64 100644 --- a/Content.Server/Labels/Label/LabelSystem.cs +++ b/Content.Server/Labels/Label/LabelSystem.cs @@ -31,6 +31,39 @@ namespace Content.Server.Labels SubscribeLocalEvent(OnExamined); } + /// + /// Apply or remove a label on an entity. + /// + /// EntityUid to change label on + /// intended label text (null to remove) + /// label component for resolve + /// metadata component for resolve + public void Label(EntityUid uid, string? text, MetaDataComponent? metadata = null, LabelComponent? label = null) + { + if (!Resolve(uid, ref metadata)) + return; + if (!Resolve(uid, ref label, false)) + label = EnsureComp(uid); + + if (string.IsNullOrEmpty(text)) + { + if (label.OriginalName is null) + return; + + // Remove label + metadata.EntityName = label.OriginalName; + label.CurrentLabel = null; + label.OriginalName = null; + + return; + } + + // Update label + label.OriginalName ??= metadata.EntityName; + label.CurrentLabel = text; + metadata.EntityName = $"{label.OriginalName} ({text})"; + } + private void OnComponentInit(EntityUid uid, PaperLabelComponent component, ComponentInit args) { _itemSlotsSystem.AddItemSlot(uid, ContainerName, component.LabelSlot);