From 0c9752027623a22be7367b453e2a8e82fc68c03c Mon Sep 17 00:00:00 2001 From: Pieter-Jan Briers Date: Tue, 9 Sep 2025 18:17:56 +0200 Subject: [PATCH] Fix usages of TryIndex() (#39124) * Fix usages of TryIndex() Most usages of TryIndex() were using it incorrectly. Checking whether prototype IDs specified in prototypes actually existed before using them. This is not appropriate as it's just hiding bugs that should be getting caught by the YAML linter and other tools. (#39115) This then resulted in TryIndex() getting modified to log errors (https://github.com/space-wizards/RobustToolbox/commit/94f98073b07bd3fa3133ae6799b34d90f46f467e), which is incorrect as it causes false-positive errors in proper uses of the API: external data validation. (#39098) This commit goes through and checks every call site of TryIndex() to see whether they were correct. Most call sites were replaced with the new Resolve(), which is suitable for these "defensive programming" use cases. Fixes #39115 Breaking change: while doing this I noticed IdCardComponent and related systems were erroneously using ProtoId for job prototypes. This has been corrected. * fix tests --------- Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> --- .../Access/UI/AccessOverriderWindow.xaml.cs | 2 +- .../UI/GroupedAccessLevelChecklist.xaml.cs | 6 ++--- .../UI/IdCardConsoleBoundUserInterface.cs | 3 ++- .../Access/UI/IdCardConsoleWindow.xaml.cs | 2 +- .../UI/BanPanel/BanPanel.xaml.cs | 5 +++-- Content.Client/Atmos/AlignAtmosPipeLayers.cs | 2 +- .../Jukebox/JukeboxBoundUserInterface.cs | 2 +- Content.Client/BarSign/BarSignSystem.cs | 2 +- .../BarSign/Ui/BarSignBoundUserInterface.cs | 2 +- Content.Client/Cargo/UI/BountyEntry.xaml.cs | 2 +- .../Cargo/UI/BountyHistoryEntry.xaml.cs | 2 +- .../TypingIndicatorVisualizerSystem.cs | 2 +- .../UI/ChameleonBoundUserInterface.cs | 2 +- .../Clothing/UI/ChameleonMenu.xaml.cs | 2 +- .../Construction/ConstructionSystem.cs | 17 ++++++-------- .../UI/ConstructionMenuPresenter.cs | 2 +- Content.Client/Damage/DamageVisualsSystem.cs | 2 +- Content.Client/Doors/DoorSystem.cs | 2 +- .../Ghost/GhostRoleRadioMenu.xaml.cs | 2 +- .../Guidebook/DocumentParsingManager.cs | 2 +- Content.Client/Implants/ImplanterSystem.cs | 2 +- .../UI/ChameleonControllerMenu.xaml.cs | 2 +- .../Implants/UI/ImplanterStatusControl.cs | 2 +- Content.Client/Lathe/UI/LatheMenu.xaml.cs | 4 ++-- Content.Client/Lobby/LobbyUIController.cs | 8 +++---- .../Lobby/UI/HumanoidProfileEditor.xaml.cs | 6 ++--- .../UI/Loadouts/LoadoutContainer.xaml.cs | 2 +- .../UI/Loadouts/LoadoutGroupContainer.xaml.cs | 22 +++++++++---------- .../Lobby/UI/Loadouts/LoadoutWindow.xaml.cs | 2 +- .../Overlays/EntityHealthBarOverlay.cs | 2 +- .../Overlays/ShowCriminalRecordIconsSystem.cs | 2 +- .../Overlays/ShowHealthIconsSystem.cs | 4 ++-- Content.Client/Overlays/ShowJobIconsSystem.cs | 2 +- .../Overlays/ShowMindShieldIconsSystem.cs | 4 ++-- Content.Client/Overlays/StencilOverlay.cs | 2 +- .../RCD/RCDMenuBoundUserInterface.cs | 6 +++-- Content.Client/Radio/Ui/IntercomMenu.xaml.cs | 2 +- .../Revolutionary/RevolutionarySystem.cs | 4 ++-- .../StationAiCustomizationMenu.xaml.cs | 4 ++-- .../SprayPainter/SprayPainterSystem.cs | 2 +- .../EntityStorageVisualizerSystem.cs | 2 +- .../Store/Ui/StoreWithdrawWindow.xaml.cs | 2 +- .../UI/VendingMachineMenu.xaml.cs | 2 +- .../Tests/Commands/SuicideCommandTests.cs | 4 ++-- .../Tests/ContrabandTest.cs | 7 ++++-- .../Tests/Lathe/LatheTest.cs | 8 +++++-- .../Tests/Minds/MindTests.cs | 5 +---- .../Tests/PostMapInitTest.cs | 5 ++--- .../Access/Systems/AgentIDCardSystem.cs | 4 ++-- .../Access/Systems/IdCardConsoleSystem.cs | 6 ++--- .../Access/Systems/PresetIdCardSystem.cs | 2 +- .../Commands/ExplosionCommand.cs | 2 +- .../EntitySystems/SpeakOnUIClosedSystem.cs | 2 +- .../Anomaly/Effects/InnerBodyAnomalySystem.cs | 4 ++-- Content.Server/Audio/Jukebox/JukeboxSystem.cs | 2 +- .../Cargo/Systems/CargoSystem.Bounty.cs | 6 ++--- .../Cargo/Systems/CargoSystem.Orders.cs | 4 ++-- Content.Server/Chat/Systems/ChatSystem.cs | 2 +- .../TransformableContainerSystem.cs | 2 +- Content.Server/Cloning/CloningSystem.cs | 4 ++-- .../Construction/ConstructionSystem.Guided.cs | 2 +- .../Damage/ForceSay/DamageForceSaySystem.cs | 2 +- .../Damage/Systems/ExaminableDamageSystem.cs | 2 +- Content.Server/Delivery/DeliverySystem.cs | 2 +- .../Behaviors/WeightedSpawnEntityBehavior.cs | 2 +- .../EntityEffects/EntityEffectSystem.cs | 4 +--- .../Rules/AntagLoadProfileRuleSystem.cs | 2 +- .../PuddleMessVariationPassSystem.cs | 2 +- Content.Server/Ghost/Roles/GhostRoleSystem.cs | 2 +- Content.Server/Ghost/SpookySpeakerSystem.cs | 2 +- .../Implants/ChameleonControllerSystem.cs | 6 ++--- .../Kitchen/EntitySystems/MicrowaveSystem.cs | 2 +- Content.Server/Lathe/LatheSystem.cs | 2 +- .../NameIdentifier/NameIdentifierSystem.cs | 4 ++-- Content.Server/Parallax/BiomeSystem.cs | 2 +- .../JobWhitelist/JobWhitelistManager.cs | 2 +- .../PlayTimeTrackingSystem.cs | 2 +- .../Polymorph/Systems/PolymorphSystem.cs | 4 ++-- .../Polymorph/Toolshed/PolymorphCommand.cs | 3 +-- .../Procedural/DungeonJob/DungeonJob.Biome.cs | 2 +- .../DungeonJob/DungeonJob.MiddleConnection.cs | 2 +- .../Procedural/DungeonJob/DungeonJob.Ore.cs | 2 +- .../Systems/RadiationProtectionSystem.cs | 2 +- .../Radio/EntitySystems/RadioSystem.cs | 2 +- Content.Server/Roles/RoleSystem.cs | 2 +- .../Systems/ShuttleSystem.GridFill.cs | 4 ++-- .../Borgs/BorgSwitchableTypeSystem.cs | 2 +- .../ContainerSpawnPointSystem.cs | 2 +- Content.Server/Speech/EmotesMenuSystem.cs | 2 +- Content.Server/Spreader/SpreaderSystem.cs | 2 +- .../Systems/StationJobsSystem.Roundstart.cs | 2 +- .../Station/Systems/StationSpawningSystem.cs | 6 ++--- .../StationEvents/EventManagerSystem.cs | 4 ++-- .../StationEvents/Events/GreytideVirusRule.cs | 2 +- .../Systems/SurveillanceCameraRouterSystem.cs | 2 +- .../Systems/SurveillanceCameraSystem.cs | 2 +- Content.Server/Telephone/TelephoneSystem.cs | 2 +- Content.Server/Traitor/Uplink/UplinkSystem.cs | 2 +- Content.Server/Traits/TraitSystem.cs | 4 ++-- .../Trigger/Systems/SpeakOnTriggerSystem.cs | 2 +- Content.Server/Wires/WiresSystem.cs | 2 +- Content.Server/Zombies/ZombieSystem.cs | 2 +- .../Access/Components/AccessComponent.cs | 2 +- .../Access/Components/IdCardComponent.cs | 2 +- .../Components/IdCardConsoleComponent.cs | 9 ++++---- .../Access/Systems/SharedAccessSystem.cs | 4 ++-- .../SharedAtmosPipeLayersSystem.cs | 4 ++-- Content.Shared/BarSign/BarSignSystem.cs | 2 +- .../Body/Systems/SharedBloodstreamSystem.cs | 2 +- .../Cargo/Prototypes/CargoProductPrototype.cs | 4 ++-- .../SharedChameleonClothingSystem.cs | 2 +- Content.Shared/Clothing/LoadoutSystem.cs | 10 ++++----- .../SharedComponentTableSystem.cs | 2 +- .../Construction/MachinePartSystem.cs | 2 +- .../Containers/ContainerCompSystem.cs | 4 ++-- .../Damage/Systems/DamageableSystem.cs | 4 ++-- .../Humanoid/Markings/MarkingManager.cs | 4 ++-- .../SharedHumanoidAppearanceSystem.cs | 4 ++-- .../UnpoweredFlashlightSystem.cs | 2 +- .../EntitySystems/FoodSequenceSystem.cs | 7 +++--- .../Nutrition/EntitySystems/HungerSystem.cs | 6 ++--- .../Nutrition/EntitySystems/ThirstSystem.cs | 6 ++--- .../FoodMetamorphRules/FoodMetamorphRule.cs | 6 ++--- .../Preferences/HumanoidCharacterProfile.cs | 4 ++-- Content.Shared/RCD/Systems/RCDSystem.cs | 4 ++-- .../DepartmentTimeRequirement.cs | 2 +- Content.Shared/Roles/Jobs/SharedJobSystem.cs | 2 +- Content.Shared/Roles/SharedRoleSystem.cs | 2 +- .../Borgs/SharedBorgSwitchableTypeSystem.cs | 2 +- .../SharedStationAiSystem.Customization.cs | 6 ++--- .../SprayPainter/SharedSprayPainterSystem.cs | 2 +- .../Station/SharedStationSpawningSystem.cs | 6 ++--- .../StatusEffectNew/StatusEffectsSystem.cs | 2 +- .../Storage/EntitySystems/DumpableSystem.cs | 2 +- .../EntitySystems/SharedStorageSystem.cs | 4 ++-- .../EntitySystems/StoryGeneratorSystem.cs | 4 ++-- 136 files changed, 229 insertions(+), 228 deletions(-) diff --git a/Content.Client/Access/UI/AccessOverriderWindow.xaml.cs b/Content.Client/Access/UI/AccessOverriderWindow.xaml.cs index 092a0071fb7..8e527d7343a 100644 --- a/Content.Client/Access/UI/AccessOverriderWindow.xaml.cs +++ b/Content.Client/Access/UI/AccessOverriderWindow.xaml.cs @@ -29,7 +29,7 @@ namespace Content.Client.Access.UI foreach (var access in accessLevels) { - if (!protoManager.TryIndex(access, out var accessLevel)) + if (!protoManager.Resolve(access, out var accessLevel)) { continue; } diff --git a/Content.Client/Access/UI/GroupedAccessLevelChecklist.xaml.cs b/Content.Client/Access/UI/GroupedAccessLevelChecklist.xaml.cs index 4f07c310092..41d5a84654f 100644 --- a/Content.Client/Access/UI/GroupedAccessLevelChecklist.xaml.cs +++ b/Content.Client/Access/UI/GroupedAccessLevelChecklist.xaml.cs @@ -57,7 +57,7 @@ public sealed partial class GroupedAccessLevelChecklist : BoxContainer foreach (var accessGroup in _accessGroups) { - if (!_protoManager.TryIndex(accessGroup, out var accessGroupProto)) + if (!_protoManager.Resolve(accessGroup, out var accessGroupProto)) continue; _groupedAccessLevels.Add(accessGroupProto, new()); @@ -65,13 +65,13 @@ public sealed partial class GroupedAccessLevelChecklist : BoxContainer // Ensure that the 'general' access group is added to handle // misc. access levels that aren't associated with any group - if (_protoManager.TryIndex(GeneralAccessGroup, out var generalAccessProto)) + if (_protoManager.Resolve(GeneralAccessGroup, out var generalAccessProto)) _groupedAccessLevels.TryAdd(generalAccessProto, new()); // Assign known access levels with their associated groups foreach (var accessLevel in _accessLevels) { - if (!_protoManager.TryIndex(accessLevel, out var accessLevelProto)) + if (!_protoManager.Resolve(accessLevel, out var accessLevelProto)) continue; var assigned = false; diff --git a/Content.Client/Access/UI/IdCardConsoleBoundUserInterface.cs b/Content.Client/Access/UI/IdCardConsoleBoundUserInterface.cs index f3a37f054e5..801140f5172 100644 --- a/Content.Client/Access/UI/IdCardConsoleBoundUserInterface.cs +++ b/Content.Client/Access/UI/IdCardConsoleBoundUserInterface.cs @@ -4,6 +4,7 @@ using Content.Shared.Access.Systems; using Content.Shared.CCVar; using Content.Shared.Containers.ItemSlots; using Content.Shared.CrewManifest; +using Content.Shared.Roles; using Robust.Shared.Configuration; using Robust.Shared.Prototypes; using static Content.Shared.Access.Components.IdCardConsoleComponent; @@ -74,7 +75,7 @@ namespace Content.Client.Access.UI _window?.UpdateState(castState); } - public void SubmitData(string newFullName, string newJobTitle, List> newAccessList, string newJobPrototype) + public void SubmitData(string newFullName, string newJobTitle, List> newAccessList, ProtoId newJobPrototype) { if (newFullName.Length > _maxNameLength) newFullName = newFullName[.._maxNameLength]; diff --git a/Content.Client/Access/UI/IdCardConsoleWindow.xaml.cs b/Content.Client/Access/UI/IdCardConsoleWindow.xaml.cs index 48ae1b0ced5..202653f700e 100644 --- a/Content.Client/Access/UI/IdCardConsoleWindow.xaml.cs +++ b/Content.Client/Access/UI/IdCardConsoleWindow.xaml.cs @@ -123,7 +123,7 @@ namespace Content.Client.Access.UI foreach (var group in job.AccessGroups) { - if (!_prototypeManager.TryIndex(group, out AccessGroupPrototype? groupPrototype)) + if (!_prototypeManager.Resolve(group, out AccessGroupPrototype? groupPrototype)) { continue; } diff --git a/Content.Client/Administration/UI/BanPanel/BanPanel.xaml.cs b/Content.Client/Administration/UI/BanPanel/BanPanel.xaml.cs index 46090a6f3d0..c7aed30c1cd 100644 --- a/Content.Client/Administration/UI/BanPanel/BanPanel.xaml.cs +++ b/Content.Client/Administration/UI/BanPanel/BanPanel.xaml.cs @@ -316,8 +316,9 @@ public sealed partial class BanPanel : DefaultWindow }; // This is adding the icon before the role name - // Yeah, this is sus, but having to split the functions up and stuff is worse imo. - if (_protoMan.TryIndex(role, out var jobPrototype) && _protoMan.TryIndex(jobPrototype.Icon, out var iconProto)) + // TODO: This should not be using raw strings for prototypes as it means it won't be validated at all. + // I know the ban manager is doing the same thing, but that should not leak into UI code. + if (_protoMan.TryIndex(role, out var jobPrototype) && _protoMan.Resolve(jobPrototype.Icon, out var iconProto)) { var jobIconTexture = new TextureRect { diff --git a/Content.Client/Atmos/AlignAtmosPipeLayers.cs b/Content.Client/Atmos/AlignAtmosPipeLayers.cs index 1bf3310a6ce..51a6ce0c026 100644 --- a/Content.Client/Atmos/AlignAtmosPipeLayers.cs +++ b/Content.Client/Atmos/AlignAtmosPipeLayers.cs @@ -134,7 +134,7 @@ public sealed class AlignAtmosPipeLayers : SnapgridCenter var newProtoId = altPrototypes[(int)layer]; - if (!_protoManager.TryIndex(newProtoId, out var newProto)) + if (!_protoManager.Resolve(newProtoId, out var newProto)) return; if (newProto.Type != ConstructionType.Structure) diff --git a/Content.Client/Audio/Jukebox/JukeboxBoundUserInterface.cs b/Content.Client/Audio/Jukebox/JukeboxBoundUserInterface.cs index 865dfc478d0..510b9d3def3 100644 --- a/Content.Client/Audio/Jukebox/JukeboxBoundUserInterface.cs +++ b/Content.Client/Audio/Jukebox/JukeboxBoundUserInterface.cs @@ -58,7 +58,7 @@ public sealed class JukeboxBoundUserInterface : BoundUserInterface _menu.SetAudioStream(jukebox.AudioStream); - if (_protoManager.TryIndex(jukebox.SelectedSongId, out var songProto)) + if (_protoManager.Resolve(jukebox.SelectedSongId, out var songProto)) { var length = EntMan.System().GetAudioLength(songProto.Path.Path.ToString()); _menu.SetSelectedSong(songProto.Name, (float) length.TotalSeconds); diff --git a/Content.Client/BarSign/BarSignSystem.cs b/Content.Client/BarSign/BarSignSystem.cs index 02e33861b74..1ea99864a1a 100644 --- a/Content.Client/BarSign/BarSignSystem.cs +++ b/Content.Client/BarSign/BarSignSystem.cs @@ -39,7 +39,7 @@ public sealed class BarSignSystem : VisualizerSystem if (powered && sign.Current != null - && _prototypeManager.TryIndex(sign.Current, out var proto)) + && _prototypeManager.Resolve(sign.Current, out var proto)) { SpriteSystem.LayerSetSprite((id, sprite), 0, proto.Icon); sprite.LayerSetShader(0, "unshaded"); diff --git a/Content.Client/BarSign/Ui/BarSignBoundUserInterface.cs b/Content.Client/BarSign/Ui/BarSignBoundUserInterface.cs index 1d1280b2f35..fe07f0f1d14 100644 --- a/Content.Client/BarSign/Ui/BarSignBoundUserInterface.cs +++ b/Content.Client/BarSign/Ui/BarSignBoundUserInterface.cs @@ -35,7 +35,7 @@ public sealed class BarSignBoundUserInterface(EntityUid owner, Enum uiKey) : Bou public void Update(ProtoId? sign) { - if (_prototype.TryIndex(sign, out var signPrototype)) + if (_prototype.Resolve(sign, out var signPrototype)) _menu?.UpdateState(signPrototype); } diff --git a/Content.Client/Cargo/UI/BountyEntry.xaml.cs b/Content.Client/Cargo/UI/BountyEntry.xaml.cs index 027d7b3e801..d813f70ff4d 100644 --- a/Content.Client/Cargo/UI/BountyEntry.xaml.cs +++ b/Content.Client/Cargo/UI/BountyEntry.xaml.cs @@ -29,7 +29,7 @@ public sealed partial class BountyEntry : BoxContainer UntilNextSkip = untilNextSkip; - if (!_prototype.TryIndex(bounty.Bounty, out var bountyPrototype)) + if (!_prototype.Resolve(bounty.Bounty, out var bountyPrototype)) return; var items = new List(); diff --git a/Content.Client/Cargo/UI/BountyHistoryEntry.xaml.cs b/Content.Client/Cargo/UI/BountyHistoryEntry.xaml.cs index 54804be641c..98658e5f0a5 100644 --- a/Content.Client/Cargo/UI/BountyHistoryEntry.xaml.cs +++ b/Content.Client/Cargo/UI/BountyHistoryEntry.xaml.cs @@ -19,7 +19,7 @@ public sealed partial class BountyHistoryEntry : BoxContainer RobustXamlLoader.Load(this); IoCManager.InjectDependencies(this); - if (!_prototype.TryIndex(bounty.Bounty, out var bountyPrototype)) + if (!_prototype.Resolve(bounty.Bounty, out var bountyPrototype)) return; var items = new List(); diff --git a/Content.Client/Chat/TypingIndicator/TypingIndicatorVisualizerSystem.cs b/Content.Client/Chat/TypingIndicator/TypingIndicatorVisualizerSystem.cs index c4b0c8f282b..e1197d4ac4a 100644 --- a/Content.Client/Chat/TypingIndicator/TypingIndicatorVisualizerSystem.cs +++ b/Content.Client/Chat/TypingIndicator/TypingIndicatorVisualizerSystem.cs @@ -27,7 +27,7 @@ public sealed class TypingIndicatorVisualizerSystem : VisualizerSystem(); foreach (var target in targets) { - if (string.IsNullOrEmpty(target) || !_proto.TryIndex(target, out EntityPrototype? proto)) + if (string.IsNullOrEmpty(target) || !_proto.Resolve(target, out EntityPrototype? proto)) continue; if (!proto.TryGetComponent(out TagComponent? tag, EntMan.ComponentFactory) || !_tag.HasTag(tag, st.RequiredTag)) diff --git a/Content.Client/Clothing/UI/ChameleonMenu.xaml.cs b/Content.Client/Clothing/UI/ChameleonMenu.xaml.cs index c6dce107767..fb4447bdf98 100644 --- a/Content.Client/Clothing/UI/ChameleonMenu.xaml.cs +++ b/Content.Client/Clothing/UI/ChameleonMenu.xaml.cs @@ -54,7 +54,7 @@ public sealed partial class ChameleonMenu : DefaultWindow foreach (var id in _possibleIds) { - if (!_prototypeManager.TryIndex(id, out EntityPrototype? proto)) + if (!_prototypeManager.Resolve(id, out EntityPrototype? proto)) continue; var lowId = id.Id.ToLowerInvariant(); diff --git a/Content.Client/Construction/ConstructionSystem.cs b/Content.Client/Construction/ConstructionSystem.cs index 0e7557724fd..d693f4ac47c 100644 --- a/Content.Client/Construction/ConstructionSystem.cs +++ b/Content.Client/Construction/ConstructionSystem.cs @@ -80,7 +80,7 @@ namespace Content.Client.Construction { foreach (var constructionProto in PrototypeManager.EnumeratePrototypes()) { - if (!PrototypeManager.TryIndex(constructionProto.Graph, out var graphProto)) + if (!PrototypeManager.Resolve(constructionProto.Graph, out var graphProto)) continue; if (constructionProto.TargetNode is not { } targetNodeId) @@ -121,17 +121,14 @@ namespace Content.Client.Construction // If we got the id of the prototype, we exit the “recursion” by clearing the stack. stack.Clear(); - if (!PrototypeManager.TryIndex(constructionProto.ID, out ConstructionPrototype? recipe)) + if (!PrototypeManager.Resolve(entityId, out var proto)) continue; - if (!PrototypeManager.TryIndex(entityId, out var proto)) - continue; + var name = constructionProto.SetName.HasValue ? Loc.GetString(constructionProto.SetName) : proto.Name; + var desc = constructionProto.SetDescription.HasValue ? Loc.GetString(constructionProto.SetDescription) : proto.Description; - var name = recipe.SetName.HasValue ? Loc.GetString(recipe.SetName) : proto.Name; - var desc = recipe.SetDescription.HasValue ? Loc.GetString(recipe.SetDescription) : proto.Description; - - recipe.Name = name; - recipe.Description = desc; + constructionProto.Name = name; + constructionProto.Description = desc; _recipesMetadataCache.Add(constructionProto.ID, entityId); } while (stack.Count > 0); @@ -172,7 +169,7 @@ namespace Content.Client.Construction "construction-ghost-examine-message", ("name", component.Prototype.Name))); - if (!PrototypeManager.TryIndex(component.Prototype.Graph, out var graph)) + if (!PrototypeManager.Resolve(component.Prototype.Graph, out var graph)) return; var startNode = graph.Nodes[component.Prototype.StartNode]; diff --git a/Content.Client/Construction/UI/ConstructionMenuPresenter.cs b/Content.Client/Construction/UI/ConstructionMenuPresenter.cs index 119e92fc6ff..d5fee2bdda7 100644 --- a/Content.Client/Construction/UI/ConstructionMenuPresenter.cs +++ b/Content.Client/Construction/UI/ConstructionMenuPresenter.cs @@ -510,7 +510,7 @@ namespace Content.Client.Construction.UI foreach (var id in favorites) { - if (_prototypeManager.TryIndex(id, out ConstructionPrototype? recipe, logError: false)) + if (_prototypeManager.TryIndex(id, out ConstructionPrototype? recipe)) _favoritedRecipes.Add(recipe); } diff --git a/Content.Client/Damage/DamageVisualsSystem.cs b/Content.Client/Damage/DamageVisualsSystem.cs index de866ca9a42..065bf628bc2 100644 --- a/Content.Client/Damage/DamageVisualsSystem.cs +++ b/Content.Client/Damage/DamageVisualsSystem.cs @@ -150,7 +150,7 @@ public sealed class DamageVisualsSystem : VisualizerSystem(damageComponent.DamageContainerID, out var damageContainer)) + && _prototypeManager.Resolve(damageComponent.DamageContainerID, out var damageContainer)) { // Are we using damage overlay sprites by group? // Check if the container matches the supported groups, diff --git a/Content.Client/Doors/DoorSystem.cs b/Content.Client/Doors/DoorSystem.cs index 3d9a3e2a9aa..f1697b820d5 100644 --- a/Content.Client/Doors/DoorSystem.cs +++ b/Content.Client/Doors/DoorSystem.cs @@ -142,7 +142,7 @@ public sealed class DoorSystem : SharedDoorSystem private void UpdateSpriteLayers(Entity sprite, string targetProto) { - if (!_prototypeManager.TryIndex(targetProto, out var target)) + if (!_prototypeManager.Resolve(targetProto, out var target)) return; if (!target.TryGetComponent(out SpriteComponent? targetSprite, _componentFactory)) diff --git a/Content.Client/Ghost/GhostRoleRadioMenu.xaml.cs b/Content.Client/Ghost/GhostRoleRadioMenu.xaml.cs index 1b65eac6ed9..718b6c4995f 100644 --- a/Content.Client/Ghost/GhostRoleRadioMenu.xaml.cs +++ b/Content.Client/Ghost/GhostRoleRadioMenu.xaml.cs @@ -65,7 +65,7 @@ public sealed partial class GhostRoleRadioMenu : RadialMenu }; // pick the icon if it exists, otherwise fallback to the ghost role's entity - if (_prototypeManager.TryIndex(ghostRoleProto.IconPrototype, out var iconProto)) + if (_prototypeManager.Resolve(ghostRoleProto.IconPrototype, out var iconProto)) entProtoView.SetPrototype(iconProto); else entProtoView.SetPrototype(ghostRoleProto.EntityPrototype); diff --git a/Content.Client/Guidebook/DocumentParsingManager.cs b/Content.Client/Guidebook/DocumentParsingManager.cs index ecf11d4725b..8bc1a834fc6 100644 --- a/Content.Client/Guidebook/DocumentParsingManager.cs +++ b/Content.Client/Guidebook/DocumentParsingManager.cs @@ -53,7 +53,7 @@ public sealed partial class DocumentParsingManager public bool TryAddMarkup(Control control, ProtoId entryId, bool log = true) { - if (!_prototype.TryIndex(entryId, out var entry)) + if (!_prototype.Resolve(entryId, out var entry)) return false; using var file = _resourceManager.ContentFileReadText(entry.Text); diff --git a/Content.Client/Implants/ImplanterSystem.cs b/Content.Client/Implants/ImplanterSystem.cs index 4ba4d015ca5..a8c501daf1a 100644 --- a/Content.Client/Implants/ImplanterSystem.cs +++ b/Content.Client/Implants/ImplanterSystem.cs @@ -28,7 +28,7 @@ public sealed class ImplanterSystem : SharedImplanterSystem Dictionary implants = new(); foreach (var implant in component.DeimplantWhitelist) { - if (_proto.TryIndex(implant, out var proto)) + if (_proto.Resolve(implant, out var proto)) implants.Add(proto.ID, proto.Name); } diff --git a/Content.Client/Implants/UI/ChameleonControllerMenu.xaml.cs b/Content.Client/Implants/UI/ChameleonControllerMenu.xaml.cs index a41e2e9293e..c12ddb9319e 100644 --- a/Content.Client/Implants/UI/ChameleonControllerMenu.xaml.cs +++ b/Content.Client/Implants/UI/ChameleonControllerMenu.xaml.cs @@ -62,7 +62,7 @@ public sealed partial class ChameleonControllerMenu : FancyWindow // Go through every outfit and add them to the correct department. foreach (var outfit in _outfits) { - _prototypeManager.TryIndex(outfit.Job, out var jobProto); + _prototypeManager.Resolve(outfit.Job, out var jobProto); var name = outfit.LoadoutName ?? outfit.Name ?? jobProto?.Name ?? "Prototype has no name or job."; diff --git a/Content.Client/Implants/UI/ImplanterStatusControl.cs b/Content.Client/Implants/UI/ImplanterStatusControl.cs index 569dd785d74..24445eeecf0 100644 --- a/Content.Client/Implants/UI/ImplanterStatusControl.cs +++ b/Content.Client/Implants/UI/ImplanterStatusControl.cs @@ -49,7 +49,7 @@ public sealed class ImplanterStatusControl : Control if (_parent.CurrentMode == ImplanterToggleMode.Draw) { string implantName = _parent.DeimplantChosen != null - ? (_prototype.TryIndex(_parent.DeimplantChosen.Value, out EntityPrototype? implantProto) ? implantProto.Name : Loc.GetString("implanter-empty-text")) + ? (_prototype.Resolve(_parent.DeimplantChosen.Value, out EntityPrototype? implantProto) ? implantProto.Name : Loc.GetString("implanter-empty-text")) : Loc.GetString("implanter-empty-text"); _label.SetMarkup(Loc.GetString("implanter-label-draw", diff --git a/Content.Client/Lathe/UI/LatheMenu.xaml.cs b/Content.Client/Lathe/UI/LatheMenu.xaml.cs index a0dc241c29b..f6688a63af4 100644 --- a/Content.Client/Lathe/UI/LatheMenu.xaml.cs +++ b/Content.Client/Lathe/UI/LatheMenu.xaml.cs @@ -97,7 +97,7 @@ public sealed partial class LatheMenu : DefaultWindow var recipesToShow = new List(); foreach (var recipe in Recipes) { - if (!_prototypeManager.TryIndex(recipe, out var proto)) + if (!_prototypeManager.Resolve(recipe, out var proto)) continue; // Category filtering @@ -183,7 +183,7 @@ public sealed partial class LatheMenu : DefaultWindow foreach (var (id, amount) in prototype.Materials) { - if (!_prototypeManager.TryIndex(id, out var proto)) + if (!_prototypeManager.Resolve(id, out var proto)) continue; var adjustedAmount = SharedLatheSystem.AdjustMaterial(amount, prototype.ApplyMaterialDiscount, multiplier); diff --git a/Content.Client/Lobby/LobbyUIController.cs b/Content.Client/Lobby/LobbyUIController.cs index ec052adea55..e36a2cd174b 100644 --- a/Content.Client/Lobby/LobbyUIController.cs +++ b/Content.Client/Lobby/LobbyUIController.cs @@ -362,7 +362,7 @@ public sealed class LobbyUIController : UIController, IOnStateEntered(species)) page = new ProtoId(species.Id); // Gross. See above todo comment. - if (_prototypeManager.TryIndex(DefaultSpeciesGuidebook, out var guideRoot)) + if (_prototypeManager.Resolve(DefaultSpeciesGuidebook, out var guideRoot)) { var dict = new Dictionary, GuideEntry>(); dict.Add(DefaultSpeciesGuidebook, guideRoot); @@ -1291,7 +1291,7 @@ namespace Content.Client.Lobby.UI var sexes = new List(); // add species sex options, default to just none if we are in bizzaro world and have no species - if (_prototypeManager.TryIndex(Profile.Species, out var speciesProto)) + if (_prototypeManager.Resolve(Profile.Species, out var speciesProto)) { foreach (var sex in speciesProto.Sexes) { @@ -1384,7 +1384,7 @@ namespace Content.Client.Lobby.UI if (species is null) return; - if (!_prototypeManager.TryIndex(species, out var speciesProto)) + if (!_prototypeManager.Resolve(species, out var speciesProto)) return; // Don't display the info button if no guide entry is found diff --git a/Content.Client/Lobby/UI/Loadouts/LoadoutContainer.xaml.cs b/Content.Client/Lobby/UI/Loadouts/LoadoutContainer.xaml.cs index 2264cecd230..035f4a3c1a8 100644 --- a/Content.Client/Lobby/UI/Loadouts/LoadoutContainer.xaml.cs +++ b/Content.Client/Lobby/UI/Loadouts/LoadoutContainer.xaml.cs @@ -40,7 +40,7 @@ public sealed partial class LoadoutContainer : BoxContainer SelectButton.TooltipSupplier = _ => tooltip; } - if (_protoManager.TryIndex(proto, out var loadProto)) + if (_protoManager.Resolve(proto, out var loadProto)) { var ent = loadProto.DummyEntity ?? _entManager.System().GetFirstOrNull(loadProto); diff --git a/Content.Client/Lobby/UI/Loadouts/LoadoutGroupContainer.xaml.cs b/Content.Client/Lobby/UI/Loadouts/LoadoutGroupContainer.xaml.cs index b06e7e41d1f..644910db601 100644 --- a/Content.Client/Lobby/UI/Loadouts/LoadoutGroupContainer.xaml.cs +++ b/Content.Client/Lobby/UI/Loadouts/LoadoutGroupContainer.xaml.cs @@ -62,7 +62,7 @@ public sealed partial class LoadoutGroupContainer : BoxContainer }); } - if (protoMan.TryIndex(loadout.Role, out var roleProto) && roleProto.Points != null && loadout.Points != null) + if (protoMan.Resolve(loadout.Role, out var roleProto) && roleProto.Points != null && loadout.Points != null) { RestrictionsContainer.AddChild(new Label() { @@ -112,14 +112,14 @@ public sealed partial class LoadoutGroupContainer : BoxContainer }) .ToList(); - /* - * Determine which element should be displayed first: - * - If any element is currently selected (its button is pressed), use it. - * - Otherwise, fallback to the first element in the list. - * - * This moves the selected item outside of the sublist for better usability, - * making it easier for players to quickly toggle loadout options (e.g. clothing, accessories) - * without having to search inside expanded subgroups. + /* + * Determine which element should be displayed first: + * - If any element is currently selected (its button is pressed), use it. + * - Otherwise, fallback to the first element in the list. + * + * This moves the selected item outside of the sublist for better usability, + * making it easier for players to quickly toggle loadout options (e.g. clothing, accessories) + * without having to search inside expanded subgroups. */ var firstElement = uiElements.FirstOrDefault(e => e.Select.Pressed) ?? uiElements[0]; @@ -195,8 +195,8 @@ public sealed partial class LoadoutGroupContainer : BoxContainer /// /// Creates a UI container for a single Loadout item. /// - /// This method was extracted from RefreshLoadouts because the logic for creating - /// individual loadout items is used multiple times inside that method, and duplicating + /// This method was extracted from RefreshLoadouts because the logic for creating + /// individual loadout items is used multiple times inside that method, and duplicating /// the code made it harder to maintain. /// /// Logic: diff --git a/Content.Client/Lobby/UI/Loadouts/LoadoutWindow.xaml.cs b/Content.Client/Lobby/UI/Loadouts/LoadoutWindow.xaml.cs index 68e1ecbeaee..50860b349a9 100644 --- a/Content.Client/Lobby/UI/Loadouts/LoadoutWindow.xaml.cs +++ b/Content.Client/Lobby/UI/Loadouts/LoadoutWindow.xaml.cs @@ -68,7 +68,7 @@ public sealed partial class LoadoutWindow : FancyWindow { foreach (var group in proto.Groups) { - if (!protoManager.TryIndex(group, out var groupProto)) + if (!protoManager.Resolve(group, out var groupProto)) continue; if (groupProto.Hidden) diff --git a/Content.Client/Overlays/EntityHealthBarOverlay.cs b/Content.Client/Overlays/EntityHealthBarOverlay.cs index 9ff0422aba0..cf9d879844d 100644 --- a/Content.Client/Overlays/EntityHealthBarOverlay.cs +++ b/Content.Client/Overlays/EntityHealthBarOverlay.cs @@ -57,7 +57,7 @@ public sealed class EntityHealthBarOverlay : Overlay const float scale = 1f; var scaleMatrix = Matrix3Helpers.CreateScale(new Vector2(scale, scale)); var rotationMatrix = Matrix3Helpers.CreateRotation(-rotation); - _prototype.TryIndex(StatusIcon, out var statusIcon); + _prototype.Resolve(StatusIcon, out var statusIcon); var query = _entManager.AllEntityQueryEnumerator(); while (query.MoveNext(out var uid, diff --git a/Content.Client/Overlays/ShowCriminalRecordIconsSystem.cs b/Content.Client/Overlays/ShowCriminalRecordIconsSystem.cs index c353b172729..9a84defba02 100644 --- a/Content.Client/Overlays/ShowCriminalRecordIconsSystem.cs +++ b/Content.Client/Overlays/ShowCriminalRecordIconsSystem.cs @@ -22,7 +22,7 @@ public sealed class ShowCriminalRecordIconsSystem : EquipmentHudSystem(entity, out var state)) { // Since there is no MobState for a rotting mob, we have to deal with this case first. - if (HasComp(entity) && _prototypeMan.TryIndex(damageableComponent.RottingIcon, out var rottingIcon)) + if (HasComp(entity) && _prototypeMan.Resolve(damageableComponent.RottingIcon, out var rottingIcon)) result.Add(rottingIcon); - else if (damageableComponent.HealthIcons.TryGetValue(state.CurrentState, out var value) && _prototypeMan.TryIndex(value, out var icon)) + else if (damageableComponent.HealthIcons.TryGetValue(state.CurrentState, out var value) && _prototypeMan.Resolve(value, out var icon)) result.Add(icon); } } diff --git a/Content.Client/Overlays/ShowJobIconsSystem.cs b/Content.Client/Overlays/ShowJobIconsSystem.cs index d0d14449f66..faf4024c2fa 100644 --- a/Content.Client/Overlays/ShowJobIconsSystem.cs +++ b/Content.Client/Overlays/ShowJobIconsSystem.cs @@ -51,7 +51,7 @@ public sealed class ShowJobIconsSystem : EquipmentHudSystem(proto, out var weatherProto)) + if (!_protoManager.Resolve(proto, out var weatherProto)) continue; var alpha = _weather.GetPercent(weather, mapUid); diff --git a/Content.Client/RCD/RCDMenuBoundUserInterface.cs b/Content.Client/RCD/RCDMenuBoundUserInterface.cs index c001b7ec70a..3c9d5d1e55a 100644 --- a/Content.Client/RCD/RCDMenuBoundUserInterface.cs +++ b/Content.Client/RCD/RCDMenuBoundUserInterface.cs @@ -125,8 +125,10 @@ public sealed class RCDMenuBoundUserInterface : BoundUserInterface var name = Loc.GetString(proto.SetName); if (proto.Prototype != null && - _prototypeManager.TryIndex(proto.Prototype, out var entProto, logError: false)) + _prototypeManager.Resolve(proto.Prototype, out var entProto)) + { name = entProto.Name; + } msg = Loc.GetString("rcd-component-change-build-mode", ("name", name)); } @@ -142,7 +144,7 @@ public sealed class RCDMenuBoundUserInterface : BoundUserInterface if (proto.Mode is RcdMode.ConstructTile or RcdMode.ConstructObject && proto.Prototype != null - && _prototypeManager.TryIndex(proto.Prototype, out var entProto, logError: false)) + && _prototypeManager.Resolve(proto.Prototype, out var entProto)) { tooltip = Loc.GetString(entProto.Name); } diff --git a/Content.Client/Radio/Ui/IntercomMenu.xaml.cs b/Content.Client/Radio/Ui/IntercomMenu.xaml.cs index f66b3db000e..887c6f64432 100644 --- a/Content.Client/Radio/Ui/IntercomMenu.xaml.cs +++ b/Content.Client/Radio/Ui/IntercomMenu.xaml.cs @@ -42,7 +42,7 @@ public sealed partial class IntercomMenu : FancyWindow for (var i = 0; i < entity.Comp.SupportedChannels.Count; i++) { var channel = entity.Comp.SupportedChannels[i]; - if (!_prototype.TryIndex(channel, out var prototype)) + if (!_prototype.Resolve(channel, out var prototype)) continue; _channels.Add(channel); diff --git a/Content.Client/Revolutionary/RevolutionarySystem.cs b/Content.Client/Revolutionary/RevolutionarySystem.cs index 8e7e687fa8f..2dc16d9c11f 100644 --- a/Content.Client/Revolutionary/RevolutionarySystem.cs +++ b/Content.Client/Revolutionary/RevolutionarySystem.cs @@ -25,13 +25,13 @@ public sealed class RevolutionarySystem : SharedRevolutionarySystem if (HasComp(ent)) return; - if (_prototype.TryIndex(ent.Comp.StatusIcon, out var iconPrototype)) + if (_prototype.Resolve(ent.Comp.StatusIcon, out var iconPrototype)) args.StatusIcons.Add(iconPrototype); } private void GetHeadRevIcon(Entity ent, ref GetStatusIconsEvent args) { - if (_prototype.TryIndex(ent.Comp.StatusIcon, out var iconPrototype)) + if (_prototype.Resolve(ent.Comp.StatusIcon, out var iconPrototype)) args.StatusIcons.Add(iconPrototype); } } diff --git a/Content.Client/Silicons/StationAi/StationAiCustomizationMenu.xaml.cs b/Content.Client/Silicons/StationAi/StationAiCustomizationMenu.xaml.cs index 009969196ba..3c5375a8e46 100644 --- a/Content.Client/Silicons/StationAi/StationAiCustomizationMenu.xaml.cs +++ b/Content.Client/Silicons/StationAi/StationAiCustomizationMenu.xaml.cs @@ -44,7 +44,7 @@ public sealed partial class StationAiCustomizationMenu : FancyWindow StationAiCustomizationPrototype? selectedPrototype = null; if (stationAiCustomization?.ProtoIds.TryGetValue(groupPrototype, out var selectedProtoId) == true) - _protoManager.TryIndex(selectedProtoId, out selectedPrototype); + _protoManager.Resolve(selectedProtoId, out selectedPrototype); _buttonGroups[groupPrototype] = new ButtonGroup(); _groupContainers[groupPrototype] = new StationAiCustomizationGroupContainer(groupPrototype, selectedPrototype, _buttonGroups[groupPrototype], this, _protoManager); @@ -76,7 +76,7 @@ public sealed partial class StationAiCustomizationMenu : FancyWindow // Create UI entries for all customization in the group foreach (var protoId in groupPrototype.ProtoIds) { - if (!protoManager.TryIndex(protoId, out var prototype)) + if (!protoManager.Resolve(protoId, out var prototype)) continue; var entry = new StationAiCustomizationEntryContainer(groupPrototype, prototype, buttonGroup, menu); diff --git a/Content.Client/SprayPainter/SprayPainterSystem.cs b/Content.Client/SprayPainter/SprayPainterSystem.cs index 8f7d7f03622..788e97bef16 100644 --- a/Content.Client/SprayPainter/SprayPainterSystem.cs +++ b/Content.Client/SprayPainter/SprayPainterSystem.cs @@ -65,7 +65,7 @@ public sealed class SprayPainterSystem : SharedSprayPainterSystem var groupList = new List(); foreach (var groupId in category.Groups) { - if (!Proto.TryIndex(groupId, out var group)) + if (!Proto.Resolve(groupId, out var group)) continue; groupList.Add(groupId); diff --git a/Content.Client/Storage/Visualizers/EntityStorageVisualizerSystem.cs b/Content.Client/Storage/Visualizers/EntityStorageVisualizerSystem.cs index c10a24ac323..ea0b800ccc4 100644 --- a/Content.Client/Storage/Visualizers/EntityStorageVisualizerSystem.cs +++ b/Content.Client/Storage/Visualizers/EntityStorageVisualizerSystem.cs @@ -42,7 +42,7 @@ public sealed class EntityStorageVisualizerSystem : VisualizerSystem(uid, PaintableVisuals.Prototype, out var prototype, args.Component)) { - if (_prototypeManager.TryIndex(prototype, out var proto)) + if (_prototypeManager.Resolve(prototype, out var proto)) { if (proto.TryGetComponent(out SpriteComponent? sprite, _componentFactory)) { diff --git a/Content.Client/Store/Ui/StoreWithdrawWindow.xaml.cs b/Content.Client/Store/Ui/StoreWithdrawWindow.xaml.cs index a8b93cd2b3a..e706e74bc33 100644 --- a/Content.Client/Store/Ui/StoreWithdrawWindow.xaml.cs +++ b/Content.Client/Store/Ui/StoreWithdrawWindow.xaml.cs @@ -33,7 +33,7 @@ public sealed partial class StoreWithdrawWindow : DefaultWindow _validCurrencies.Clear(); foreach (var currency in balance) { - if (!_prototypeManager.TryIndex(currency.Key, out var proto)) + if (!_prototypeManager.Resolve(currency.Key, out var proto)) continue; _validCurrencies.Add(proto, currency.Value); diff --git a/Content.Client/VendingMachines/UI/VendingMachineMenu.xaml.cs b/Content.Client/VendingMachines/UI/VendingMachineMenu.xaml.cs index 41d29e8080a..9077f95565d 100644 --- a/Content.Client/VendingMachines/UI/VendingMachineMenu.xaml.cs +++ b/Content.Client/VendingMachines/UI/VendingMachineMenu.xaml.cs @@ -120,7 +120,7 @@ namespace Content.Client.VendingMachines.UI { var entry = inventory[i]; - if (!_prototypeManager.TryIndex(entry.ID, out var prototype)) + if (!_prototypeManager.Resolve(entry.ID, out var prototype)) { _amounts[entry.ID] = 0; continue; diff --git a/Content.IntegrationTests/Tests/Commands/SuicideCommandTests.cs b/Content.IntegrationTests/Tests/Commands/SuicideCommandTests.cs index 61b8d544484..c232ccf415e 100644 --- a/Content.IntegrationTests/Tests/Commands/SuicideCommandTests.cs +++ b/Content.IntegrationTests/Tests/Commands/SuicideCommandTests.cs @@ -146,8 +146,8 @@ public sealed class SuicideCommandTests mobThresholdsComp = entManager.GetComponent(player); damageableComp = entManager.GetComponent(player); - if (protoMan.TryIndex(DamageType, out var slashProto)) - damageableSystem.TryChangeDamage(player, new DamageSpecifier(slashProto, FixedPoint2.New(46.5))); + var slashProto = protoMan.Index(DamageType); + damageableSystem.TryChangeDamage(player, new DamageSpecifier(slashProto, FixedPoint2.New(46.5))); }); // Check that running the suicide command kills the player diff --git a/Content.IntegrationTests/Tests/ContrabandTest.cs b/Content.IntegrationTests/Tests/ContrabandTest.cs index a33e7c2067b..c52ef293e1e 100644 --- a/Content.IntegrationTests/Tests/ContrabandTest.cs +++ b/Content.IntegrationTests/Tests/ContrabandTest.cs @@ -27,8 +27,11 @@ public sealed class ContrabandTest if (!proto.TryGetComponent(out var contraband, componentFactory)) continue; - Assert.That(protoMan.TryIndex(contraband.Severity, out var severity, false), - @$"{proto.ID} has a ContrabandComponent with a unknown severity."); + if (!protoMan.TryIndex(contraband.Severity, out var severity)) + { + Assert.Fail($"{proto.ID} has a ContrabandComponent with a unknown severity."); + continue; + } if (!severity.ShowDepartmentsAndJobs) continue; diff --git a/Content.IntegrationTests/Tests/Lathe/LatheTest.cs b/Content.IntegrationTests/Tests/Lathe/LatheTest.cs index 2fe347f6362..c335f8d6c8a 100644 --- a/Content.IntegrationTests/Tests/Lathe/LatheTest.cs +++ b/Content.IntegrationTests/Tests/Lathe/LatheTest.cs @@ -88,14 +88,18 @@ public sealed class LatheTest // Check each recipe assigned to this lathe foreach (var recipeId in recipes) { - Assert.That(protoMan.TryIndex(recipeId, out var recipeProto)); + if (!protoMan.TryIndex(recipeId, out var recipeProto)) + { + Assert.Fail($"Lathe recipe '{recipeId}' does not exist"); + continue; + } // Track the total material volume of the recipe var totalQuantity = 0; // Check each material called for by the recipe foreach (var (materialId, quantity) in recipeProto.Materials) { - Assert.That(protoMan.TryIndex(materialId, out var materialProto)); + Assert.That(protoMan.HasIndex(materialId), $"Material '{materialId}' does not exist"); // Make sure the material is accepted by the lathe Assert.That(acceptedMaterials, Does.Contain(materialId), $"Lathe {latheProto.ID} has recipe {recipeId} but does not accept any materials containing {materialId}"); totalQuantity += quantity; diff --git a/Content.IntegrationTests/Tests/Minds/MindTests.cs b/Content.IntegrationTests/Tests/Minds/MindTests.cs index 2f775198293..1bda6fd4dba 100644 --- a/Content.IntegrationTests/Tests/Minds/MindTests.cs +++ b/Content.IntegrationTests/Tests/Minds/MindTests.cs @@ -145,10 +145,7 @@ public sealed partial class MindTests await server.WaitAssertion(() => { var damageable = entMan.GetComponent(entity); - if (!protoMan.TryIndex(BluntDamageType, out var prototype)) - { - return; - } + var prototype = protoMan.Index(BluntDamageType); damageableSystem.SetDamage(entity, damageable, new DamageSpecifier(prototype, FixedPoint2.New(401))); Assert.That(mindSystem.GetMind(entity, mindContainerComp), Is.EqualTo(mindId)); diff --git a/Content.IntegrationTests/Tests/PostMapInitTest.cs b/Content.IntegrationTests/Tests/PostMapInitTest.cs index a7a50a5270f..22db3ca31f8 100644 --- a/Content.IntegrationTests/Tests/PostMapInitTest.cs +++ b/Content.IntegrationTests/Tests/PostMapInitTest.cs @@ -256,8 +256,7 @@ namespace Content.IntegrationTests.Tests return; var yamlEntities = node["entities"]; - if (!protoManager.TryIndex(DoNotMapCategory, out var dnmCategory)) - return; + var dnmCategory = protoManager.Index(DoNotMapCategory); Assert.Multiple(() => { @@ -266,7 +265,7 @@ namespace Content.IntegrationTests.Tests var protoId = yamlEntity["proto"].AsString(); // This doesn't properly handle prototype migrations, but thats not a significant issue. - if (!protoManager.TryIndex(protoId, out var proto, false)) + if (!protoManager.TryIndex(protoId, out var proto)) continue; Assert.That(!proto.Categories.Contains(dnmCategory), diff --git a/Content.Server/Access/Systems/AgentIDCardSystem.cs b/Content.Server/Access/Systems/AgentIDCardSystem.cs index 0df760baef1..1706908e72d 100644 --- a/Content.Server/Access/Systems/AgentIDCardSystem.cs +++ b/Content.Server/Access/Systems/AgentIDCardSystem.cs @@ -45,7 +45,7 @@ namespace Content.Server.Access.Systems if (!TryComp(ent, out var idCardComp)) return; - _prototypeManager.TryIndex(args.Args.ChameleonOutfit.Job, out var jobProto); + _prototypeManager.Resolve(args.Args.ChameleonOutfit.Job, out var jobProto); var jobIcon = args.Args.ChameleonOutfit.Icon ?? jobProto?.Icon; var jobName = args.Args.ChameleonOutfit.Name ?? jobProto?.Name ?? ""; @@ -130,7 +130,7 @@ namespace Content.Server.Access.Systems if (!TryComp(uid, out var idCard)) return; - if (!_prototypeManager.TryIndex(args.JobIconId, out var jobIcon)) + if (!_prototypeManager.Resolve(args.JobIconId, out var jobIcon)) return; _cardSystem.TryChangeJobIcon(uid, jobIcon, idCard); diff --git a/Content.Server/Access/Systems/IdCardConsoleSystem.cs b/Content.Server/Access/Systems/IdCardConsoleSystem.cs index 62dfddbb589..13f2430b3d9 100644 --- a/Content.Server/Access/Systems/IdCardConsoleSystem.cs +++ b/Content.Server/Access/Systems/IdCardConsoleSystem.cs @@ -98,7 +98,7 @@ public sealed class IdCardConsoleSystem : SharedIdCardConsoleSystem var targetIdComponent = Comp(targetId); var targetAccessComponent = Comp(targetId); - var jobProto = targetIdComponent.JobPrototype ?? new ProtoId(string.Empty); + var jobProto = targetIdComponent.JobPrototype ?? new ProtoId(string.Empty); if (TryComp(targetId, out var keyStorage) && keyStorage.Key is { } key && _record.TryGetRecord(key, out var record)) @@ -130,7 +130,7 @@ public sealed class IdCardConsoleSystem : SharedIdCardConsoleSystem string newFullName, string newJobTitle, List> newAccessList, - ProtoId newJobProto, + ProtoId newJobProto, EntityUid player, IdCardConsoleComponent? component = null) { @@ -144,7 +144,7 @@ public sealed class IdCardConsoleSystem : SharedIdCardConsoleSystem _idCard.TryChangeJobTitle(targetId, newJobTitle, player: player); if (_prototype.TryIndex(newJobProto, out var job) - && _prototype.TryIndex(job.Icon, out var jobIcon)) + && _prototype.Resolve(job.Icon, out var jobIcon)) { _idCard.TryChangeJobIcon(targetId, jobIcon, player: player); _idCard.TryChangeJobDepartment(targetId, job); diff --git a/Content.Server/Access/Systems/PresetIdCardSystem.cs b/Content.Server/Access/Systems/PresetIdCardSystem.cs index 426e523243c..6d9f61d9411 100644 --- a/Content.Server/Access/Systems/PresetIdCardSystem.cs +++ b/Content.Server/Access/Systems/PresetIdCardSystem.cs @@ -82,7 +82,7 @@ public sealed class PresetIdCardSystem : EntitySystem _cardSystem.TryChangeJobTitle(uid, job.LocalizedName); _cardSystem.TryChangeJobDepartment(uid, job); - if (_prototypeManager.TryIndex(job.Icon, out var jobIcon)) + if (_prototypeManager.Resolve(job.Icon, out var jobIcon)) _cardSystem.TryChangeJobIcon(uid, jobIcon); } } diff --git a/Content.Server/Administration/Commands/ExplosionCommand.cs b/Content.Server/Administration/Commands/ExplosionCommand.cs index 787886f164a..6f9e89243d7 100644 --- a/Content.Server/Administration/Commands/ExplosionCommand.cs +++ b/Content.Server/Administration/Commands/ExplosionCommand.cs @@ -118,7 +118,7 @@ public sealed class ExplosionCommand : LocalizedEntityCommands return; } } - else if (!_prototypeManager.TryIndex(ExplosionSystem.DefaultExplosionPrototypeId, out type)) + else if (!_prototypeManager.Resolve(ExplosionSystem.DefaultExplosionPrototypeId, out type)) { // no prototype was specified, so lets default to whichever one was defined first type = _prototypeManager.EnumeratePrototypes().FirstOrDefault(); diff --git a/Content.Server/Advertise/EntitySystems/SpeakOnUIClosedSystem.cs b/Content.Server/Advertise/EntitySystems/SpeakOnUIClosedSystem.cs index 3fca640d4af..94b20c7b77e 100644 --- a/Content.Server/Advertise/EntitySystems/SpeakOnUIClosedSystem.cs +++ b/Content.Server/Advertise/EntitySystems/SpeakOnUIClosedSystem.cs @@ -38,7 +38,7 @@ public sealed partial class SpeakOnUIClosedSystem : SharedSpeakOnUIClosedSystem if (!entity.Comp.Enabled) return false; - if (!_prototypeManager.TryIndex(entity.Comp.Pack, out var messagePack)) + if (!_prototypeManager.Resolve(entity.Comp.Pack, out var messagePack)) return false; var message = Loc.GetString(_random.Pick(messagePack.Values), ("name", Name(entity))); diff --git a/Content.Server/Anomaly/Effects/InnerBodyAnomalySystem.cs b/Content.Server/Anomaly/Effects/InnerBodyAnomalySystem.cs index bed24992986..d6039fac015 100644 --- a/Content.Server/Anomaly/Effects/InnerBodyAnomalySystem.cs +++ b/Content.Server/Anomaly/Effects/InnerBodyAnomalySystem.cs @@ -86,7 +86,7 @@ public sealed class InnerBodyAnomalySystem : SharedInnerBodyAnomalySystem private void AddAnomalyToBody(Entity ent) { - if (!_proto.TryIndex(ent.Comp.InjectionProto, out var injectedAnom)) + if (!_proto.Resolve(ent.Comp.InjectionProto, out var injectedAnom)) return; if (ent.Comp.Injected) @@ -210,7 +210,7 @@ public sealed class InnerBodyAnomalySystem : SharedInnerBodyAnomalySystem if (!ent.Comp.Injected) return; - if (_proto.TryIndex(ent.Comp.InjectionProto, out var injectedAnom)) + if (_proto.Resolve(ent.Comp.InjectionProto, out var injectedAnom)) EntityManager.RemoveComponents(ent, injectedAnom.Components); _stun.TryUpdateParalyzeDuration(ent, TimeSpan.FromSeconds(ent.Comp.StunDuration)); diff --git a/Content.Server/Audio/Jukebox/JukeboxSystem.cs b/Content.Server/Audio/Jukebox/JukeboxSystem.cs index 3535f6b2382..81d71894b86 100644 --- a/Content.Server/Audio/Jukebox/JukeboxSystem.cs +++ b/Content.Server/Audio/Jukebox/JukeboxSystem.cs @@ -51,7 +51,7 @@ public sealed class JukeboxSystem : SharedJukeboxSystem component.AudioStream = Audio.Stop(component.AudioStream); if (string.IsNullOrEmpty(component.SelectedSongId) || - !_protoManager.TryIndex(component.SelectedSongId, out var jukeboxProto)) + !_protoManager.Resolve(component.SelectedSongId, out var jukeboxProto)) { return; } diff --git a/Content.Server/Cargo/Systems/CargoSystem.Bounty.cs b/Content.Server/Cargo/Systems/CargoSystem.Bounty.cs index 934517eadc8..c2c2a8365cf 100644 --- a/Content.Server/Cargo/Systems/CargoSystem.Bounty.cs +++ b/Content.Server/Cargo/Systems/CargoSystem.Bounty.cs @@ -113,7 +113,7 @@ public sealed partial class CargoSystem public void SetupBountyLabel(EntityUid uid, EntityUid stationId, CargoBountyData bounty, PaperComponent? paper = null, CargoBountyLabelComponent? label = null) { - if (!Resolve(uid, ref paper, ref label) || !_protoMan.TryIndex(bounty.Bounty, out var prototype)) + if (!Resolve(uid, ref paper, ref label) || !_protoMan.Resolve(bounty.Bounty, out var prototype)) return; label.Id = bounty.Id; @@ -156,7 +156,7 @@ public sealed partial class CargoSystem if (!TryGetBountyFromId(station, component.Id, out var bounty, database)) return; - if (!_protoMan.TryIndex(bounty.Value.Bounty, out var bountyPrototype) || + if (!_protoMan.Resolve(bounty.Value.Bounty, out var bountyPrototype) || !IsBountyComplete(container.Owner, bountyPrototype)) return; @@ -275,7 +275,7 @@ public sealed partial class CargoSystem public bool IsBountyComplete(EntityUid container, CargoBountyData data, out HashSet bountyEntities) { - if (!_protoMan.TryIndex(data.Bounty, out var proto)) + if (!_protoMan.Resolve(data.Bounty, out var proto)) { bountyEntities = new(); return false; diff --git a/Content.Server/Cargo/Systems/CargoSystem.Orders.cs b/Content.Server/Cargo/Systems/CargoSystem.Orders.cs index febe093d98a..0b5f0155937 100644 --- a/Content.Server/Cargo/Systems/CargoSystem.Orders.cs +++ b/Content.Server/Cargo/Systems/CargoSystem.Orders.cs @@ -167,7 +167,7 @@ namespace Content.Server.Cargo.Systems // Find our order again. It might have been dispatched or approved already var order = orderDatabase.Orders[component.Account].Find(order => args.OrderId == order.OrderId && !order.Approved); - if (order == null || !_protoMan.TryIndex(order.Account, out var account)) + if (order == null || !_protoMan.Resolve(order.Account, out var account)) { return; } @@ -322,7 +322,7 @@ namespace Content.Server.Cargo.Systems private void OnAddOrderMessageSlipPrinter(EntityUid uid, CargoOrderConsoleComponent component, CargoConsoleAddOrderMessage args, CargoProductPrototype product) { - if (!_protoMan.TryIndex(component.Account, out var account)) + if (!_protoMan.Resolve(component.Account, out var account)) return; if (Timing.CurTime < component.NextPrintTime) diff --git a/Content.Server/Chat/Systems/ChatSystem.cs b/Content.Server/Chat/Systems/ChatSystem.cs index 2dc001a9c99..b073cc0e697 100644 --- a/Content.Server/Chat/Systems/ChatSystem.cs +++ b/Content.Server/Chat/Systems/ChatSystem.cs @@ -433,7 +433,7 @@ public sealed partial class ChatSystem : SharedChatSystem RaiseLocalEvent(source, nameEv); name = nameEv.VoiceName; // Check for a speech verb override - if (nameEv.SpeechVerb != null && _prototypeManager.TryIndex(nameEv.SpeechVerb, out var proto)) + if (nameEv.SpeechVerb != null && _prototypeManager.Resolve(nameEv.SpeechVerb, out var proto)) speech = proto; } diff --git a/Content.Server/Chemistry/EntitySystems/TransformableContainerSystem.cs b/Content.Server/Chemistry/EntitySystems/TransformableContainerSystem.cs index 48d547d1e0c..d5b220c3e83 100644 --- a/Content.Server/Chemistry/EntitySystems/TransformableContainerSystem.cs +++ b/Content.Server/Chemistry/EntitySystems/TransformableContainerSystem.cs @@ -66,7 +66,7 @@ public sealed class TransformableContainerSystem : EntitySystem private void OnRefreshNameModifiers(Entity entity, ref RefreshNameModifiersEvent args) { - if (_prototypeManager.TryIndex(entity.Comp.CurrentReagent, out var currentReagent)) + if (_prototypeManager.Resolve(entity.Comp.CurrentReagent, out var currentReagent)) { args.AddModifier("transformable-container-component-glass", priority: -1, ("reagent", currentReagent.LocalizedName)); } diff --git a/Content.Server/Cloning/CloningSystem.cs b/Content.Server/Cloning/CloningSystem.cs index b0d62be5239..6e0f38ad51e 100644 --- a/Content.Server/Cloning/CloningSystem.cs +++ b/Content.Server/Cloning/CloningSystem.cs @@ -43,13 +43,13 @@ public sealed partial class CloningSystem : SharedCloningSystem public bool TryCloning(EntityUid original, MapCoordinates? coords, ProtoId settingsId, [NotNullWhen(true)] out EntityUid? clone) { clone = null; - if (!_prototype.TryIndex(settingsId, out var settings)) + if (!_prototype.Resolve(settingsId, out var settings)) return false; // invalid settings if (!TryComp(original, out var humanoid)) return false; // whatever body was to be cloned, was not a humanoid - if (!_prototype.TryIndex(humanoid.Species, out var speciesPrototype)) + if (!_prototype.Resolve(humanoid.Species, out var speciesPrototype)) return false; // invalid species var attemptEv = new CloningAttemptEvent(settings); diff --git a/Content.Server/Construction/ConstructionSystem.Guided.cs b/Content.Server/Construction/ConstructionSystem.Guided.cs index 157e4211586..42c64db9914 100644 --- a/Content.Server/Construction/ConstructionSystem.Guided.cs +++ b/Content.Server/Construction/ConstructionSystem.Guided.cs @@ -145,7 +145,7 @@ namespace Content.Server.Construction return guide; // If the graph doesn't actually exist, do nothing. - if (!PrototypeManager.TryIndex(construction.Graph, out ConstructionGraphPrototype? graph)) + if (!PrototypeManager.Resolve(construction.Graph, out ConstructionGraphPrototype? graph)) return null; // If either the start node or the target node are missing, do nothing. diff --git a/Content.Server/Damage/ForceSay/DamageForceSaySystem.cs b/Content.Server/Damage/ForceSay/DamageForceSaySystem.cs index 8dfe665541c..a46d42f3e37 100644 --- a/Content.Server/Damage/ForceSay/DamageForceSaySystem.cs +++ b/Content.Server/Damage/ForceSay/DamageForceSaySystem.cs @@ -61,7 +61,7 @@ public sealed class DamageForceSaySystem : EntitySystem var ev = new BeforeForceSayEvent(component.ForceSayStringDataset); RaiseLocalEvent(uid, ev); - if (!_prototype.TryIndex(ev.Prefix, out var prefixList)) + if (!_prototype.Resolve(ev.Prefix, out var prefixList)) return; var suffix = Loc.GetString(_random.Pick(prefixList.Values)); diff --git a/Content.Server/Damage/Systems/ExaminableDamageSystem.cs b/Content.Server/Damage/Systems/ExaminableDamageSystem.cs index 155cf08962d..b0dfae71b7f 100644 --- a/Content.Server/Damage/Systems/ExaminableDamageSystem.cs +++ b/Content.Server/Damage/Systems/ExaminableDamageSystem.cs @@ -20,7 +20,7 @@ public sealed class ExaminableDamageSystem : EntitySystem private void OnExamine(Entity ent, ref ExaminedEvent args) { - if (!_prototype.TryIndex(ent.Comp.Messages, out var proto) || proto.Values.Count == 0) + if (!_prototype.Resolve(ent.Comp.Messages, out var proto) || proto.Values.Count == 0) return; var percent = GetDamagePercent(ent); diff --git a/Content.Server/Delivery/DeliverySystem.cs b/Content.Server/Delivery/DeliverySystem.cs index 5fc9b53316a..72d9427dffc 100644 --- a/Content.Server/Delivery/DeliverySystem.cs +++ b/Content.Server/Delivery/DeliverySystem.cs @@ -102,7 +102,7 @@ public sealed partial class DeliverySystem : SharedDeliverySystem if (ent.Comp.WasPenalized) return; - if (!_protoMan.TryIndex(ent.Comp.PenaltyBankAccount, out var accountInfo)) + if (!_protoMan.Resolve(ent.Comp.PenaltyBankAccount, out var accountInfo)) return; var multiplier = GetDeliveryMultiplier(ent); diff --git a/Content.Server/Destructible/Thresholds/Behaviors/WeightedSpawnEntityBehavior.cs b/Content.Server/Destructible/Thresholds/Behaviors/WeightedSpawnEntityBehavior.cs index 96fa4dd438b..4a275ac8958 100644 --- a/Content.Server/Destructible/Thresholds/Behaviors/WeightedSpawnEntityBehavior.cs +++ b/Content.Server/Destructible/Thresholds/Behaviors/WeightedSpawnEntityBehavior.cs @@ -66,7 +66,7 @@ public sealed partial class WeightedSpawnEntityBehavior : IThresholdBehavior if (SpawnAfter != 0) { // if it fails to get the spawner, this won't ever work so just return - if (!system.PrototypeManager.TryIndex(TempEntityProtoId, out var tempSpawnerProto)) + if (!system.PrototypeManager.Resolve(TempEntityProtoId, out var tempSpawnerProto)) return; // spawn the spawner, assign it a lifetime, and assign the entity that it will spawn when despawned diff --git a/Content.Server/EntityEffects/EntityEffectSystem.cs b/Content.Server/EntityEffects/EntityEffectSystem.cs index f423a432612..4e447c7fab0 100644 --- a/Content.Server/EntityEffects/EntityEffectSystem.cs +++ b/Content.Server/EntityEffects/EntityEffectSystem.cs @@ -949,9 +949,7 @@ public sealed class EntityEffectSystem : EntitySystem return; var targetProto = _random.Pick(plantholder.Seed.MutationPrototypes); - _protoManager.TryIndex(targetProto, out SeedPrototype? protoSeed); - - if (protoSeed == null) + if (!_protoManager.TryIndex(targetProto, out SeedPrototype? protoSeed)) { Log.Error($"Seed prototype could not be found: {targetProto}!"); return; diff --git a/Content.Server/GameTicking/Rules/AntagLoadProfileRuleSystem.cs b/Content.Server/GameTicking/Rules/AntagLoadProfileRuleSystem.cs index 3527e2a11c2..84f87a487bd 100644 --- a/Content.Server/GameTicking/Rules/AntagLoadProfileRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/AntagLoadProfileRuleSystem.cs @@ -32,7 +32,7 @@ public sealed class AntagLoadProfileRuleSystem : GameRuleSystem(SharedHumanoidAppearanceSystem.DefaultSpecies); } diff --git a/Content.Server/GameTicking/Rules/VariationPass/PuddleMessVariationPassSystem.cs b/Content.Server/GameTicking/Rules/VariationPass/PuddleMessVariationPassSystem.cs index 2895416a7f0..c81001daaca 100644 --- a/Content.Server/GameTicking/Rules/VariationPass/PuddleMessVariationPassSystem.cs +++ b/Content.Server/GameTicking/Rules/VariationPass/PuddleMessVariationPassSystem.cs @@ -17,7 +17,7 @@ public sealed class PuddleMessVariationPassSystem : VariationPassSystem entity, ref GhostRoleRadioMessage args) { - if (!_prototype.TryIndex(args.ProtoId, out var ghostRoleProto)) + if (!_prototype.Resolve(args.ProtoId, out var ghostRoleProto)) return; // if the prototype chosen isn't actually part of the selectable options, ignore it diff --git a/Content.Server/Ghost/SpookySpeakerSystem.cs b/Content.Server/Ghost/SpookySpeakerSystem.cs index 5a83ca39b1d..ce3a2705a0d 100644 --- a/Content.Server/Ghost/SpookySpeakerSystem.cs +++ b/Content.Server/Ghost/SpookySpeakerSystem.cs @@ -32,7 +32,7 @@ public sealed class SpookySpeakerSystem : EntitySystem if (curTime < entity.Comp.NextSpeakTime) return; - if (!_proto.TryIndex(entity.Comp.MessageSet, out var messages)) + if (!_proto.Resolve(entity.Comp.MessageSet, out var messages)) return; // Grab a random localized message from the set diff --git a/Content.Server/Implants/ChameleonControllerSystem.cs b/Content.Server/Implants/ChameleonControllerSystem.cs index 930f2e3156f..e884e181eeb 100644 --- a/Content.Server/Implants/ChameleonControllerSystem.cs +++ b/Content.Server/Implants/ChameleonControllerSystem.cs @@ -49,8 +49,8 @@ public sealed class ChameleonControllerSystem : SharedChameleonControllerSystem { var outfitPrototype = _proto.Index(outfit); - _proto.TryIndex(outfitPrototype.Job, out var jobPrototype); - _proto.TryIndex(outfitPrototype.StartingGear, out var startingGearPrototype); + _proto.Resolve(outfitPrototype.Job, out var jobPrototype); + _proto.Resolve(outfitPrototype.StartingGear, out var startingGearPrototype); GetJobEquipmentInformation(jobPrototype, user, out var customRoleLoadout, out var defaultRoleLoadout, out var jobStartingGearPrototype); @@ -81,7 +81,7 @@ public sealed class ChameleonControllerSystem : SharedChameleonControllerSystem if (jobPrototype == null) return; - _proto.TryIndex(jobPrototype.StartingGear, out jobStartingGearPrototype); + _proto.Resolve(jobPrototype.StartingGear, out jobStartingGearPrototype); if (!TryComp(user, out var actorComponent)) return; diff --git a/Content.Server/Kitchen/EntitySystems/MicrowaveSystem.cs b/Content.Server/Kitchen/EntitySystems/MicrowaveSystem.cs index f5c8c4d0d89..c2d2614a0ac 100644 --- a/Content.Server/Kitchen/EntitySystems/MicrowaveSystem.cs +++ b/Content.Server/Kitchen/EntitySystems/MicrowaveSystem.cs @@ -725,7 +725,7 @@ namespace Content.Server.Kitchen.EntitySystems { foreach (ProtoId recipeId in ent.Comp.ProvidedRecipes) { - if (_prototype.TryIndex(recipeId, out var recipeProto)) + if (_prototype.Resolve(recipeId, out var recipeProto)) { args.Recipes.Add(recipeProto); } diff --git a/Content.Server/Lathe/LatheSystem.cs b/Content.Server/Lathe/LatheSystem.cs index 02abb077912..97602ad2ba1 100644 --- a/Content.Server/Lathe/LatheSystem.cs +++ b/Content.Server/Lathe/LatheSystem.cs @@ -137,7 +137,7 @@ namespace Content.Server.Lathe var recipes = GetAvailableRecipes(uid, component, true); foreach (var id in recipes) { - if (!_proto.TryIndex(id, out var proto)) + if (!_proto.Resolve(id, out var proto)) continue; foreach (var (mat, _) in proto.Materials) { diff --git a/Content.Server/NameIdentifier/NameIdentifierSystem.cs b/Content.Server/NameIdentifier/NameIdentifierSystem.cs index c0b9beaa9aa..27e25a4b4f3 100644 --- a/Content.Server/NameIdentifier/NameIdentifierSystem.cs +++ b/Content.Server/NameIdentifier/NameIdentifierSystem.cs @@ -92,7 +92,7 @@ public sealed class NameIdentifierSystem : EntitySystem if (ent.Comp.Group is null) return; - if (!_prototypeManager.TryIndex(ent.Comp.Group, out var group)) + if (!_prototypeManager.Resolve(ent.Comp.Group, out var group)) return; int id; @@ -131,7 +131,7 @@ public sealed class NameIdentifierSystem : EntitySystem if (ent.Comp.LifeStage > ComponentLifeStage.Running) return; - if (!_prototypeManager.TryIndex(ent.Comp.Group, out var group)) + if (!_prototypeManager.Resolve(ent.Comp.Group, out var group)) return; var format = group.FullName ? "name-identifier-format-full" : "name-identifier-format-append"; diff --git a/Content.Server/Parallax/BiomeSystem.cs b/Content.Server/Parallax/BiomeSystem.cs index 496cb387e82..6974bc1fda3 100644 --- a/Content.Server/Parallax/BiomeSystem.cs +++ b/Content.Server/Parallax/BiomeSystem.cs @@ -127,7 +127,7 @@ public sealed partial class BiomeSystem : SharedBiomeSystem SetSeed(uid, component, _random.Next()); } - if (_proto.TryIndex(component.Template, out var biome)) + if (_proto.Resolve(component.Template, out var biome)) SetTemplate(uid, component, biome); var xform = Transform(uid); diff --git a/Content.Server/Players/JobWhitelist/JobWhitelistManager.cs b/Content.Server/Players/JobWhitelist/JobWhitelistManager.cs index 04289a40980..72f18e00cbe 100644 --- a/Content.Server/Players/JobWhitelist/JobWhitelistManager.cs +++ b/Content.Server/Players/JobWhitelist/JobWhitelistManager.cs @@ -63,7 +63,7 @@ public sealed class JobWhitelistManager : IPostInjectInit if (!_config.GetCVar(CCVars.GameRoleWhitelist)) return true; - if (!_prototypes.TryIndex(job, out var jobPrototype) || + if (!_prototypes.Resolve(job, out var jobPrototype) || !jobPrototype.Whitelisted) { return true; diff --git a/Content.Server/Players/PlayTimeTracking/PlayTimeTrackingSystem.cs b/Content.Server/Players/PlayTimeTracking/PlayTimeTrackingSystem.cs index e75801d6de0..d55920f83c8 100644 --- a/Content.Server/Players/PlayTimeTracking/PlayTimeTrackingSystem.cs +++ b/Content.Server/Players/PlayTimeTracking/PlayTimeTrackingSystem.cs @@ -238,7 +238,7 @@ public sealed class PlayTimeTrackingSystem : EntitySystem for (var i = 0; i < jobs.Count; i++) { - if (_prototypes.TryIndex(jobs[i], out var job) + if (_prototypes.Resolve(jobs[i], out var job) && JobRequirements.TryRequirementsMet(job, playTimes, out _, EntityManager, _prototypes, (HumanoidCharacterProfile?) _preferencesManager.GetPreferences(userId).SelectedCharacter)) { continue; diff --git a/Content.Server/Polymorph/Systems/PolymorphSystem.cs b/Content.Server/Polymorph/Systems/PolymorphSystem.cs index b9453d2924b..9547bc1ea52 100644 --- a/Content.Server/Polymorph/Systems/PolymorphSystem.cs +++ b/Content.Server/Polymorph/Systems/PolymorphSystem.cs @@ -112,7 +112,7 @@ public sealed partial class PolymorphSystem : EntitySystem private void OnPolymorphActionEvent(Entity ent, ref PolymorphActionEvent args) { - if (!_proto.TryIndex(args.ProtoId, out var prototype) || args.Handled) + if (!_proto.Resolve(args.ProtoId, out var prototype) || args.Handled) return; PolymorphEntity(ent, prototype.Configuration); @@ -389,7 +389,7 @@ public sealed partial class PolymorphSystem : EntitySystem if (target.Comp.PolymorphActions.ContainsKey(id)) return; - if (!_proto.TryIndex(id, out var polyProto)) + if (!_proto.Resolve(id, out var polyProto)) return; var entProto = _proto.Index(polyProto.Configuration.Entity); diff --git a/Content.Server/Polymorph/Toolshed/PolymorphCommand.cs b/Content.Server/Polymorph/Toolshed/PolymorphCommand.cs index db1e1faad6b..23caff1e5d0 100644 --- a/Content.Server/Polymorph/Toolshed/PolymorphCommand.cs +++ b/Content.Server/Polymorph/Toolshed/PolymorphCommand.cs @@ -25,8 +25,7 @@ public sealed class PolymorphCommand : ToolshedCommand { _system ??= GetSys(); - if (!_proto.TryIndex(protoId, out var prototype)) - return null; + var prototype = _proto.Index(protoId); return _system.PolymorphEntity(input, prototype.Configuration); } diff --git a/Content.Server/Procedural/DungeonJob/DungeonJob.Biome.cs b/Content.Server/Procedural/DungeonJob/DungeonJob.Biome.cs index 48adb8af188..10f11bb8541 100644 --- a/Content.Server/Procedural/DungeonJob/DungeonJob.Biome.cs +++ b/Content.Server/Procedural/DungeonJob/DungeonJob.Biome.cs @@ -16,7 +16,7 @@ public sealed partial class DungeonJob /// private async Task PostGen(BiomeDunGen dunGen, Dungeon dungeon, HashSet reservedTiles, Random random) { - if (!_prototype.TryIndex(dunGen.BiomeTemplate, out var indexedBiome)) + if (!_prototype.Resolve(dunGen.BiomeTemplate, out var indexedBiome)) return; var biomeSystem = _entManager.System(); diff --git a/Content.Server/Procedural/DungeonJob/DungeonJob.MiddleConnection.cs b/Content.Server/Procedural/DungeonJob/DungeonJob.MiddleConnection.cs index d6e3c09d622..451bb8baee5 100644 --- a/Content.Server/Procedural/DungeonJob/DungeonJob.MiddleConnection.cs +++ b/Content.Server/Procedural/DungeonJob/DungeonJob.MiddleConnection.cs @@ -57,7 +57,7 @@ public sealed partial class DungeonJob var roomConnections = new Dictionary>(); var tileDef = _tileDefManager[gen.Tile]; - _prototype.TryIndex(gen.Flank, out var flankContents); + _prototype.Resolve(gen.Flank, out var flankContents); var contents = _prototype.Index(gen.Contents); foreach (var (room, border) in roomBorders) diff --git a/Content.Server/Procedural/DungeonJob/DungeonJob.Ore.cs b/Content.Server/Procedural/DungeonJob/DungeonJob.Ore.cs index 78ab2b7a0d2..92531912725 100644 --- a/Content.Server/Procedural/DungeonJob/DungeonJob.Ore.cs +++ b/Content.Server/Procedural/DungeonJob/DungeonJob.Ore.cs @@ -72,7 +72,7 @@ public sealed partial class DungeonJob var remapping = new Dictionary(); // TODO: Move this to engine - if (_prototype.TryIndex(gen.Entity, out var proto) && + if (_prototype.Resolve(gen.Entity, out var proto) && proto.Components.TryGetComponent("EntityRemap", out var comps)) { var remappingComp = (EntityRemapComponent) comps; diff --git a/Content.Server/Radiation/Systems/RadiationProtectionSystem.cs b/Content.Server/Radiation/Systems/RadiationProtectionSystem.cs index 5222c31bfe6..a32fa810c97 100644 --- a/Content.Server/Radiation/Systems/RadiationProtectionSystem.cs +++ b/Content.Server/Radiation/Systems/RadiationProtectionSystem.cs @@ -17,7 +17,7 @@ public sealed class RadiationProtectionSystem : EntitySystem private void OnInit(EntityUid uid, RadiationProtectionComponent component, ComponentInit args) { - if (!_prototypeManager.TryIndex(component.RadiationProtectionModifierSetId, out var modifier)) + if (!_prototypeManager.Resolve(component.RadiationProtectionModifierSetId, out var modifier)) return; var buffComp = EnsureComp(uid); // add the damage modifier if it isn't in the dict yet diff --git a/Content.Server/Radio/EntitySystems/RadioSystem.cs b/Content.Server/Radio/EntitySystems/RadioSystem.cs index bdc368fa932..6af52b980fc 100644 --- a/Content.Server/Radio/EntitySystems/RadioSystem.cs +++ b/Content.Server/Radio/EntitySystems/RadioSystem.cs @@ -84,7 +84,7 @@ public sealed class RadioSystem : EntitySystem name = FormattedMessage.EscapeText(name); SpeechVerbPrototype speech; - if (evt.SpeechVerb != null && _prototype.TryIndex(evt.SpeechVerb, out var evntProto)) + if (evt.SpeechVerb != null && _prototype.Resolve(evt.SpeechVerb, out var evntProto)) speech = evntProto; else speech = _chat.GetSpeechVerb(messageSource, message); diff --git a/Content.Server/Roles/RoleSystem.cs b/Content.Server/Roles/RoleSystem.cs index 346e13bd07b..71fb8a9cb57 100644 --- a/Content.Server/Roles/RoleSystem.cs +++ b/Content.Server/Roles/RoleSystem.cs @@ -49,7 +49,7 @@ public sealed class RoleSystem : SharedRoleSystem if (!Player.TryGetSessionById(mind.UserId, out var session)) return; - if (!_proto.TryIndex(mind.RoleType, out var proto)) + if (!_proto.Resolve(mind.RoleType, out var proto)) return; var roleText = Loc.GetString(proto.Name); diff --git a/Content.Server/Shuttles/Systems/ShuttleSystem.GridFill.cs b/Content.Server/Shuttles/Systems/ShuttleSystem.GridFill.cs index 2e6ebe396c5..ca704d8e506 100644 --- a/Content.Server/Shuttles/Systems/ShuttleSystem.GridFill.cs +++ b/Content.Server/Shuttles/Systems/ShuttleSystem.GridFill.cs @@ -89,7 +89,7 @@ public sealed partial class ShuttleSystem var dungeonProtoId = _random.Pick(group.Protos); - if (!_protoManager.TryIndex(dungeonProtoId, out var dungeonProto)) + if (!_protoManager.Resolve(dungeonProtoId, out var dungeonProto)) { return false; } @@ -192,7 +192,7 @@ public sealed partial class ShuttleSystem throw new NotImplementedException(); } - if (_protoManager.TryIndex(group.NameDataset, out var dataset)) + if (_protoManager.Resolve(group.NameDataset, out var dataset)) { _metadata.SetEntityName(spawned, _salvage.GetFTLName(dataset, _random.Next())); } diff --git a/Content.Server/Silicons/Borgs/BorgSwitchableTypeSystem.cs b/Content.Server/Silicons/Borgs/BorgSwitchableTypeSystem.cs index d1a32a6a5ba..e90acf1b80d 100644 --- a/Content.Server/Silicons/Borgs/BorgSwitchableTypeSystem.cs +++ b/Content.Server/Silicons/Borgs/BorgSwitchableTypeSystem.cs @@ -60,7 +60,7 @@ public sealed class BorgSwitchableTypeSystem : SharedBorgSwitchableTypeSystem } // Configure special components - if (Prototypes.TryIndex(ent.Comp.SelectedBorgType, out var previousPrototype)) + if (Prototypes.Resolve(ent.Comp.SelectedBorgType, out var previousPrototype)) { if (previousPrototype.AddComponents is { } removeComponents) EntityManager.RemoveComponents(ent, removeComponents); diff --git a/Content.Server/Spawners/EntitySystems/ContainerSpawnPointSystem.cs b/Content.Server/Spawners/EntitySystems/ContainerSpawnPointSystem.cs index db82dc70a29..1a592b99294 100644 --- a/Content.Server/Spawners/EntitySystems/ContainerSpawnPointSystem.cs +++ b/Content.Server/Spawners/EntitySystems/ContainerSpawnPointSystem.cs @@ -32,7 +32,7 @@ public sealed class ContainerSpawnPointSystem : EntitySystem // If it's just a spawn pref check if it's for cryo (silly). if (args.HumanoidCharacterProfile?.SpawnPriority != SpawnPriorityPreference.Cryosleep && - (!_proto.TryIndex(args.Job, out var jobProto) || jobProto.JobEntity == null)) + (!_proto.Resolve(args.Job, out var jobProto) || jobProto.JobEntity == null)) { return; } diff --git a/Content.Server/Speech/EmotesMenuSystem.cs b/Content.Server/Speech/EmotesMenuSystem.cs index a69b5a65e43..5f91742eb12 100644 --- a/Content.Server/Speech/EmotesMenuSystem.cs +++ b/Content.Server/Speech/EmotesMenuSystem.cs @@ -22,7 +22,7 @@ public sealed partial class EmotesMenuSystem : EntitySystem if (!player.HasValue) return; - if (!_prototypeManager.TryIndex(msg.ProtoId, out var proto) || proto.ChatTriggers.Count == 0) + if (!_prototypeManager.Resolve(msg.ProtoId, out var proto) || proto.ChatTriggers.Count == 0) return; _chat.TryEmoteWithChat(player.Value, msg.ProtoId); diff --git a/Content.Server/Spreader/SpreaderSystem.cs b/Content.Server/Spreader/SpreaderSystem.cs index 328f4f0504c..2bc067542d4 100644 --- a/Content.Server/Spreader/SpreaderSystem.cs +++ b/Content.Server/Spreader/SpreaderSystem.cs @@ -181,7 +181,7 @@ public sealed class SpreaderSystem : EntitySystem occupiedTiles = []; neighbors = []; // TODO remove occupiedTiles -- its currently unused and just slows this method down. - if (!_prototype.TryIndex(prototype, out var spreaderPrototype)) + if (!_prototype.Resolve(prototype, out var spreaderPrototype)) return; if (!TryComp(comp.GridUid, out var grid)) diff --git a/Content.Server/Station/Systems/StationJobsSystem.Roundstart.cs b/Content.Server/Station/Systems/StationJobsSystem.Roundstart.cs index c6c682bcf3d..3510aca85ec 100644 --- a/Content.Server/Station/Systems/StationJobsSystem.Roundstart.cs +++ b/Content.Server/Station/Systems/StationJobsSystem.Roundstart.cs @@ -362,7 +362,7 @@ public sealed partial class StationJobsSystem if (!(priority == selectedPriority || selectedPriority is null)) continue; - if (!_prototypeManager.TryIndex(jobId, out var job)) + if (!_prototypeManager.Resolve(jobId, out var job)) continue; if (!job.CanBeAntag && (!_player.TryGetSessionById(player, out var session) || antagBlocked.Contains(session))) diff --git a/Content.Server/Station/Systems/StationSpawningSystem.cs b/Content.Server/Station/Systems/StationSpawningSystem.cs index 46d2e308d06..3967e320a8e 100644 --- a/Content.Server/Station/Systems/StationSpawningSystem.cs +++ b/Content.Server/Station/Systems/StationSpawningSystem.cs @@ -88,7 +88,7 @@ public sealed class StationSpawningSystem : SharedStationSpawningSystem EntityUid? station, EntityUid? entity = null) { - _prototypeManager.TryIndex(job ?? string.Empty, out var prototype); + _prototypeManager.Resolve(job, out var prototype); RoleLoadout? loadout = null; // Need to get the loadout up-front to handle names if we use an entity spawn override. @@ -168,7 +168,7 @@ public sealed class StationSpawningSystem : SharedStationSpawningSystem private void DoJobSpecials(ProtoId? job, EntityUid entity) { - if (!_prototypeManager.TryIndex(job ?? string.Empty, out JobPrototype? prototype)) + if (!_prototypeManager.Resolve(job, out JobPrototype? prototype)) return; foreach (var jobSpecial in prototype.Special) @@ -199,7 +199,7 @@ public sealed class StationSpawningSystem : SharedStationSpawningSystem _cardSystem.TryChangeFullName(cardId, characterName, card); _cardSystem.TryChangeJobTitle(cardId, jobPrototype.LocalizedName, card); - if (_prototypeManager.TryIndex(jobPrototype.Icon, out var jobIcon)) + if (_prototypeManager.Resolve(jobPrototype.Icon, out var jobIcon)) _cardSystem.TryChangeJobIcon(cardId, jobIcon, card); var extendedAccess = false; diff --git a/Content.Server/StationEvents/EventManagerSystem.cs b/Content.Server/StationEvents/EventManagerSystem.cs index 6585fe32483..b86d30e2e7b 100644 --- a/Content.Server/StationEvents/EventManagerSystem.cs +++ b/Content.Server/StationEvents/EventManagerSystem.cs @@ -71,7 +71,7 @@ public sealed class EventManagerSystem : EntitySystem return; } - if (!_prototype.TryIndex(randomLimitedEvent, out _)) + if (!_prototype.Resolve(randomLimitedEvent, out _)) { Log.Warning("A requested event is not available!"); return; @@ -104,7 +104,7 @@ public sealed class EventManagerSystem : EntitySystem foreach (var eventid in selectedEvents) { - if (!_prototype.TryIndex(eventid, out var eventproto)) + if (!_prototype.Resolve(eventid, out var eventproto)) { Log.Warning("An event ID has no prototype index!"); continue; diff --git a/Content.Server/StationEvents/Events/GreytideVirusRule.cs b/Content.Server/StationEvents/Events/GreytideVirusRule.cs index 8d33b858de4..dba21911dc7 100644 --- a/Content.Server/StationEvents/Events/GreytideVirusRule.cs +++ b/Content.Server/StationEvents/Events/GreytideVirusRule.cs @@ -54,7 +54,7 @@ public sealed class GreytideVirusRule : StationEventSystem>(); foreach (var group in chosen) { - if (_prototype.TryIndex(group, out var proto)) + if (_prototype.Resolve(group, out var proto)) accessIds.UnionWith(proto.Tags); } diff --git a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraRouterSystem.cs b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraRouterSystem.cs index 32e42a52dd4..d4af86cd710 100644 --- a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraRouterSystem.cs +++ b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraRouterSystem.cs @@ -121,7 +121,7 @@ public sealed class SurveillanceCameraRouterSystem : EntitySystem return; } - if (!_prototypeManager.TryIndex(component.AvailableNetworks[args.Network], + if (!_prototypeManager.Resolve(component.AvailableNetworks[args.Network], out var frequency)) { return; diff --git a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraSystem.cs b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraSystem.cs index 2a288d90175..7f7dbc6c97c 100644 --- a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraSystem.cs +++ b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraSystem.cs @@ -190,7 +190,7 @@ public sealed class SurveillanceCameraSystem : EntitySystem return; } - if (!_prototypeManager.TryIndex(component.AvailableNetworks[args.Network], + if (!_prototypeManager.Resolve(component.AvailableNetworks[args.Network], out var frequency)) { return; diff --git a/Content.Server/Telephone/TelephoneSystem.cs b/Content.Server/Telephone/TelephoneSystem.cs index 46f45d12869..0e3090c77eb 100644 --- a/Content.Server/Telephone/TelephoneSystem.cs +++ b/Content.Server/Telephone/TelephoneSystem.cs @@ -340,7 +340,7 @@ public sealed class TelephoneSystem : SharedTelephoneSystem name = FormattedMessage.EscapeText(name); SpeechVerbPrototype speech; - if (ev.SpeechVerb != null && _prototype.TryIndex(ev.SpeechVerb, out var evntProto)) + if (ev.SpeechVerb != null && _prototype.Resolve(ev.SpeechVerb, out var evntProto)) speech = evntProto; else speech = _chat.GetSpeechVerb(messageSource, message); diff --git a/Content.Server/Traitor/Uplink/UplinkSystem.cs b/Content.Server/Traitor/Uplink/UplinkSystem.cs index f4a9ca75fda..e4aa7b5ec17 100644 --- a/Content.Server/Traitor/Uplink/UplinkSystem.cs +++ b/Content.Server/Traitor/Uplink/UplinkSystem.cs @@ -88,7 +88,7 @@ public sealed class UplinkSystem : EntitySystem /// private bool ImplantUplink(EntityUid user, FixedPoint2 balance, bool giveDiscounts) { - if (!_proto.TryIndex(FallbackUplinkCatalog, out var catalog)) + if (!_proto.Resolve(FallbackUplinkCatalog, out var catalog)) return false; if (!catalog.Cost.TryGetValue(TelecrystalCurrencyPrototype, out var cost)) diff --git a/Content.Server/Traits/TraitSystem.cs b/Content.Server/Traits/TraitSystem.cs index 59cb9537f2e..d6035f887b1 100644 --- a/Content.Server/Traits/TraitSystem.cs +++ b/Content.Server/Traits/TraitSystem.cs @@ -26,7 +26,7 @@ public sealed class TraitSystem : EntitySystem { // Check if player's job allows to apply traits if (args.JobId == null || - !_prototypeManager.TryIndex(args.JobId ?? string.Empty, out var protoJob) || + !_prototypeManager.Resolve(args.JobId, out var protoJob) || !protoJob.ApplyTraits) { return; @@ -36,7 +36,7 @@ public sealed class TraitSystem : EntitySystem { if (!_prototypeManager.TryIndex(traitId, out var traitPrototype)) { - Log.Warning($"No trait found with ID {traitId}!"); + Log.Error($"No trait found with ID {traitId}!"); return; } diff --git a/Content.Server/Trigger/Systems/SpeakOnTriggerSystem.cs b/Content.Server/Trigger/Systems/SpeakOnTriggerSystem.cs index 6da6f707c12..1e08587ce79 100644 --- a/Content.Server/Trigger/Systems/SpeakOnTriggerSystem.cs +++ b/Content.Server/Trigger/Systems/SpeakOnTriggerSystem.cs @@ -34,7 +34,7 @@ public sealed class SpeakOnTriggerSystem : EntitySystem message = Loc.GetString(ent.Comp.Text); else { - if (!_prototypeManager.TryIndex(ent.Comp.Pack, out var messagePack)) + if (!_prototypeManager.Resolve(ent.Comp.Pack, out var messagePack)) return; message = Loc.GetString(_random.Pick(messagePack.Values)); } diff --git a/Content.Server/Wires/WiresSystem.cs b/Content.Server/Wires/WiresSystem.cs index fef52a5b5d2..c9fd429c479 100644 --- a/Content.Server/Wires/WiresSystem.cs +++ b/Content.Server/Wires/WiresSystem.cs @@ -73,7 +73,7 @@ public sealed class WiresSystem : SharedWiresSystem List wireActions = new(); var dummyWires = 0; - if (!_protoMan.TryIndex(wires.LayoutId, out WireLayoutPrototype? layoutPrototype)) + if (!_protoMan.Resolve(wires.LayoutId, out WireLayoutPrototype? layoutPrototype)) { return; } diff --git a/Content.Server/Zombies/ZombieSystem.cs b/Content.Server/Zombies/ZombieSystem.cs index f4ff5dd60c6..5107a87c2a0 100644 --- a/Content.Server/Zombies/ZombieSystem.cs +++ b/Content.Server/Zombies/ZombieSystem.cs @@ -183,7 +183,7 @@ namespace Content.Server.Zombies if (args.Handled) return; - _protoManager.TryIndex(component.EmoteSoundsId, out var sounds); + _protoManager.Resolve(component.EmoteSoundsId, out var sounds); args.Handled = _chat.TryPlayEmoteSound(uid, sounds, args.Emote); } diff --git a/Content.Shared/Access/Components/AccessComponent.cs b/Content.Shared/Access/Components/AccessComponent.cs index 00ee87b3b67..dce9d4b76b8 100644 --- a/Content.Shared/Access/Components/AccessComponent.cs +++ b/Content.Shared/Access/Components/AccessComponent.cs @@ -51,7 +51,7 @@ public record struct GetAccessTagsEvent(HashSet> T { public void AddGroup(ProtoId group) { - if (!PrototypeManager.TryIndex(group, out var groupPrototype)) + if (!PrototypeManager.Resolve(group, out var groupPrototype)) return; Tags.UnionWith(groupPrototype.Tags); diff --git a/Content.Shared/Access/Components/IdCardComponent.cs b/Content.Shared/Access/Components/IdCardComponent.cs index 9ca82b67b4a..93c61ea9f09 100644 --- a/Content.Shared/Access/Components/IdCardComponent.cs +++ b/Content.Shared/Access/Components/IdCardComponent.cs @@ -41,7 +41,7 @@ public sealed partial class IdCardComponent : Component /// [DataField] [AutoNetworkedField] - public ProtoId? JobPrototype; + public ProtoId? JobPrototype; /// /// The proto IDs of the departments associated with the job diff --git a/Content.Shared/Access/Components/IdCardConsoleComponent.cs b/Content.Shared/Access/Components/IdCardConsoleComponent.cs index 8d54024f72a..8c965971a8e 100644 --- a/Content.Shared/Access/Components/IdCardConsoleComponent.cs +++ b/Content.Shared/Access/Components/IdCardConsoleComponent.cs @@ -1,5 +1,6 @@ using Content.Shared.Access.Systems; using Content.Shared.Containers.ItemSlots; +using Content.Shared.Roles; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; @@ -25,9 +26,9 @@ public sealed partial class IdCardConsoleComponent : Component public readonly string FullName; public readonly string JobTitle; public readonly List> AccessList; - public readonly ProtoId JobPrototype; + public readonly ProtoId JobPrototype; - public WriteToTargetIdMessage(string fullName, string jobTitle, List> accessList, ProtoId jobPrototype) + public WriteToTargetIdMessage(string fullName, string jobTitle, List> accessList, ProtoId jobPrototype) { FullName = fullName; JobTitle = jobTitle; @@ -85,7 +86,7 @@ public sealed partial class IdCardConsoleComponent : Component public readonly string? TargetIdJobTitle; public readonly List>? TargetIdAccessList; public readonly List>? AllowedModifyAccessList; - public readonly ProtoId TargetIdJobPrototype; + public readonly ProtoId TargetIdJobPrototype; public IdCardConsoleBoundUserInterfaceState(bool isPrivilegedIdPresent, bool isPrivilegedIdAuthorized, @@ -94,7 +95,7 @@ public sealed partial class IdCardConsoleComponent : Component string? targetIdJobTitle, List>? targetIdAccessList, List>? allowedModifyAccessList, - ProtoId targetIdJobPrototype, + ProtoId targetIdJobPrototype, string privilegedIdName, string targetIdName) { diff --git a/Content.Shared/Access/Systems/SharedAccessSystem.cs b/Content.Shared/Access/Systems/SharedAccessSystem.cs index a4b04c35597..e161d90e914 100644 --- a/Content.Shared/Access/Systems/SharedAccessSystem.cs +++ b/Content.Shared/Access/Systems/SharedAccessSystem.cs @@ -23,7 +23,7 @@ namespace Content.Shared.Access.Systems // Add all tags in groups to the list of tags. foreach (var group in component.Groups) { - if (!_prototypeManager.TryIndex(group, out var proto)) + if (!_prototypeManager.Resolve(group, out var proto)) continue; component.Tags.UnionWith(proto.Tags); @@ -79,7 +79,7 @@ namespace Content.Shared.Access.Systems foreach (var group in newGroups) { - if (!_prototypeManager.TryIndex(group, out var proto)) + if (!_prototypeManager.Resolve(group, out var proto)) continue; access.Tags.UnionWith(proto.Tags); diff --git a/Content.Shared/Atmos/EntitySystems/SharedAtmosPipeLayersSystem.cs b/Content.Shared/Atmos/EntitySystems/SharedAtmosPipeLayersSystem.cs index f6ec1c5799e..708f8ecb3fa 100644 --- a/Content.Shared/Atmos/EntitySystems/SharedAtmosPipeLayersSystem.cs +++ b/Content.Shared/Atmos/EntitySystems/SharedAtmosPipeLayersSystem.cs @@ -52,7 +52,7 @@ public abstract partial class SharedAtmosPipeLayersSystem : EntitySystem if (ent.Comp.NumberOfPipeLayers <= 1 || ent.Comp.PipeLayersLocked) return; - if (!_protoManager.TryIndex(ent.Comp.Tool, out var toolProto)) + if (!_protoManager.Resolve(ent.Comp.Tool, out var toolProto)) return; var user = args.User; @@ -138,7 +138,7 @@ public abstract partial class SharedAtmosPipeLayersSystem : EntitySystem if (!TryGetHeldTool(args.User, ent.Comp.Tool, out var tool)) { - if (_protoManager.TryIndex(ent.Comp.Tool, out var toolProto)) + if (_protoManager.Resolve(ent.Comp.Tool, out var toolProto)) { var toolName = Loc.GetString(toolProto.ToolName).ToLower(); var message = Loc.GetString("atmos-pipe-layers-component-tool-missing", ("toolName", toolName)); diff --git a/Content.Shared/BarSign/BarSignSystem.cs b/Content.Shared/BarSign/BarSignSystem.cs index bf28cfe6b7a..0c9770bfe98 100644 --- a/Content.Shared/BarSign/BarSignSystem.cs +++ b/Content.Shared/BarSign/BarSignSystem.cs @@ -31,7 +31,7 @@ public sealed class BarSignSystem : EntitySystem private void OnSetBarSignMessage(Entity ent, ref SetBarSignMessage args) { - if (!_prototypeManager.TryIndex(args.Sign, out var signPrototype)) + if (!_prototypeManager.Resolve(args.Sign, out var signPrototype)) return; SetBarSign(ent, signPrototype); diff --git a/Content.Shared/Body/Systems/SharedBloodstreamSystem.cs b/Content.Shared/Body/Systems/SharedBloodstreamSystem.cs index 4b3270f1ed8..3b46d3913c3 100644 --- a/Content.Shared/Body/Systems/SharedBloodstreamSystem.cs +++ b/Content.Shared/Body/Systems/SharedBloodstreamSystem.cs @@ -191,7 +191,7 @@ public abstract class SharedBloodstreamSystem : EntitySystem } // TODO probably cache this or something. humans get hurt a lot - if (!_prototypeManager.TryIndex(ent.Comp.DamageBleedModifiers, out var modifiers)) + if (!_prototypeManager.Resolve(ent.Comp.DamageBleedModifiers, out var modifiers)) return; // some reagents may deal and heal different damage types in the same tick, which means DamageIncreased will be true diff --git a/Content.Shared/Cargo/Prototypes/CargoProductPrototype.cs b/Content.Shared/Cargo/Prototypes/CargoProductPrototype.cs index d98c9bd8f78..46a3a0de137 100644 --- a/Content.Shared/Cargo/Prototypes/CargoProductPrototype.cs +++ b/Content.Shared/Cargo/Prototypes/CargoProductPrototype.cs @@ -36,7 +36,7 @@ namespace Content.Shared.Cargo.Prototypes if (_name.Trim().Length != 0) return _name; - if (IoCManager.Resolve().TryIndex(Product, out EntityPrototype? prototype)) + if (IoCManager.Resolve().Resolve(Product, out EntityPrototype? prototype)) { _name = prototype.Name; } @@ -56,7 +56,7 @@ namespace Content.Shared.Cargo.Prototypes if (_description.Trim().Length != 0) return _description; - if (IoCManager.Resolve().TryIndex(Product, out EntityPrototype? prototype)) + if (IoCManager.Resolve().Resolve(Product, out EntityPrototype? prototype)) { _description = prototype.Description; } diff --git a/Content.Shared/Clothing/EntitySystems/SharedChameleonClothingSystem.cs b/Content.Shared/Clothing/EntitySystems/SharedChameleonClothingSystem.cs index 4b38d926f6d..18b79bf52bb 100644 --- a/Content.Shared/Clothing/EntitySystems/SharedChameleonClothingSystem.cs +++ b/Content.Shared/Clothing/EntitySystems/SharedChameleonClothingSystem.cs @@ -74,7 +74,7 @@ public abstract class SharedChameleonClothingSystem : EntitySystem protected void UpdateVisuals(EntityUid uid, ChameleonClothingComponent component) { if (string.IsNullOrEmpty(component.Default) || - !_proto.TryIndex(component.Default, out EntityPrototype? proto)) + !_proto.Resolve(component.Default, out EntityPrototype? proto)) return; // world sprite icon diff --git a/Content.Shared/Clothing/LoadoutSystem.cs b/Content.Shared/Clothing/LoadoutSystem.cs index 08b4f5f7630..dfe6d1377ba 100644 --- a/Content.Shared/Clothing/LoadoutSystem.cs +++ b/Content.Shared/Clothing/LoadoutSystem.cs @@ -44,7 +44,7 @@ public sealed class LoadoutSystem : EntitySystem { EntProtoId? proto = null; - if (_protoMan.TryIndex(loadout.StartingGear, out var gear)) + if (_protoMan.Resolve(loadout.StartingGear, out var gear)) { proto = GetFirstOrNull(gear); } @@ -65,12 +65,12 @@ public sealed class LoadoutSystem : EntitySystem if (count == 1) { - if (gear.Equipment.Count == 1 && _protoMan.TryIndex(gear.Equipment.Values.First(), out var proto)) + if (gear.Equipment.Count == 1 && _protoMan.Resolve(gear.Equipment.Values.First(), out var proto)) { return proto.ID; } - if (gear.Inhand.Count == 1 && _protoMan.TryIndex(gear.Inhand[0], out proto)) + if (gear.Inhand.Count == 1 && _protoMan.Resolve(gear.Inhand[0], out proto)) { return proto.ID; } @@ -90,10 +90,10 @@ public sealed class LoadoutSystem : EntitySystem public string GetName(LoadoutPrototype loadout) { - if (loadout.DummyEntity is not null && _protoMan.TryIndex(loadout.DummyEntity, out var proto)) + if (loadout.DummyEntity is not null && _protoMan.Resolve(loadout.DummyEntity, out var proto)) return proto.Name; - if (_protoMan.TryIndex(loadout.StartingGear, out var gear)) + if (_protoMan.Resolve(loadout.StartingGear, out var gear)) { return GetName(gear); } diff --git a/Content.Shared/ComponentTable/SharedComponentTableSystem.cs b/Content.Shared/ComponentTable/SharedComponentTableSystem.cs index cdb1b2dc74f..e4ff8553521 100644 --- a/Content.Shared/ComponentTable/SharedComponentTableSystem.cs +++ b/Content.Shared/ComponentTable/SharedComponentTableSystem.cs @@ -24,7 +24,7 @@ public sealed class SharedComponentTableSystem : EntitySystem foreach (var entity in spawns) { - if (_proto.TryIndex(entity, out var entProto)) + if (_proto.Resolve(entity, out var entProto)) { EntityManager.AddComponents(ent, entProto.Components); } diff --git a/Content.Shared/Construction/MachinePartSystem.cs b/Content.Shared/Construction/MachinePartSystem.cs index f3314dfc11b..7ac9fde94c7 100644 --- a/Content.Shared/Construction/MachinePartSystem.cs +++ b/Content.Shared/Construction/MachinePartSystem.cs @@ -109,7 +109,7 @@ namespace Content.Shared.Construction materials[mat] += matAmount * amount * coefficient; } } - else if (_prototype.TryIndex(defaultProtoId, out var defaultProto) && + else if (_prototype.Resolve(defaultProtoId, out var defaultProto) && defaultProto.TryGetComponent(out var physComp, EntityManager.ComponentFactory)) { foreach (var (mat, matAmount) in physComp.MaterialComposition) diff --git a/Content.Shared/Containers/ContainerCompSystem.cs b/Content.Shared/Containers/ContainerCompSystem.cs index 75908efea3a..d9eac28dabc 100644 --- a/Content.Shared/Containers/ContainerCompSystem.cs +++ b/Content.Shared/Containers/ContainerCompSystem.cs @@ -24,7 +24,7 @@ public sealed class ContainerCompSystem : EntitySystem if (args.Container.ID != ent.Comp.Container || _timing.ApplyingState) return; - if (_proto.TryIndex(ent.Comp.Proto, out var entProto)) + if (_proto.Resolve(ent.Comp.Proto, out var entProto)) { EntityManager.RemoveComponents(args.Entity, entProto.Components); } @@ -35,7 +35,7 @@ public sealed class ContainerCompSystem : EntitySystem if (args.Container.ID != ent.Comp.Container || _timing.ApplyingState) return; - if (_proto.TryIndex(ent.Comp.Proto, out var entProto)) + if (_proto.Resolve(ent.Comp.Proto, out var entProto)) { EntityManager.AddComponents(args.Entity, entProto.Components); } diff --git a/Content.Shared/Damage/Systems/DamageableSystem.cs b/Content.Shared/Damage/Systems/DamageableSystem.cs index 70fbc468068..f3a4f378301 100644 --- a/Content.Shared/Damage/Systems/DamageableSystem.cs +++ b/Content.Shared/Damage/Systems/DamageableSystem.cs @@ -92,7 +92,7 @@ namespace Content.Shared.Damage private void DamageableInit(EntityUid uid, DamageableComponent component, ComponentInit _) { if (component.DamageContainerID != null && - _prototypeManager.TryIndex(component.DamageContainerID, + _prototypeManager.Resolve(component.DamageContainerID, out var damageContainerPrototype)) { // Initialize damage dictionary, using the types and groups from the damage @@ -195,7 +195,7 @@ namespace Content.Shared.Damage if (!ignoreResistances) { if (damageable.DamageModifierSetId != null && - _prototypeManager.TryIndex(damageable.DamageModifierSetId, out var modifierSet)) + _prototypeManager.Resolve(damageable.DamageModifierSetId, out var modifierSet)) { // TODO DAMAGE PERFORMANCE // use a local private field instead of creating a new dictionary here.. diff --git a/Content.Shared/Humanoid/Markings/MarkingManager.cs b/Content.Shared/Humanoid/Markings/MarkingManager.cs index e844dc2280f..28637f93034 100644 --- a/Content.Shared/Humanoid/Markings/MarkingManager.cs +++ b/Content.Shared/Humanoid/Markings/MarkingManager.cs @@ -254,9 +254,9 @@ namespace Content.Shared.Humanoid.Markings IoCManager.Resolve(ref prototypeManager); var speciesProto = prototypeManager.Index(species); if ( - !prototypeManager.TryIndex(speciesProto.SpriteSet, out var baseSprites) || + !prototypeManager.Resolve(speciesProto.SpriteSet, out var baseSprites) || !baseSprites.Sprites.TryGetValue(layer, out var spriteName) || - !prototypeManager.TryIndex(spriteName, out HumanoidSpeciesSpriteLayer? sprite) || + !prototypeManager.Resolve(spriteName, out HumanoidSpeciesSpriteLayer? sprite) || sprite == null || !sprite.MarkingsMatchSkin ) diff --git a/Content.Shared/Humanoid/SharedHumanoidAppearanceSystem.cs b/Content.Shared/Humanoid/SharedHumanoidAppearanceSystem.cs index 1df46e53d63..7a22c0c29e8 100644 --- a/Content.Shared/Humanoid/SharedHumanoidAppearanceSystem.cs +++ b/Content.Shared/Humanoid/SharedHumanoidAppearanceSystem.cs @@ -91,7 +91,7 @@ public abstract class SharedHumanoidAppearanceSystem : EntitySystem } if (string.IsNullOrEmpty(humanoid.Initial) - || !_proto.TryIndex(humanoid.Initial, out HumanoidProfilePrototype? startingSet)) + || !_proto.Resolve(humanoid.Initial, out HumanoidProfilePrototype? startingSet)) { LoadProfile(uid, HumanoidCharacterProfile.DefaultWithSpecies(humanoid.Species), humanoid); return; @@ -292,7 +292,7 @@ public abstract class SharedHumanoidAppearanceSystem : EntitySystem if (!Resolve(uid, ref humanoid)) return; - if (!_proto.TryIndex(humanoid.Species, out var species)) + if (!_proto.Resolve(humanoid.Species, out var species)) { return; } diff --git a/Content.Shared/Light/EntitySystems/UnpoweredFlashlightSystem.cs b/Content.Shared/Light/EntitySystems/UnpoweredFlashlightSystem.cs index 6dc6cbfe0b3..ce3c016080c 100644 --- a/Content.Shared/Light/EntitySystems/UnpoweredFlashlightSystem.cs +++ b/Content.Shared/Light/EntitySystems/UnpoweredFlashlightSystem.cs @@ -86,7 +86,7 @@ public sealed class UnpoweredFlashlightSystem : EntitySystem if (!_light.TryGetLight(uid, out var light)) return; - if (_prototypeManager.TryIndex(component.EmaggedColorsPrototype, out var possibleColors)) + if (_prototypeManager.Resolve(component.EmaggedColorsPrototype, out var possibleColors)) { var pick = _random.Pick(possibleColors.Colors.Values); _light.SetColor(uid, pick, light); diff --git a/Content.Shared/Nutrition/EntitySystems/FoodSequenceSystem.cs b/Content.Shared/Nutrition/EntitySystems/FoodSequenceSystem.cs index 0fa85666a02..697845b231f 100644 --- a/Content.Shared/Nutrition/EntitySystems/FoodSequenceSystem.cs +++ b/Content.Shared/Nutrition/EntitySystems/FoodSequenceSystem.cs @@ -45,7 +45,7 @@ public sealed class FoodSequenceSystem : SharedFoodSequenceSystem if (!TryComp(args.Start, out var start)) return; - if (!_proto.TryIndex(args.Proto, out var elementProto)) + if (!_proto.Resolve(args.Proto, out var elementProto)) return; if (!ent.Comp.OnlyFinal || elementProto.Final || start.FoodLayers.Count == start.MaxLayers) @@ -117,8 +117,7 @@ public sealed class FoodSequenceSystem : SharedFoodSequenceSystem //looking for a suitable FoodSequence prototype if (!element.Comp1.Entries.TryGetValue(start.Comp.Key, out var elementProto)) return false; - - if (!_proto.TryIndex(elementProto, out var elementIndexed)) + if (!_proto.Resolve(elementProto, out var elementIndexed)) return false; //if we run out of space, we can still put in one last, final finishing element. @@ -185,7 +184,7 @@ public sealed class FoodSequenceSystem : SharedFoodSequenceSystem var nameCounter = 1; foreach (var proto in existedContentNames) { - if (!_proto.TryIndex(proto, out var protoIndexed)) + if (!_proto.Resolve(proto, out var protoIndexed)) continue; if (protoIndexed.Name is null) diff --git a/Content.Shared/Nutrition/EntitySystems/HungerSystem.cs b/Content.Shared/Nutrition/EntitySystems/HungerSystem.cs index bd869c64154..559a6a1019a 100644 --- a/Content.Shared/Nutrition/EntitySystems/HungerSystem.cs +++ b/Content.Shared/Nutrition/EntitySystems/HungerSystem.cs @@ -237,13 +237,13 @@ public sealed class HungerSystem : EntitySystem switch (component.CurrentThreshold) { case HungerThreshold.Overfed: - _prototype.TryIndex(HungerIconOverfedId, out prototype); + _prototype.Resolve(HungerIconOverfedId, out prototype); break; case HungerThreshold.Peckish: - _prototype.TryIndex(HungerIconPeckishId, out prototype); + _prototype.Resolve(HungerIconPeckishId, out prototype); break; case HungerThreshold.Starving: - _prototype.TryIndex(HungerIconStarvingId, out prototype); + _prototype.Resolve(HungerIconStarvingId, out prototype); break; default: prototype = null; diff --git a/Content.Shared/Nutrition/EntitySystems/ThirstSystem.cs b/Content.Shared/Nutrition/EntitySystems/ThirstSystem.cs index 808337639ab..ff0ce54953c 100644 --- a/Content.Shared/Nutrition/EntitySystems/ThirstSystem.cs +++ b/Content.Shared/Nutrition/EntitySystems/ThirstSystem.cs @@ -126,15 +126,15 @@ public sealed class ThirstSystem : EntitySystem switch (component.CurrentThirstThreshold) { case ThirstThreshold.OverHydrated: - _prototype.TryIndex(ThirstIconOverhydratedId, out prototype); + _prototype.Resolve(ThirstIconOverhydratedId, out prototype); break; case ThirstThreshold.Thirsty: - _prototype.TryIndex(ThirstIconThirstyId, out prototype); + _prototype.Resolve(ThirstIconThirstyId, out prototype); break; case ThirstThreshold.Parched: - _prototype.TryIndex(ThirstIconParchedId, out prototype); + _prototype.Resolve(ThirstIconParchedId, out prototype); break; default: diff --git a/Content.Shared/Nutrition/FoodMetamorphRules/FoodMetamorphRule.cs b/Content.Shared/Nutrition/FoodMetamorphRules/FoodMetamorphRule.cs index 9e59573ff85..b5c8ad08c52 100644 --- a/Content.Shared/Nutrition/FoodMetamorphRules/FoodMetamorphRule.cs +++ b/Content.Shared/Nutrition/FoodMetamorphRules/FoodMetamorphRule.cs @@ -53,7 +53,7 @@ public sealed partial class LastElementHasTags : FoodMetamorphRule { var lastIngredient = ingredients[ingredients.Count - 1]; - if (!protoMan.TryIndex(lastIngredient.Proto, out var protoIndexed)) + if (!protoMan.Resolve(lastIngredient.Proto, out var protoIndexed)) return false; foreach (var tag in Tags) @@ -96,7 +96,7 @@ public sealed partial class ElementHasTags : FoodMetamorphRule if (ingredients.Count < ElementNumber + 1) return false; - if (!protoMan.TryIndex(ingredients[ElementNumber].Proto, out var protoIndexed)) + if (!protoMan.Resolve(ingredients[ElementNumber].Proto, out var protoIndexed)) return false; foreach (var tag in Tags) @@ -180,7 +180,7 @@ public sealed partial class IngredientsWithTags : FoodMetamorphRule var count = 0; foreach (var ingredient in ingredients) { - if (!protoMan.TryIndex(ingredient.Proto, out var protoIndexed)) + if (!protoMan.Resolve(ingredient.Proto, out var protoIndexed)) continue; var allowed = false; diff --git a/Content.Shared/Preferences/HumanoidCharacterProfile.cs b/Content.Shared/Preferences/HumanoidCharacterProfile.cs index f22669ddc70..e3447fdf3ab 100644 --- a/Content.Shared/Preferences/HumanoidCharacterProfile.cs +++ b/Content.Shared/Preferences/HumanoidCharacterProfile.cs @@ -399,7 +399,7 @@ namespace Content.Shared.Preferences // Category not found so dump it. TraitCategoryPrototype? traitCategory = null; - if (category != null && !protoManager.TryIndex(category, out traitCategory)) + if (category != null && !protoManager.Resolve(category, out traitCategory)) return new(this); var list = new HashSet>(_traitPreferences) { traitId }; @@ -662,7 +662,7 @@ namespace Content.Shared.Preferences } // No category so dump it. - if (!protoManager.TryIndex(traitProto.Category, out var category)) + if (!protoManager.Resolve(traitProto.Category, out var category)) continue; var existing = groups.GetOrNew(category.ID); diff --git a/Content.Shared/RCD/Systems/RCDSystem.cs b/Content.Shared/RCD/Systems/RCDSystem.cs index cb8450a5006..2e638d7c13b 100644 --- a/Content.Shared/RCD/Systems/RCDSystem.cs +++ b/Content.Shared/RCD/Systems/RCDSystem.cs @@ -111,7 +111,7 @@ public sealed class RCDSystem : EntitySystem var name = Loc.GetString(prototype.SetName); if (prototype.Prototype != null && - _protoManager.TryIndex(prototype.Prototype, out var proto)) + _protoManager.Resolve(prototype.Prototype, out var proto)) name = proto.Name; msg = Loc.GetString("rcd-component-examine-build-details", ("name", name)); @@ -178,7 +178,7 @@ public sealed class RCDSystem : EntitySystem var deconstructedTile = _mapSystem.GetTileRef(gridUid.Value, mapGrid, location); var protoName = !_turf.IsSpace(deconstructedTile) ? _deconstructTileProto : _deconstructLatticeProto; - if (_protoManager.TryIndex(protoName, out var deconProto)) + if (_protoManager.Resolve(protoName, out var deconProto)) { cost = deconProto.Cost; delay = deconProto.Delay; diff --git a/Content.Shared/Roles/JobRequirement/DepartmentTimeRequirement.cs b/Content.Shared/Roles/JobRequirement/DepartmentTimeRequirement.cs index 8c862992103..4034b8b419d 100644 --- a/Content.Shared/Roles/JobRequirement/DepartmentTimeRequirement.cs +++ b/Content.Shared/Roles/JobRequirement/DepartmentTimeRequirement.cs @@ -53,7 +53,7 @@ public sealed partial class DepartmentTimeRequirement : JobRequirement var formattedDeptDiff = ContentLocalizationManager.FormatPlaytime(deptDiffSpan); var nameDepartment = "role-timer-department-unknown"; - if (protoManager.TryIndex(Department, out var departmentIndexed)) + if (protoManager.Resolve(Department, out var departmentIndexed)) { nameDepartment = departmentIndexed.Name; } diff --git a/Content.Shared/Roles/Jobs/SharedJobSystem.cs b/Content.Shared/Roles/Jobs/SharedJobSystem.cs index 6526a3237af..867842308e5 100644 --- a/Content.Shared/Roles/Jobs/SharedJobSystem.cs +++ b/Content.Shared/Roles/Jobs/SharedJobSystem.cs @@ -161,7 +161,7 @@ public abstract class SharedJobSystem : EntitySystem prototype = null; MindTryGetJobId(mindId, out var protoId); - return _prototypes.TryIndex(protoId, out prototype) || prototype is not null; + return _prototypes.Resolve(protoId, out prototype) || prototype is not null; } public bool MindTryGetJobId( diff --git a/Content.Shared/Roles/SharedRoleSystem.cs b/Content.Shared/Roles/SharedRoleSystem.cs index d1afae9fd1c..ea25555257f 100644 --- a/Content.Shared/Roles/SharedRoleSystem.cs +++ b/Content.Shared/Roles/SharedRoleSystem.cs @@ -140,7 +140,7 @@ public abstract class SharedRoleSystem : EntitySystem return; } - if (!_prototypes.TryIndex(protoId, out var protoEnt)) + if (!_prototypes.Resolve(protoId, out var protoEnt)) { Log.Error($"Failed to add role {protoId} to {ToPrettyString(mindId)} : Role prototype does not exist"); return; diff --git a/Content.Shared/Silicons/Borgs/SharedBorgSwitchableTypeSystem.cs b/Content.Shared/Silicons/Borgs/SharedBorgSwitchableTypeSystem.cs index 914470e3c9a..12a7928c0be 100644 --- a/Content.Shared/Silicons/Borgs/SharedBorgSwitchableTypeSystem.cs +++ b/Content.Shared/Silicons/Borgs/SharedBorgSwitchableTypeSystem.cs @@ -100,7 +100,7 @@ public abstract class SharedBorgSwitchableTypeSystem : EntitySystem protected void UpdateEntityAppearance(Entity entity) { - if (!Prototypes.TryIndex(entity.Comp.SelectedBorgType, out var proto)) + if (!Prototypes.Resolve(entity.Comp.SelectedBorgType, out var proto)) return; UpdateEntityAppearance(entity, proto); diff --git a/Content.Shared/Silicons/StationAi/SharedStationAiSystem.Customization.cs b/Content.Shared/Silicons/StationAi/SharedStationAiSystem.Customization.cs index d3f3fe42973..7a5131c9a17 100644 --- a/Content.Shared/Silicons/StationAi/SharedStationAiSystem.Customization.cs +++ b/Content.Shared/Silicons/StationAi/SharedStationAiSystem.Customization.cs @@ -15,7 +15,7 @@ public abstract partial class SharedStationAiSystem private void OnStationAiCustomization(Entity entity, ref StationAiCustomizationMessage args) { - if (!_protoManager.TryIndex(args.GroupProtoId, out var groupPrototype) || !_protoManager.TryIndex(args.CustomizationProtoId, out var customizationProto)) + if (!_protoManager.Resolve(args.GroupProtoId, out var groupPrototype) || !_protoManager.Resolve(args.CustomizationProtoId, out var customizationProto)) return; if (!TryGetHeld((entity, entity.Comp), out var held)) @@ -48,7 +48,7 @@ public abstract partial class SharedStationAiSystem if (!entity.Comp.ProtoIds.TryGetValue(_stationAiHologramCustomGroupProtoId, out var protoId)) return; - if (!_protoManager.TryIndex(protoId, out var prototype)) + if (!_protoManager.Resolve(protoId, out var prototype)) return; if (!prototype.LayerData.TryGetValue(StationAiState.Hologram.ToString(), out var layerData)) @@ -70,7 +70,7 @@ public abstract partial class SharedStationAiSystem if (!TryComp(stationAi, out var stationAiCustomization) || !stationAiCustomization.ProtoIds.TryGetValue(_stationAiCoreCustomGroupProtoId, out var protoId) || - !_protoManager.TryIndex(protoId, out var prototype) || + !_protoManager.Resolve(protoId, out var prototype) || !prototype.LayerData.TryGetValue(state.ToString(), out var layerData)) { return; diff --git a/Content.Shared/SprayPainter/SharedSprayPainterSystem.cs b/Content.Shared/SprayPainter/SharedSprayPainterSystem.cs index 0a766df3489..a1316e35652 100644 --- a/Content.Shared/SprayPainter/SharedSprayPainterSystem.cs +++ b/Content.Shared/SprayPainter/SharedSprayPainterSystem.cs @@ -181,7 +181,7 @@ public abstract class SharedSprayPainterSystem : EntitySystem if (ent.Comp.Group is not { } group || !painter.StylesByGroup.TryGetValue(group, out var selectedStyle) - || !Proto.TryIndex(group, out PaintableGroupPrototype? targetGroup)) + || !Proto.Resolve(group, out PaintableGroupPrototype? targetGroup)) return; // Valid paint target. diff --git a/Content.Shared/Station/SharedStationSpawningSystem.cs b/Content.Shared/Station/SharedStationSpawningSystem.cs index ac65bd55841..4ed0da5b9e5 100644 --- a/Content.Shared/Station/SharedStationSpawningSystem.cs +++ b/Content.Shared/Station/SharedStationSpawningSystem.cs @@ -73,7 +73,7 @@ public abstract class SharedStationSpawningSystem : EntitySystem name = loadout.EntityName; } - if (string.IsNullOrEmpty(name) && PrototypeManager.TryIndex(roleProto.NameDataset, out var nameData)) + if (string.IsNullOrEmpty(name) && PrototypeManager.Resolve(roleProto.NameDataset, out var nameData)) { name = Loc.GetString(_random.Pick(nameData.Values)); } @@ -95,7 +95,7 @@ public abstract class SharedStationSpawningSystem : EntitySystem /// public void EquipStartingGear(EntityUid entity, ProtoId? startingGear, bool raiseEvent = true) { - PrototypeManager.TryIndex(startingGear, out var gearProto); + PrototypeManager.Resolve(startingGear, out var gearProto); EquipStartingGear(entity, gearProto, raiseEvent); } @@ -198,7 +198,7 @@ public abstract class SharedStationSpawningSystem : EntitySystem { foreach (var items in group.Value) { - if (!PrototypeManager.TryIndex(items.Prototype, out var loadoutPrototype)) + if (!PrototypeManager.Resolve(items.Prototype, out var loadoutPrototype)) return null; var gear = ((IEquipmentLoadout) loadoutPrototype).GetGear(slot); diff --git a/Content.Shared/StatusEffectNew/StatusEffectsSystem.cs b/Content.Shared/StatusEffectNew/StatusEffectsSystem.cs index 750868481e1..446b3fd3b1a 100644 --- a/Content.Shared/StatusEffectNew/StatusEffectsSystem.cs +++ b/Content.Shared/StatusEffectNew/StatusEffectsSystem.cs @@ -123,7 +123,7 @@ public sealed partial class StatusEffectsSystem : EntitySystem public bool CanAddStatusEffect(EntityUid uid, EntProtoId effectProto) { - if (!_proto.TryIndex(effectProto, out var effectProtoData)) + if (!_proto.Resolve(effectProto, out var effectProtoData)) return false; if (!effectProtoData.TryGetComponent(out var effectProtoComp, Factory)) diff --git a/Content.Shared/Storage/EntitySystems/DumpableSystem.cs b/Content.Shared/Storage/EntitySystems/DumpableSystem.cs index 6c0cc2d6567..0d744a4fe90 100644 --- a/Content.Shared/Storage/EntitySystems/DumpableSystem.cs +++ b/Content.Shared/Storage/EntitySystems/DumpableSystem.cs @@ -108,7 +108,7 @@ public sealed class DumpableSystem : EntitySystem foreach (var entity in storage.Container.ContainedEntities) { if (!_itemQuery.TryGetComponent(entity, out var itemComp) || - !_prototypeManager.TryIndex(itemComp.Size, out var itemSize)) + !_prototypeManager.Resolve(itemComp.Size, out var itemSize)) { continue; } diff --git a/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs b/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs index 74c47bbb250..e4f0aa8b234 100644 --- a/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs +++ b/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs @@ -579,7 +579,7 @@ public abstract class SharedStorageSystem : EntitySystem { if (entity == args.User || !_itemQuery.TryGetComponent(entity, out var itemComp) // Need comp to get item size to get weight - || !_prototype.TryIndex(itemComp.Size, out var itemSize) + || !_prototype.Resolve(itemComp.Size, out var itemSize) || !CanInsert(uid, entity, out _, storageComp, item: itemComp) || !_interactionSystem.InRangeUnobstructed(args.User, entity)) { @@ -1822,7 +1822,7 @@ public abstract class SharedStorageSystem : EntitySystem // If we specify a max item size, use that if (uid.Comp.MaxItemSize != null) { - if (_prototype.TryIndex(uid.Comp.MaxItemSize.Value, out var proto)) + if (_prototype.Resolve(uid.Comp.MaxItemSize.Value, out var proto)) return proto; Log.Error($"{ToPrettyString(uid.Owner)} tried to get invalid item size prototype: {uid.Comp.MaxItemSize.Value}. Stack trace:\\n{Environment.StackTrace}"); diff --git a/Content.Shared/StoryGen/EntitySystems/StoryGeneratorSystem.cs b/Content.Shared/StoryGen/EntitySystems/StoryGeneratorSystem.cs index 51ad85730c7..07699fa372d 100644 --- a/Content.Shared/StoryGen/EntitySystems/StoryGeneratorSystem.cs +++ b/Content.Shared/StoryGen/EntitySystems/StoryGeneratorSystem.cs @@ -24,7 +24,7 @@ public sealed partial class StoryGeneratorSystem : EntitySystem public bool TryGenerateStoryFromTemplate(ProtoId template, [NotNullWhen(true)] out string? story, int? seed = null) { // Get the story template prototype from the ID - if (!_protoMan.TryIndex(template, out var templateProto)) + if (!_protoMan.Resolve(template, out var templateProto)) { story = null; return false; @@ -39,7 +39,7 @@ public sealed partial class StoryGeneratorSystem : EntitySystem foreach (var (name, list) in templateProto.Variables) { // Get the prototype for the world list dataset - if (!_protoMan.TryIndex(list, out var listProto)) + if (!_protoMan.Resolve(list, out var listProto)) continue; // Missed one, but keep going with the rest of the story // Pick a random word from the dataset and localize it