* Returned functionality to industrial reagent grinders without un-nerfing recyclers
* Limited industrial reagent grinder to only extractable solutions
}
// if the item we inserted has reagents, add it in.
- if (_solutionContainer.TryGetDrainableSolution(item, out _, out var drainableSolution))
+
+ if (reclaimerComponent.OnlyReclaimDrainable)
+ {
+ // Are we a recycler? Only use drainable solution.
+ if (_solutionContainer.TryGetDrainableSolution(item, out _, out var drainableSolution))
+ {
+ totalChemicals.AddSolution(drainableSolution, _prototype);
+ }
+ }
+ else
{
- totalChemicals.AddSolution(drainableSolution, _prototype);
+ // Are we an industrial reagent grinder? Use extractable solution.
+ if (_solutionContainer.TryGetExtractableSolution(item, out _, out var extractableSolution))
+ {
+ totalChemicals.AddSolution(extractableSolution, _prototype);
+ }
}
if (!_solutionContainer.TryGetSolution(reclaimer, reclaimerComponent.SolutionContainerId, out var outputSolution) ||
using Content.Shared.Chemistry.Components;
+using Content.Shared.Kitchen.Components;
using Content.Shared.Chemistry.Components.SolutionManager;
using Content.Shared.Chemistry.Reaction;
using Content.Shared.FixedPoint;
return TryGetSolution((entity.Owner, entity.Comp2), entity.Comp1.Solution, out soln, out solution);
}
+ public bool TryGetExtractableSolution(Entity<ExtractableComponent?, SolutionContainerManagerComponent?> entity, [NotNullWhen(true)] out Entity<SolutionComponent>? soln, [NotNullWhen(true)] out Solution? solution)
+ {
+ if (!Resolve(entity, ref entity.Comp1, logMissing: false))
+ {
+ (soln, solution) = (default!, null);
+ return false;
+ }
+
+ return TryGetSolution((entity.Owner, entity.Comp2), entity.Comp1.GrindableSolution, out soln, out solution);
+ }
+
public bool TryGetDumpableSolution(Entity<DumpableSolutionComponent?, SolutionContainerManagerComponent?> entity, [NotNullWhen(true)] out Entity<SolutionComponent>? soln, [NotNullWhen(true)] out Solution? solution)
{
if (!Resolve(entity, ref entity.Comp1, logMissing: false))
[DataField]
public string? SolutionContainerId;
+ /// <summary>
+ /// If the reclaimer should attempt to reclaim all solutions or just drainable ones
+ /// Difference between Recycler and Industrial Reagent Grinder
+ /// </summary>
+ [DataField]
+ public bool OnlyReclaimDrainable = true;
+
/// <summary>
/// a whitelist for what entities can be inserted into this reclaimer
/// </summary>
tags:
- HighRiskItem #ian meat
efficiency: 0.9
+ onlyReclaimDrainable: false
+ solutionContainerId: output
- type: Sprite
sprite: Structures/Machines/recycling.rsi
layers: