]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Infer type for EntSelector (#30856)
authorNemanja <98561806+EmoGarbage404@users.noreply.github.com>
Sat, 10 Aug 2024 14:17:45 +0000 (10:17 -0400)
committerGitHub <noreply@github.com>
Sat, 10 Aug 2024 14:17:45 +0000 (10:17 -0400)
Infer type for EntSelector.cs

Content.Shared/EntityTable/EntitySelectors/EntSelector.cs
Content.Shared/EntityTable/EntitySelectors/EntityTableTypeSerializer.cs [new file with mode: 0644]
Resources/Prototypes/Catalog/Fills/Crates/fun.yml
Resources/Prototypes/Catalog/Fills/Lockers/misc.yml
Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml

index b1e712b4b3acd104cb58fc4e9dd0ff1d9e1413f3..eea4dd85a77570b5d311bfc21564b828bb9f56ec 100644 (file)
@@ -8,7 +8,9 @@ namespace Content.Shared.EntityTable.EntitySelectors;
 /// </summary>
 public sealed partial class EntSelector : EntityTableSelector
 {
-    [DataField(required: true)]
+    public const string IdDataFieldTag = "id";
+
+    [DataField(IdDataFieldTag, required: true)]
     public EntProtoId Id;
 
     [DataField]
diff --git a/Content.Shared/EntityTable/EntitySelectors/EntityTableTypeSerializer.cs b/Content.Shared/EntityTable/EntitySelectors/EntityTableTypeSerializer.cs
new file mode 100644 (file)
index 0000000..5bc256d
--- /dev/null
@@ -0,0 +1,37 @@
+using Robust.Shared.Serialization;
+using Robust.Shared.Serialization.Manager;
+using Robust.Shared.Serialization.Markdown.Mapping;
+using Robust.Shared.Serialization.Markdown.Validation;
+using Robust.Shared.Serialization.TypeSerializers.Interfaces;
+
+namespace Content.Shared.EntityTable.EntitySelectors;
+
+[TypeSerializer]
+public sealed class EntityTableTypeSerializer :
+    ITypeReader<EntityTableSelector, MappingDataNode>
+{
+    public ValidationNode Validate(ISerializationManager serializationManager,
+        MappingDataNode node,
+        IDependencyCollection dependencies,
+        ISerializationContext? context = null)
+    {
+        if (node.Has(EntSelector.IdDataFieldTag))
+            return serializationManager.ValidateNode<EntSelector>(node, context);
+
+        return new ErrorNode(node, "Custom validation not supported! Please specify the type manually!");
+    }
+
+    public EntityTableSelector Read(ISerializationManager serializationManager,
+        MappingDataNode node,
+        IDependencyCollection dependencies,
+        SerializationHookContext hookCtx,
+        ISerializationContext? context = null,
+        ISerializationManager.InstantiationDelegate<EntityTableSelector>? instanceProvider = null)
+    {
+        var type = typeof(EntityTableSelector);
+        if (node.Has(EntSelector.IdDataFieldTag))
+            type = typeof(EntSelector);
+
+        return (EntityTableSelector) serializationManager.Read(type, node, context)!;
+    }
+}
index ebc7a446b9663a706e950f8ea6177aab41d55696..4d34fa4290db629c066dc51339d4cf6dab56c020 100644 (file)
@@ -2,67 +2,43 @@
   id: AllPlushiesTable
   table: !type:GroupSelector
     children:
-    - !type:EntSelector
-      id: PlushieBee
-    - !type:EntSelector
-      id: PlushieNar
+    - id: PlushieBee
+    - id: PlushieNar
       weight: 0.5
-    - !type:EntSelector
-      id: PlushieRatvar
+    - id: PlushieRatvar
       weight: 0.5
-    - !type:EntSelector
-      id: PlushieNuke
-    - !type:EntSelector
-      id: PlushieSlime
-    - !type:EntSelector
-      id: PlushieSnake
+    - id: PlushieNuke
+    - id: PlushieSlime
+    - id: PlushieSnake
     - !type:GroupSelector
       children:
-      - !type:EntSelector
-        id: PlushieLizard
+      - id: PlushieLizard
         weight: 9
-      - !type:EntSelector
-        id: PlushieSpaceLizard
+      - id: PlushieSpaceLizard
         weight: 1
     - !type:GroupSelector
       children:
-      - !type:EntSelector
-        id: PlushieCarp
-      - !type:EntSelector
-        id: PlushieHolocarp
+      - id: PlushieCarp
+      - id: PlushieHolocarp
         weight: 0.25
-      - !type:EntSelector
-        id: PlushieMagicarp
+      - id: PlushieMagicarp
         weight: 0.25
-      - !type:EntSelector
-        id: PlushieRainbowCarp
+      - id: PlushieRainbowCarp
         weight: 0.15
-    - !type:EntSelector
-      id: PlushieVox
-    - !type:EntSelector
-      id: PlushieRouny
+    - id: PlushieVox
+    - id: PlushieRouny
     - !type:GroupSelector
       children:
-      - !type:EntSelector
-        id: PlushieSharkBlue
-      - !type:EntSelector
-        id: PlushieSharkGrey
-      - !type:EntSelector
-        id: PlushieSharkPink
-    - !type:EntSelector
-      id: PlushieAtmosian
-    - !type:EntSelector
-      id: PlushieDiona
-    - !type:EntSelector
-      id: PlushieXeno
-    - !type:EntSelector
-      id: PlushieHampter
-    - !type:EntSelector
-      id: PlushieMoth
-    - !type:EntSelector
-      id: PlushieArachind
-    - !type:EntSelector
-      id: PlushiePenguin
+      - id: PlushieSharkBlue
+      - id: PlushieSharkGrey
+      - id: PlushieSharkPink
+    - id: PlushieAtmosian
+    - id: PlushieDiona
+    - id: PlushieXeno
+    - id: PlushieHampter
+    - id: PlushieMoth
+    - id: PlushieArachind
+    - id: PlushiePenguin
 
 - type: entity
   id: CrateFunPlushie
     containers:
       entity_storage: !type:AllSelector
         children:
-        - !type:EntSelector
-          id: PlushieLizard
+        - id: PlushieLizard
           amount: !type:ConstantNumberSelector
             value: 3
-        - !type:EntSelector
-          id: PlushieSpaceLizard
+        - id: PlushieSpaceLizard
           amount: !type:ConstantNumberSelector
             value: 3
 
index cf270a631065cbbb5dbd1ed9df9925b776ec89c4..5e2b6aeb758c8fe4f74d98194a61abe566e83092 100644 (file)
@@ -7,46 +7,31 @@
     containers:
       entity_storage: !type:AllSelector
         children:
-        - !type:EntSelector
-          id: ClothingBeltMilitaryWebbing
-        - !type:EntSelector
-          id: ClothingHandsGlovesCombat
-        - !type:EntSelector
-          id: JetpackBlackFilled
-        - !type:EntSelector
-          id: ClothingUniformJumpsuitOperative
-        - !type:EntSelector
-          id: ClothingUniformJumpskirtOperative
-        - !type:EntSelector
-          id: ClothingHeadsetAltSyndicate
-        - !type:EntSelector
-          id: ClothingEyesHudSyndicate
+        - id: ClothingBeltMilitaryWebbing
+        - id: ClothingHandsGlovesCombat
+        - id: JetpackBlackFilled
+        - id: ClothingUniformJumpsuitOperative
+        - id: ClothingUniformJumpskirtOperative
+        - id: ClothingHeadsetAltSyndicate
+        - id: ClothingEyesHudSyndicate
 
 - type: entityTable
   id: FillLockerEmergencyStandard
   table: !type:AllSelector
     children:
-    - !type:EntSelector
-      id: ClothingMaskBreath
-    - !type:EntSelector
-      id: ClothingOuterSuitEmergency
+    - id: ClothingMaskBreath
+    - id: ClothingOuterSuitEmergency
     - !type:GroupSelector
       children:
-      - !type:EntSelector
-        id: EmergencyOxygenTankFilled
-      - !type:EntSelector
-        id: OxygenTankFilled
-    - !type:EntSelector
-      id: ToolboxEmergencyFilled
+      - id: EmergencyOxygenTankFilled
+      - id: OxygenTankFilled
+    - id: ToolboxEmergencyFilled
       prob: 0.5
-    - !type:EntSelector
-      id: MedkitOxygenFilled
+    - id: MedkitOxygenFilled
       prob: 0.2
-    - !type:EntSelector
-      id: WeaponFlareGun
+    - id: WeaponFlareGun
       prob: 0.05
-    - !type:EntSelector
-      id: BoxMRE
+    - id: BoxMRE
       prob: 0.1
 
 - type: entity
     containers:
       entity_storage: !type:AllSelector
         children:
-        - !type:EntSelector
-          id: ClothingMaskBreath
-        - !type:EntSelector
-          id: ClothingOuterSuitEmergency
+        - id: ClothingMaskBreath
+        - id: ClothingOuterSuitEmergency
         - !type:GroupSelector
           children:
-          - !type:EntSelector
-            id: EmergencyNitrogenTankFilled
-          - !type:EntSelector
-            id: NitrogenTankFilled
+          - id: EmergencyNitrogenTankFilled
+          - id: NitrogenTankFilled
 
 - type: entityTable
   id: FillLockerFireStandard
   table: !type:AllSelector
     children:
-    - !type:EntSelector
-      id: ClothingOuterSuitFire
-    - !type:EntSelector
-      id: ClothingHeadHelmetFire
-    - !type:EntSelector
-      id: ClothingMaskGas
+    - id: ClothingOuterSuitFire
+    - id: ClothingHeadHelmetFire
+    - id: ClothingMaskGas
     - !type:GroupSelector
       children:
-      - !type:EntSelector
-        id: EmergencyOxygenTankFilled
-      - !type:EntSelector
-        id: OxygenTankFilled
-    - !type:EntSelector
-      id: CrowbarRed
+      - id: EmergencyOxygenTankFilled
+      - id: OxygenTankFilled
+    - id: CrowbarRed
     - !type:GroupSelector
       children:
-      - !type:EntSelector
-        id: FireExtinguisher
+      - id: FireExtinguisher
         weight: 98
-      - !type:EntSelector
-        id: SprayBottleWater #It's just budget cut after budget cut man
+      - id: SprayBottleWater #It's just budget cut after budget cut man
         weight: 2
 
 - type: entity
     children:
     - !type:GroupSelector
       children:
-      - !type:EntSelector
-        id: ClothingUniformJumpsuitOperative
-      - !type:EntSelector
-        id: ClothingUniformJumpskirtOperative
-    - !type:EntSelector
-      id: ClothingBackpackDuffelSyndicate
-    - !type:EntSelector
-      id: CyberPen
-    - !type:EntSelector
-      id: CigPackSyndicate
-    - !type:EntSelector
-      id: ClothingBackpackDuffelSyndicatePyjamaBundle
-    - !type:EntSelector
-      id: ClothingBeltMilitaryWebbing
-    - !type:EntSelector
-      id: ClothingShoesBootsCombatFilled
-    - !type:EntSelector
-      id: ToolboxSyndicateFilled
-    - !type:EntSelector
-      id: BalloonSyn
-    - !type:EntSelector
-      id: WeaponSniperMosin
+      - id: ClothingUniformJumpsuitOperative
+      - id: ClothingUniformJumpskirtOperative
+    - id: ClothingBackpackDuffelSyndicate
+    - id: CyberPen
+    - id: CigPackSyndicate
+    - id: ClothingBackpackDuffelSyndicatePyjamaBundle
+    - id: ClothingBeltMilitaryWebbing
+    - id: ClothingShoesBootsCombatFilled
+    - id: ToolboxSyndicateFilled
+    - id: BalloonSyn
+    - id: WeaponSniperMosin
       weight: 2
 
 - type: entityTable
   id: MaintenanceLockerLoot
   table: !type:AllSelector
     children:
-    - !type:EntSelector
-      id: StrangePill
+    - id: StrangePill
       prob: 0.20
     # Tools
     - !type:NestedSelector
index 193edb069e7752eda30a9ec6bcaff8ed43674e3d..f7e22ef62dabc2e4fe3a8e3f4d82e9264f7f3fa2 100644 (file)
       # Smoker's specialty
       - !type:AllSelector
         children:
-        - !type:EntSelector
-          id: Lighter
-        - !type:EntSelector
-          id: CigCartonBlue
+        - id: Lighter
+        - id: CigCartonBlue
       # Gar glasses
       - !type:GroupSelector
         children:
-        - !type:EntSelector
-          id: ClothingEyesGlassesGar
-        - !type:EntSelector
-          id: ClothingEyesGlassesGarOrange
-        - !type:EntSelector
-          id: ClothingEyesGlassesGarGiga
-      - !type:EntSelector
-        id: Wristwatch
+        - id: ClothingEyesGlassesGar
+        - id: ClothingEyesGlassesGarOrange
+        - id: ClothingEyesGlassesGarGiga
+      - id: Wristwatch
         weight: 0.5
-      - !type:EntSelector
-        id: ClothingHeadHatCake
-      - !type:EntSelector
-        id: ClothingHeadHatSkub
-      - !type:EntSelector
-        id: ClothingHeadHatCone
-      - !type:EntSelector
-        id: ClothingNeckBling
-      - !type:EntSelector
-        id: ClothingHeadHelmetCosmonaut
-      - !type:EntSelector
-        id: ClothingHeadHelmetBasic
-      - !type:EntSelector
-        id: ClothingShoeSlippersDuck
-      - !type:EntSelector
-        id: ClothingUnderSocksBee
-      - !type:EntSelector
-        id: ClothingUnderSocksCoder
-      - !type:EntSelector
-        id: ClothingHeadHatSquid
+      - id: ClothingHeadHatCake
+      - id: ClothingHeadHatSkub
+      - id: ClothingHeadHatCone
+      - id: ClothingNeckBling
+      - id: ClothingHeadHelmetCosmonaut
+      - id: ClothingHeadHelmetBasic
+      - id: ClothingShoeSlippersDuck
+      - id: ClothingUnderSocksBee
+      - id: ClothingUnderSocksCoder
+      - id: ClothingHeadHatSquid
       # Animal Masks
       - !type:GroupSelector
         children:
-        - !type:EntSelector
-          id: ClothingMaskRat
-        - !type:EntSelector
-          id: ClothingMaskFox
-        - !type:EntSelector
-          id: ClothingMaskBee
-        - !type:EntSelector
-          id: ClothingMaskBear
-        - !type:EntSelector
-          id: ClothingMaskRaven
-        - !type:EntSelector
-          id: ClothingMaskJackal
-        - !type:EntSelector
-          id: ClothingMaskBat
-      - !type:EntSelector
-        id: ClothingBeltSuspenders
-      - !type:EntSelector
-        id: ClothingEyesEyepatch
-      - !type:EntSelector
-        id: ClothingEyesGlasses
-      - !type:EntSelector
-        id: ClothingHandsGlovesLatex
-      - !type:EntSelector
-        id: ClothingHandsGlovesFingerless
-      - !type:EntSelector
-        id: ClothingHandsGlovesColorBlack
-      - !type:EntSelector
-        id: ClothingHeadHatBeret
-      - !type:EntSelector
-        id: ClothingHeadHatBowlerHat
-      - !type:EntSelector
-        id: ClothingHeadHatFedoraBrown
+        - id: ClothingMaskRat
+        - id: ClothingMaskFox
+        - id: ClothingMaskBee
+        - id: ClothingMaskBear
+        - id: ClothingMaskRaven
+        - id: ClothingMaskJackal
+        - id: ClothingMaskBat
+      - id: ClothingBeltSuspenders
+      - id: ClothingEyesEyepatch
+      - id: ClothingEyesGlasses
+      - id: ClothingHandsGlovesLatex
+      - id: ClothingHandsGlovesFingerless
+      - id: ClothingHandsGlovesColorBlack
+      - id: ClothingHeadHatBeret
+      - id: ClothingHeadHatBowlerHat
+      - id: ClothingHeadHatFedoraBrown
         weight: 0.5
-      - !type:EntSelector
-        id: ClothingHeadHatFedoraGrey
+      - id: ClothingHeadHatFedoraGrey
         weight: 0.5
-      - !type:EntSelector
-        id: ClothingHeadHatFez
-      - !type:EntSelector
-        id: ClothingHeadHatPaper
-      - !type:EntSelector
-        id: ClothingHeadHatPirate
-      - !type:EntSelector
-        id: ClothingMaskSterile
-      - !type:EntSelector
-        id: ClothingNeckHeadphones
-      - !type:EntSelector
-        id: ClothingNeckTieRed
-      - !type:EntSelector
-        id: ClothingOuterCoatGentle
+      - id: ClothingHeadHatFez
+      - id: ClothingHeadHatPaper
+      - id: ClothingHeadHatPirate
+      - id: ClothingMaskSterile
+      - id: ClothingNeckHeadphones
+      - id: ClothingNeckTieRed
+      - id: ClothingOuterCoatGentle
       - !type:AllSelector
         children:
-        - !type:EntSelector
-          id: ClothingOuterCoatJensen
-        - !type:EntSelector
-          id: ClothingEyesGlassesJensen
-      - !type:EntSelector
-        id: ClothingOuterCoatLab
+        - id: ClothingOuterCoatJensen
+        - id: ClothingEyesGlassesJensen
+      - id: ClothingOuterCoatLab
       - !type:AllSelector
         children:
-        - !type:EntSelector
-          id: ClothingOuterCoatPirate
-        - !type:EntSelector
-          id: ClothingHeadHatPirateTricord
-      - !type:EntSelector
-        id: ClothingHeadHatTophat
-      - !type:EntSelector
-        id: ClothingOuterHoodieBlack
+        - id: ClothingOuterCoatPirate
+        - id: ClothingHeadHatPirateTricord
+      - id: ClothingHeadHatTophat
+      - id: ClothingOuterHoodieBlack
         weight: 0.5
-      - !type:EntSelector
-        id: ClothingOuterHoodieGrey
+      - id: ClothingOuterHoodieGrey
         weight: 0.5
       - !type:GroupSelector
         children:
-        - !type:EntSelector
-          id: ClothingOuterFlannelRed
-        - !type:EntSelector
-          id: ClothingOuterFlannelBlue
-        - !type:EntSelector
-          id: ClothingOuterFlannelGreen
-      - !type:EntSelector
-        id: ClothingOuterVestHazard
-      - !type:EntSelector
-        id: ClothingShoesBootsJack
-      - !type:EntSelector
-        id: ClothingShoesHighheelBoots
-      - !type:EntSelector
-        id: ClothingShoesBootsLaceup
-      - !type:EntSelector
-        id: ClothingShoesLeather
-      - !type:EntSelector
-        id: ClothingShoesBootsSalvage
-      - !type:EntSelector
-        id: ClothingShoesBootsWork
-      - !type:EntSelector
-        id: ClothingShoesTourist
-      - !type:EntSelector
-        id: ClothingUniformJumpsuitLoungewear
-      - !type:EntSelector
-        id: ClothingHeadHatCowboyRed
+        - id: ClothingOuterFlannelRed
+        - id: ClothingOuterFlannelBlue
+        - id: ClothingOuterFlannelGreen
+      - id: ClothingOuterVestHazard
+      - id: ClothingShoesBootsJack
+      - id: ClothingShoesHighheelBoots
+      - id: ClothingShoesBootsLaceup
+      - id: ClothingShoesLeather
+      - id: ClothingShoesBootsSalvage
+      - id: ClothingShoesBootsWork
+      - id: ClothingShoesTourist
+      - id: ClothingUniformJumpsuitLoungewear
+      - id: ClothingHeadHatCowboyRed
     # Uncommon Group
     - !type:GroupSelector
       weight: 23
       children:
-      - !type:EntSelector
-        id: ClothingNeckCloakHerald
-      - !type:EntSelector
-        id: ClothingHeadHelmetTemplar
+      - id: ClothingNeckCloakHerald
+      - id: ClothingHeadHelmetTemplar
       # Cloaks
       - !type:GroupSelector
         children:
-        - !type:EntSelector
-          id: ClothingNeckCloakTrans
-        - !type:EntSelector
-          id: ClothingNeckCloakAdmin
-        - !type:EntSelector
-          id: ClothingNeckCloakMoth
-        - !type:EntSelector
-          id: ClothingNeckCloakVoid
-        - !type:EntSelector
-          id: ClothingNeckCloakGoliathCloak
-        - !type:EntSelector
-          id: ClothingNeckCloakAce
-        - !type:EntSelector
-          id: ClothingNeckCloakAro
-        - !type:EntSelector
-          id: ClothingNeckCloakBi
-        - !type:EntSelector
-          id: ClothingNeckCloakIntersex
-        - !type:EntSelector
-          id: ClothingNeckCloakLesbian
-        - !type:EntSelector
-          id: ClothingNeckCloakGay
-        - !type:EntSelector
-          id: ClothingNeckCloakEnby
-        - !type:EntSelector
-          id: ClothingNeckCloakPan
-      - !type:EntSelector
-        id: ToySkeleton
-      - !type:EntSelector
-        id: Basketball
-      - !type:EntSelector
-        id: Football
-      - !type:EntSelector
-        id: BalloonNT
-      - !type:EntSelector
-        id: BalloonCorgi
-      - !type:EntSelector
-        id: MysteryFigureBox
+        - id: ClothingNeckCloakTrans
+        - id: ClothingNeckCloakAdmin
+        - id: ClothingNeckCloakMoth
+        - id: ClothingNeckCloakVoid
+        - id: ClothingNeckCloakGoliathCloak
+        - id: ClothingNeckCloakAce
+        - id: ClothingNeckCloakAro
+        - id: ClothingNeckCloakBi
+        - id: ClothingNeckCloakIntersex
+        - id: ClothingNeckCloakLesbian
+        - id: ClothingNeckCloakGay
+        - id: ClothingNeckCloakEnby
+        - id: ClothingNeckCloakPan
+      - id: ToySkeleton
+      - id: Basketball
+      - id: Football
+      - id: BalloonNT
+      - id: BalloonCorgi
+      - id: MysteryFigureBox
       # Cult
       - !type:AllSelector
         children:
-        - !type:EntSelector
-          id: ClothingOuterRobesCult
-        - !type:EntSelector
-          id: ClothingShoesCult
-      - !type:EntSelector
-        id: ClothingHandsGlovesMercFingerless
-      - !type:EntSelector
-        id: ClothingHandsGlovesNitrile
-      - !type:EntSelector
-        id: ClothingHandsGlovesPowerglove
-      - !type:EntSelector
-        id: ClothingHeadHatAnimalHeadslime
-      - !type:EntSelector
-        id: ClothingHeadHatBeretMerc
-      - !type:EntSelector
-        id: ClothingHeadHatOutlawHat
-      - !type:EntSelector
-        id: ClothingHeadHatUshanka
-      - !type:EntSelector
-        id: ClothingHeadHatBunny
-      - !type:EntSelector
-        id: ClothingMaskNeckGaiter
-      - !type:EntSelector
-        id: ClothingNeckScarfStripedZebra
-      - !type:EntSelector
-        id: ClothingOuterGhostSheet
-      - !type:EntSelector
-        id: ClothingUniformJumpsuitAncient
-      - !type:EntSelector
-        id: ClothingUniformJumpsuitPirate
-      - !type:EntSelector
-        id: ClothingShoesBootsCowboyFancy
-      - !type:EntSelector
-        id: ClothingHeadHatCowboyBountyHunter
+        - id: ClothingOuterRobesCult
+        - id: ClothingShoesCult
+      - id: ClothingHandsGlovesMercFingerless
+      - id: ClothingHandsGlovesNitrile
+      - id: ClothingHandsGlovesPowerglove
+      - id: ClothingHeadHatAnimalHeadslime
+      - id: ClothingHeadHatBeretMerc
+      - id: ClothingHeadHatOutlawHat
+      - id: ClothingHeadHatUshanka
+      - id: ClothingHeadHatBunny
+      - id: ClothingMaskNeckGaiter
+      - id: ClothingNeckScarfStripedZebra
+      - id: ClothingOuterGhostSheet
+      - id: ClothingUniformJumpsuitAncient
+      - id: ClothingUniformJumpsuitPirate
+      - id: ClothingShoesBootsCowboyFancy
+      - id: ClothingHeadHatCowboyBountyHunter
       # Pins
       - !type:GroupSelector
         children:
-        - !type:EntSelector
-          id: ClothingNeckLGBTPin
-        - !type:EntSelector
-          id: ClothingNeckAromanticPin
-        - !type:EntSelector
-          id: ClothingNeckAsexualPin
-        - !type:EntSelector
-          id: ClothingNeckBisexualPin
-        - !type:EntSelector
-          id: ClothingNeckIntersexPin
-        - !type:EntSelector
-          id: ClothingNeckLesbianPin
-        - !type:EntSelector
-          id: ClothingNeckNonBinaryPin
-        - !type:EntSelector
-          id: ClothingNeckPansexualPin
-        - !type:EntSelector
-          id: ClothingNeckTransPin
-        - !type:EntSelector
-          id: ClothingNeckAutismPin
-        - !type:EntSelector
-          id: ClothingNeckGoldAutismPin
+        - id: ClothingNeckLGBTPin
+        - id: ClothingNeckAromanticPin
+        - id: ClothingNeckAsexualPin
+        - id: ClothingNeckBisexualPin
+        - id: ClothingNeckIntersexPin
+        - id: ClothingNeckLesbianPin
+        - id: ClothingNeckNonBinaryPin
+        - id: ClothingNeckPansexualPin
+        - id: ClothingNeckTransPin
+        - id: ClothingNeckAutismPin
+        - id: ClothingNeckGoldAutismPin
     # Rare Group
     - !type:GroupSelector
       weight: 2
       children:
-      - !type:EntSelector
-        id: Skub
-      - !type:EntSelector
-        id: PonderingOrb
-      - !type:EntSelector
-        id: CluwneHorn
-      - !type:EntSelector
-        id: ClothingShoesSkates
-      - !type:EntSelector
-        id: DrinkMugDog
-      - !type:EntSelector
-        id: CigarGold
-      - !type:EntSelector
-        id: ClothingUniformJumpsuitFamilyGuy
-      - !type:EntSelector
-        id: WristwatchGold
+      - id: Skub
+      - id: PonderingOrb
+      - id: CluwneHorn
+      - id: ClothingShoesSkates
+      - id: DrinkMugDog
+      - id: CigarGold
+      - id: ClothingUniformJumpsuitFamilyGuy
+      - id: WristwatchGold
 
 - type: entity
   name: Maint Loot Spawner
     - !type:GroupSelector
       weight: 75
       children:
-      - !type:EntSelector
-        id: FlashlightLantern
-      - !type:EntSelector
-        id: ToolboxEmergencyFilled
+      - id: FlashlightLantern
+      - id: ToolboxEmergencyFilled
       - !type:GroupSelector
         children:
-        - !type:EntSelector
-          id: OxygenTankFilled
-        - !type:EntSelector
-          id: DoubleEmergencyOxygenTankFilled
+        - id: OxygenTankFilled
+        - id: DoubleEmergencyOxygenTankFilled
       - !type:GroupSelector
         children:
-        - !type:EntSelector
-          id: NitrogenTankFilled
-        - !type:EntSelector
-          id: DoubleEmergencyNitrogenTankFilled
-      - !type:EntSelector
-        id: EmergencyFunnyOxygenTankFilled
+        - id: NitrogenTankFilled
+        - id: DoubleEmergencyNitrogenTankFilled
+      - id: EmergencyFunnyOxygenTankFilled
         weight: 0.5
       - !type:GroupSelector
         weight: 3
         children:
-        - !type:EntSelector
-          id: SheetSteel10
-        - !type:EntSelector
-          id: SheetPlastic10
-        - !type:EntSelector
-          id: SheetGlass10
-        - !type:EntSelector
-          id: PartRodMetal10
-        - !type:EntSelector
-          id: MaterialCardboard10
+        - id: SheetSteel10
+        - id: SheetPlastic10
+        - id: SheetGlass10
+        - id: PartRodMetal10
+        - id: MaterialCardboard10
           weight: 0.25
-        - !type:EntSelector
-          id: MaterialCloth10
+        - id: MaterialCloth10
           weight: 0.25
-        - !type:EntSelector
-          id: MaterialWoodPlank10
+        - id: MaterialWoodPlank10
           weight: 0.25
-      - !type:EntSelector
-        id: Plunger
-      - !type:EntSelector
-        id: PowerCellMedium
-      - !type:EntSelector
-        id: PowerCellSmall
-      - !type:EntSelector
-        id: Soap
-      - !type:EntSelector
-        id: Wirecutter
-      - !type:EntSelector
-        id: Screwdriver
-      - !type:EntSelector
-        id: Wrench
-      - !type:EntSelector
-        id: Crowbar
-      - !type:EntSelector
-        id: Multitool
-      - !type:EntSelector
-        id: Shovel
-      - !type:EntSelector
-        id: Welder
-      - !type:EntSelector
-        id: GasAnalyzer
-      - !type:EntSelector
-        id: SprayPainter
-      - !type:EntSelector
-        id: Flare
-      - !type:EntSelector
-        id: Beaker
-      - !type:EntSelector
-        id: ClothingMaskGas
-      - !type:EntSelector
-        id: ClothingMaskBreath
-      - !type:EntSelector
-        id: DoorElectronics
-      - !type:EntSelector
-        id: APCElectronics
-      - !type:EntSelector
-        id: InflatableWallStack5
-      - !type:EntSelector
-        id: CableHVStack10
-      - !type:EntSelector
-        id: CableMVStack10
-      - !type:EntSelector
-        id: CableApcStack10
+      - id: Plunger
+      - id: PowerCellMedium
+      - id: PowerCellSmall
+      - id: Soap
+      - id: Wirecutter
+      - id: Screwdriver
+      - id: Wrench
+      - id: Crowbar
+      - id: Multitool
+      - id: Shovel
+      - id: Welder
+      - id: GasAnalyzer
+      - id: SprayPainter
+      - id: Flare
+      - id: Beaker
+      - id: ClothingMaskGas
+      - id: ClothingMaskBreath
+      - id: DoorElectronics
+      - id: APCElectronics
+      - id: InflatableWallStack5
+      - id: CableHVStack10
+      - id: CableMVStack10
+      - id: CableApcStack10
       - !type:GroupSelector
         children:
-        - !type:EntSelector
-          id: ClothingHandsGlovesColorYellowBudget
+        - id: ClothingHandsGlovesColorYellowBudget
           weight: 5
-        - !type:EntSelector
-          id: ClothingHandsGlovesFingerlessInsulated
+        - id: ClothingHandsGlovesFingerlessInsulated
           weight: 0.5
-        - !type:EntSelector
-          id: ClothingHandsGlovesColorYellow
+        - id: ClothingHandsGlovesColorYellow
           weight: 1
       # Uncommon Group
     - !type:GroupSelector
       weight: 23
       children:
-      - !type:EntSelector
-        id: ClothingHeadHatCone
+      - id: ClothingHeadHatCone
         weight: 2
-      - !type:EntSelector
-        id: BookRandomStory
+      - id: BookRandomStory
         weight: 0.25
-      - !type:EntSelector
-        id: ToolboxElectricalFilled
-      - !type:EntSelector
-        id: ToolboxMechanicalFilled
-      - !type:EntSelector
-        id: ClothingBeltUtility
-      - !type:EntSelector
-        id: ToolboxArtisticFilled
-      - !type:EntSelector
-        id: GeigerCounter
-      - !type:EntSelector
-        id: trayScanner
-      - !type:EntSelector
-        id: HandheldGPSBasic
-      - !type:EntSelector
-        id: HandLabeler
-      - !type:EntSelector
-        id: GlowstickBase
-      - !type:EntSelector
-        id: Bucket
-      - !type:EntSelector
-        id: RadioHandheld
-      - !type:EntSelector
-        id: AppraisalTool
-      - !type:EntSelector
-        id: ModularReceiver
-      - !type:EntSelector
-        id: WeaponFlareGun
-      - !type:EntSelector
-        id: BarberScissors
+      - id: ToolboxElectricalFilled
+      - id: ToolboxMechanicalFilled
+      - id: ClothingBeltUtility
+      - id: ToolboxArtisticFilled
+      - id: GeigerCounter
+      - id: trayScanner
+      - id: HandheldGPSBasic
+      - id: HandLabeler
+      - id: GlowstickBase
+      - id: Bucket
+      - id: RadioHandheld
+      - id: AppraisalTool
+      - id: ModularReceiver
+      - id: WeaponFlareGun
+      - id: BarberScissors
       - !type:GroupSelector
         children:
-        - !type:EntSelector
-          id: DrinkSpaceGlue
-        - !type:EntSelector
-          id: DrinkSpaceLube
+        - id: DrinkSpaceGlue
+        - id: DrinkSpaceLube
       # Rare Group
     - !type:GroupSelector
       weight: 2
       children:
-      - !type:EntSelector
-        id: LanternFlash
-      - !type:EntSelector
-        id: PowerCellHigh
-      - !type:EntSelector
-        id: NetProbeCartridge
-      - !type:EntSelector
-        id: WelderIndustrial
-      - !type:EntSelector
-        id: SheetPlasteel10
-      - !type:EntSelector
-        id: ClothingMaskGasExplorer
-      - !type:EntSelector
-        id: TechnologyDisk
-      - !type:EntSelector
-        id: ResearchDisk5000
-      - !type:EntSelector
-        id: PetCarrier
-      - !type:EntSelector
-        id: DrinkMopwataBottleRandom
-      - !type:EntSelector
-        id: LidSalami
+      - id: LanternFlash
+      - id: PowerCellHigh
+      - id: NetProbeCartridge
+      - id: WelderIndustrial
+      - id: SheetPlasteel10
+      - id: ClothingMaskGasExplorer
+      - id: TechnologyDisk
+      - id: ResearchDisk5000
+      - id: PetCarrier
+      - id: DrinkMopwataBottleRandom
+      - id: LidSalami
         weight: 0.05
 
 - type: entity
     - !type:GroupSelector
       weight: 95
       children:
-      - !type:EntSelector
-        id: Machete
-      - !type:EntSelector
-        id: BaseBallBat
-      - !type:EntSelector
-        id: CombatKnife
-      - !type:EntSelector
-        id: Spear
-      - !type:EntSelector
-        id: RifleStock
-      - !type:EntSelector
-        id: ModularReceiver
-      - !type:EntSelector
-        id: HydroponicsToolScythe
+      - id: Machete
+      - id: BaseBallBat
+      - id: CombatKnife
+      - id: Spear
+      - id: RifleStock
+      - id: ModularReceiver
+      - id: HydroponicsToolScythe
     # Rare Group
     - !type:GroupSelector
       weight: 5
       children:
-      - !type:EntSelector
-        id: Lighter
-      - !type:EntSelector
-        id: Matchbox
-      - !type:EntSelector
-        id: ClothingEyesBlindfold
-      - !type:EntSelector
-        id: ClothingMaskMuzzle
-      - !type:EntSelector
-        id: ClothingMaskGasSecurity
-      - !type:EntSelector
-        id: ShardGlass
+      - id: Lighter
+      - id: Matchbox
+      - id: ClothingEyesBlindfold
+      - id: ClothingMaskMuzzle
+      - id: ClothingMaskGasSecurity
+      - id: ShardGlass
         weight: 2
-      - !type:EntSelector
-        id: Syringe
-      - !type:EntSelector
-        id: Mousetrap
+      - id: Syringe
+      - id: Mousetrap
       - !type:GroupSelector
         weight: 2
         children:
-        - !type:EntSelector
-          id: Brutepack1
-        - !type:EntSelector
-          id: Ointment1
-        - !type:EntSelector
-          id: Gauze1
-      - !type:EntSelector
-        id: Bola
-      - !type:EntSelector
-        id: SurvivalKnife
-      - !type:EntSelector
-        id: ScalpelShiv
-      - !type:EntSelector
-        id: Shiv
-      - !type:EntSelector
-        id: SawImprov
-      - !type:EntSelector
-        id: HydroponicsToolMiniHoe
+        - id: Brutepack1
+        - id: Ointment1
+        - id: Gauze1
+      - id: Bola
+      - id: SurvivalKnife
+      - id: ScalpelShiv
+      - id: Shiv
+      - id: SawImprov
+      - id: HydroponicsToolMiniHoe
 
 - type: entity
   name: Maint Loot Spawner