Toolshed refactor (#33598)
* Content changes for engine toolshed PR * add contains command * more permissive commands
This commit is contained in:
@@ -8,6 +8,7 @@ using Robust.Shared.Toolshed;
|
||||
using Robust.Shared.Toolshed.Syntax;
|
||||
using Robust.Shared.Toolshed.TypeParsers;
|
||||
using System.Linq;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Server.Administration.Toolshed;
|
||||
|
||||
@@ -17,48 +18,38 @@ public sealed class SolutionCommand : ToolshedCommand
|
||||
private SharedSolutionContainerSystem? _solutionContainer;
|
||||
|
||||
[CommandImplementation("get")]
|
||||
public SolutionRef? Get(
|
||||
[CommandInvocationContext] IInvocationContext ctx,
|
||||
[PipedArgument] EntityUid input,
|
||||
[CommandArgument] ValueRef<string> name
|
||||
)
|
||||
public SolutionRef? Get([PipedArgument] EntityUid input, string name)
|
||||
{
|
||||
_solutionContainer ??= GetSys<SharedSolutionContainerSystem>();
|
||||
|
||||
if (_solutionContainer.TryGetSolution(input, name.Evaluate(ctx)!, out var solution))
|
||||
if (_solutionContainer.TryGetSolution(input, name, out var solution))
|
||||
return new SolutionRef(solution.Value);
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
[CommandImplementation("get")]
|
||||
public IEnumerable<SolutionRef> Get(
|
||||
[CommandInvocationContext] IInvocationContext ctx,
|
||||
[PipedArgument] IEnumerable<EntityUid> input,
|
||||
[CommandArgument] ValueRef<string> name
|
||||
)
|
||||
public IEnumerable<SolutionRef> Get([PipedArgument] IEnumerable<EntityUid> input, string name)
|
||||
{
|
||||
return input.Select(x => Get(ctx, x, name)).Where(x => x is not null).Cast<SolutionRef>();
|
||||
return input.Select(x => Get(x, name)).Where(x => x is not null).Cast<SolutionRef>();
|
||||
}
|
||||
|
||||
[CommandImplementation("adjreagent")]
|
||||
public SolutionRef AdjReagent(
|
||||
[CommandInvocationContext] IInvocationContext ctx,
|
||||
[PipedArgument] SolutionRef input,
|
||||
[CommandArgument] Prototype<ReagentPrototype> name,
|
||||
[CommandArgument] ValueRef<FixedPoint2> amountRef
|
||||
ProtoId<ReagentPrototype> proto,
|
||||
FixedPoint2 amount
|
||||
)
|
||||
{
|
||||
_solutionContainer ??= GetSys<SharedSolutionContainerSystem>();
|
||||
|
||||
var amount = amountRef.Evaluate(ctx);
|
||||
if (amount > 0)
|
||||
{
|
||||
_solutionContainer.TryAddReagent(input.Solution, name.Value.ID, amount, out _);
|
||||
_solutionContainer.TryAddReagent(input.Solution, proto, amount, out _);
|
||||
}
|
||||
else if (amount < 0)
|
||||
{
|
||||
_solutionContainer.RemoveReagent(input.Solution, name.Value.ID, -amount);
|
||||
_solutionContainer.RemoveReagent(input.Solution, proto, -amount);
|
||||
}
|
||||
|
||||
return input;
|
||||
@@ -66,12 +57,11 @@ public sealed class SolutionCommand : ToolshedCommand
|
||||
|
||||
[CommandImplementation("adjreagent")]
|
||||
public IEnumerable<SolutionRef> AdjReagent(
|
||||
[CommandInvocationContext] IInvocationContext ctx,
|
||||
[PipedArgument] IEnumerable<SolutionRef> input,
|
||||
[CommandArgument] Prototype<ReagentPrototype> name,
|
||||
[CommandArgument] ValueRef<FixedPoint2> amountRef
|
||||
ProtoId<ReagentPrototype> name,
|
||||
FixedPoint2 amount
|
||||
)
|
||||
=> input.Select(x => AdjReagent(ctx, x, name, amountRef));
|
||||
=> input.Select(x => AdjReagent(x, name, amount));
|
||||
}
|
||||
|
||||
public readonly record struct SolutionRef(Entity<SolutionComponent> Solution)
|
||||
|
||||
Reference in New Issue
Block a user