DirtyCommand.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. using Content.Shared.Administration;
  2. using Robust.Shared.Console;
  3. namespace Content.Server.Administration.Commands;
  4. [AdminCommand(AdminFlags.Debug)]
  5. public sealed class DirtyCommand : IConsoleCommand
  6. {
  7. [Dependency] private readonly IEntityManager _entManager = default!;
  8. public string Command => "dirty";
  9. public string Description => "Marks all components on an entity as dirty, if not specified, dirties everything";
  10. public string Help => $"Usage: {Command} [entityUid]";
  11. public async void Execute(IConsoleShell shell, string argStr, string[] args)
  12. {
  13. switch (args.Length)
  14. {
  15. case 0:
  16. foreach (var entity in _entManager.GetEntities())
  17. {
  18. DirtyAll(_entManager, entity);
  19. }
  20. break;
  21. case 1:
  22. if (!NetEntity.TryParse(args[0], out var parsedTarget))
  23. {
  24. shell.WriteError(Loc.GetString("shell-entity-uid-must-be-number"));
  25. return;
  26. }
  27. DirtyAll(_entManager, _entManager.GetEntity(parsedTarget));
  28. break;
  29. default:
  30. shell.WriteLine(Loc.GetString("shell-wrong-arguments-number"));
  31. break;
  32. }
  33. }
  34. private static void DirtyAll(IEntityManager manager, EntityUid entityUid)
  35. {
  36. foreach (var component in manager.GetNetComponents(entityUid))
  37. {
  38. manager.Dirty(entityUid, component.component);
  39. }
  40. }
  41. }