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