Returned functionality to industrial reagent grinders (#31903)
* Returned functionality to industrial reagent grinders without un-nerfing recyclers * Limited industrial reagent grinder to only extractable solutions
This commit is contained in:
@@ -258,9 +258,22 @@ public sealed class MaterialReclaimerSystem : SharedMaterialReclaimerSystem
|
||||
}
|
||||
|
||||
// if the item we inserted has reagents, add it in.
|
||||
if (_solutionContainer.TryGetDrainableSolution(item, out _, out var drainableSolution))
|
||||
|
||||
if (reclaimerComponent.OnlyReclaimDrainable)
|
||||
{
|
||||
totalChemicals.AddSolution(drainableSolution, _prototype);
|
||||
// Are we a recycler? Only use drainable solution.
|
||||
if (_solutionContainer.TryGetDrainableSolution(item, out _, out var drainableSolution))
|
||||
{
|
||||
totalChemicals.AddSolution(drainableSolution, _prototype);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// 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) ||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
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;
|
||||
@@ -34,6 +35,17 @@ public abstract partial class SharedSolutionContainerSystem
|
||||
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))
|
||||
|
||||
@@ -69,6 +69,13 @@ public sealed partial class MaterialReclaimerComponent : Component
|
||||
[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>
|
||||
|
||||
@@ -75,6 +75,8 @@
|
||||
tags:
|
||||
- HighRiskItem #ian meat
|
||||
efficiency: 0.9
|
||||
onlyReclaimDrainable: false
|
||||
solutionContainerId: output
|
||||
- type: Sprite
|
||||
sprite: Structures/Machines/recycling.rsi
|
||||
layers:
|
||||
|
||||
Reference in New Issue
Block a user