LinkBluespaceLocker.cs 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. using Content.Server.Storage.Components;
  2. using Content.Shared.Administration;
  3. using Robust.Shared.Console;
  4. namespace Content.Server.Administration.Commands;
  5. [AdminCommand(AdminFlags.Fun)]
  6. public sealed class LinkBluespaceLocker : IConsoleCommand
  7. {
  8. [Dependency] private readonly IEntityManager _entManager = default!;
  9. public string Command => "linkbluespacelocker";
  10. public string Description => "Links an entity, the target, to another as a bluespace locker target.";
  11. public string Help => "Usage: linkbluespacelocker <two-way link> <origin storage uid> <target storage uid>";
  12. public void Execute(IConsoleShell shell, string argStr, string[] args)
  13. {
  14. if (args.Length != 3)
  15. {
  16. shell.WriteError(Loc.GetString("shell-wrong-arguments-number"));
  17. return;
  18. }
  19. if (!bool.TryParse(args[0], out var bidirectional))
  20. {
  21. shell.WriteError(Loc.GetString("shell-invalid-bool"));
  22. return;
  23. }
  24. if (!NetEntity.TryParse(args[1], out var originUidNet) || !_entManager.TryGetEntity(originUidNet, out var originUid))
  25. {
  26. shell.WriteError(Loc.GetString("shell-entity-uid-must-be-number"));
  27. return;
  28. }
  29. if (!NetEntity.TryParse(args[2], out var targetUidNet) || !_entManager.TryGetEntity(targetUidNet, out var targetUid))
  30. {
  31. shell.WriteError(Loc.GetString("shell-entity-uid-must-be-number"));
  32. return;
  33. }
  34. if (!_entManager.HasComponent<EntityStorageComponent>(originUid))
  35. {
  36. shell.WriteError(Loc.GetString("shell-entity-with-uid-lacks-component", ("uid", originUid), ("componentName", nameof(EntityStorageComponent))));
  37. return;
  38. }
  39. if (!_entManager.HasComponent<EntityStorageComponent>(targetUid))
  40. {
  41. shell.WriteError(Loc.GetString("shell-entity-with-uid-lacks-component", ("uid", targetUid), ("componentName", nameof(EntityStorageComponent))));
  42. return;
  43. }
  44. _entManager.EnsureComponent<BluespaceLockerComponent>(originUid.Value, out var originBluespaceComponent);
  45. originBluespaceComponent.BluespaceLinks.Add(targetUid.Value);
  46. _entManager.EnsureComponent<BluespaceLockerComponent>(targetUid.Value, out var targetBluespaceComponent);
  47. if (bidirectional)
  48. {
  49. targetBluespaceComponent.BluespaceLinks.Add(originUid.Value);
  50. }
  51. else if (targetBluespaceComponent.BluespaceLinks.Count == 0)
  52. {
  53. targetBluespaceComponent.BehaviorProperties.TransportSentient = false;
  54. targetBluespaceComponent.BehaviorProperties.TransportEntities = false;
  55. targetBluespaceComponent.BehaviorProperties.TransportGas = false;
  56. }
  57. }
  58. }