diff --git a/Content.Shared/Whitelist/EntityWhitelist.cs b/Content.Shared/Whitelist/EntityWhitelist.cs index e08bb339e5..d477809128 100644 --- a/Content.Shared/Whitelist/EntityWhitelist.cs +++ b/Content.Shared/Whitelist/EntityWhitelist.cs @@ -2,6 +2,8 @@ using Content.Shared.Item; using Content.Shared.Tag; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Generic; namespace Content.Shared.Whitelist; @@ -32,8 +34,8 @@ public sealed partial class EntityWhitelist /// /// Component names that are allowed in the whitelist. /// - [DataField] public string[]? Components; - // TODO yaml validation + [DataField(customTypeSerializer:typeof(CustomArraySerializer))] + public string[]? Components; /// /// Item sizes that are allowed in the whitelist. diff --git a/Content.Shared/Whitelist/EntityWhitelistSystem.cs b/Content.Shared/Whitelist/EntityWhitelistSystem.cs index 69d9921efa..b29adb8e35 100644 --- a/Content.Shared/Whitelist/EntityWhitelistSystem.cs +++ b/Content.Shared/Whitelist/EntityWhitelistSystem.cs @@ -1,6 +1,7 @@ using System.Diagnostics.CodeAnalysis; using Content.Shared.Item; using Content.Shared.Tag; +using Robust.Shared.Utility; namespace Content.Shared.Whitelist; @@ -44,21 +45,13 @@ public sealed class EntityWhitelistSystem : EntitySystem /// public bool IsValid(EntityWhitelist list, EntityUid uid) { - if (list.Components != null) - { - if (list.Registrations == null) - { - var regs = StringsToRegs(list.Components); - list.Registrations = new List(); - list.Registrations.AddRange(regs); - } - } + list.Registrations ??= StringsToRegs(list.Components); - if (list.Registrations != null && list.Registrations.Count > 0) + if (list.Registrations != null) { foreach (var reg in list.Registrations) { - if (HasComp(uid, reg.Type)) + if (EntityManager.HasComponent(uid, reg)) { if (!list.RequireAll) return true; @@ -168,25 +161,18 @@ public sealed class EntityWhitelistSystem : EntitySystem return IsWhitelistFailOrNull(blacklist, uid); } - private List StringsToRegs(string[]? input) + private List? StringsToRegs(string[]? input) { - var list = new List(); - if (input == null || input.Length == 0) - return list; + return null; + var list = new List(input.Length); foreach (var name in input) { - var availability = Factory.GetComponentAvailability(name); - if (Factory.TryGetRegistration(name, out var registration) - && availability == ComponentAvailability.Available) - { + if (Factory.TryGetRegistration(name, out var registration)) list.Add(registration); - } - else if (availability == ComponentAvailability.Unknown) - { - Log.Error($"StringsToRegs failed: Unknown component name {name} passed to EntityWhitelist!"); - } + else if (Factory.GetComponentAvailability(name) != ComponentAvailability.Ignore) + Log.Error($"{nameof(StringsToRegs)} failed: Unknown component name {name} passed to EntityWhitelist!"); } return list; diff --git a/Resources/Prototypes/Entities/Clothing/Back/specific.yml b/Resources/Prototypes/Entities/Clothing/Back/specific.yml index 488c02e608..c440fe9a66 100644 --- a/Resources/Prototypes/Entities/Clothing/Back/specific.yml +++ b/Resources/Prototypes/Entities/Clothing/Back/specific.yml @@ -146,7 +146,6 @@ - RawMaterial - Ingot components: - - ConstructionMaterial - Circuitboard - Flatpack - FloorTile