1
0

SolutionCommand.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. using Content.Server.Chemistry.Containers.EntitySystems;
  2. using Content.Shared.Administration;
  3. using Content.Shared.Chemistry.Components;
  4. using Content.Shared.Chemistry.Reagent;
  5. using Content.Shared.FixedPoint;
  6. using Content.Shared.Chemistry.EntitySystems;
  7. using Robust.Shared.Toolshed;
  8. using Robust.Shared.Toolshed.Syntax;
  9. using Robust.Shared.Toolshed.TypeParsers;
  10. using System.Linq;
  11. using Robust.Shared.Prototypes;
  12. namespace Content.Server.Administration.Toolshed;
  13. [ToolshedCommand, AdminCommand(AdminFlags.Debug)]
  14. public sealed class SolutionCommand : ToolshedCommand
  15. {
  16. private SharedSolutionContainerSystem? _solutionContainer;
  17. [CommandImplementation("get")]
  18. public SolutionRef? Get([PipedArgument] EntityUid input, string name)
  19. {
  20. _solutionContainer ??= GetSys<SharedSolutionContainerSystem>();
  21. if (_solutionContainer.TryGetSolution(input, name, out var solution))
  22. return new SolutionRef(solution.Value);
  23. return null;
  24. }
  25. [CommandImplementation("get")]
  26. public IEnumerable<SolutionRef> Get([PipedArgument] IEnumerable<EntityUid> input, string name)
  27. {
  28. return input.Select(x => Get(x, name)).Where(x => x is not null).Cast<SolutionRef>();
  29. }
  30. [CommandImplementation("adjreagent")]
  31. public SolutionRef AdjReagent(
  32. [PipedArgument] SolutionRef input,
  33. ProtoId<ReagentPrototype> proto,
  34. FixedPoint2 amount
  35. )
  36. {
  37. _solutionContainer ??= GetSys<SharedSolutionContainerSystem>();
  38. if (amount > 0)
  39. {
  40. _solutionContainer.TryAddReagent(input.Solution, proto, amount, out _);
  41. }
  42. else if (amount < 0)
  43. {
  44. _solutionContainer.RemoveReagent(input.Solution, proto, -amount);
  45. }
  46. return input;
  47. }
  48. [CommandImplementation("adjreagent")]
  49. public IEnumerable<SolutionRef> AdjReagent(
  50. [PipedArgument] IEnumerable<SolutionRef> input,
  51. ProtoId<ReagentPrototype> name,
  52. FixedPoint2 amount
  53. )
  54. => input.Select(x => AdjReagent(x, name, amount));
  55. }
  56. public readonly record struct SolutionRef(Entity<SolutionComponent> Solution)
  57. {
  58. public override string ToString()
  59. {
  60. return $"{Solution.Owner} {Solution.Comp.Solution}";
  61. }
  62. }