]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Add Whitelist.Components yaml valiation (#40916)
authorLeon Friedrich <60421075+ElectroJr@users.noreply.github.com>
Sun, 23 Nov 2025 21:09:41 +0000 (10:09 +1300)
committerGitHub <noreply@github.com>
Sun, 23 Nov 2025 21:09:41 +0000 (21:09 +0000)
* Add Whitelist.Components yaml valiation

* poke_tests

* fix linter

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
Content.Shared/Whitelist/EntityWhitelist.cs
Content.Shared/Whitelist/EntityWhitelistSystem.cs
Resources/Prototypes/Entities/Clothing/Back/specific.yml

index e08bb339e5bb67cf72103bbe09917de59926d771..d47780912823b3d4508246f3d786c061f268df62 100644 (file)
@@ -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
     /// <summary>
     ///     Component names that are allowed in the whitelist.
     /// </summary>
-    [DataField] public string[]? Components;
-    // TODO yaml validation
+    [DataField(customTypeSerializer:typeof(CustomArraySerializer<string, ComponentNameSerializer>))]
+    public string[]? Components;
 
     /// <summary>
     ///     Item sizes that are allowed in the whitelist.
index 69d9921efac9000669d147f714b52b91db6a4510..b29adb8e35ad5fded8ed554a16fe018891e24ba5 100644 (file)
@@ -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
     /// </summary>
     public bool IsValid(EntityWhitelist list, EntityUid uid)
     {
-        if (list.Components != null)
-        {
-            if (list.Registrations == null)
-            {
-                var regs = StringsToRegs(list.Components);
-                list.Registrations = new List<ComponentRegistration>();
-                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<ComponentRegistration> StringsToRegs(string[]? input)
+    private List<ComponentRegistration>? StringsToRegs(string[]? input)
     {
-        var list = new List<ComponentRegistration>();
-
         if (input == null || input.Length == 0)
-            return list;
+            return null;
 
+        var list = new List<ComponentRegistration>(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;
index 488c02e608798c3febdbcaf500a10d80b0442054..c440fe9a66f31276e430a2f796871e8121b4498f 100644 (file)
         - RawMaterial
         - Ingot
       components:
-        - ConstructionMaterial
         - Circuitboard
         - Flatpack
         - FloorTile