diff --git a/Content.Server/Chemistry/EntitySystems/ChemistrySystem.Injector.cs b/Content.Server/Chemistry/EntitySystems/ChemistrySystem.Injector.cs index e05d7602a6..6ac7f7f0d6 100644 --- a/Content.Server/Chemistry/EntitySystems/ChemistrySystem.Injector.cs +++ b/Content.Server/Chemistry/EntitySystems/ChemistrySystem.Injector.cs @@ -13,6 +13,7 @@ using Robust.Shared.GameStates; using Content.Shared.DoAfter; using Content.Shared.Mobs.Components; using Content.Shared.Verbs; +using Content.Shared.Stacks; using Robust.Server.GameObjects; using Content.Shared.Popups; @@ -297,9 +298,7 @@ public sealed partial class ChemistrySystem { if (!_solutions.TryGetSolution(injector, InjectorComponent.SolutionName, out var solution) || solution.Volume == 0) - { return; - } // Get transfer amount. May be smaller than _transferAmount if not enough room var realTransferAmount = FixedPoint2.Min(component.TransferAmount, targetSolution.AvailableVolume); @@ -312,18 +311,18 @@ public sealed partial class ChemistrySystem } // Move units from attackSolution to targetSolution - var removedSolution = _solutions.SplitSolution(injector, solution, realTransferAmount); + Solution removedSolution; + if (TryComp(targetEntity, out var stack)) + removedSolution = _solutions.SplitStackSolution(injector, solution, realTransferAmount, stack.Count); + else + removedSolution = _solutions.SplitSolution(injector, solution, realTransferAmount); _reactiveSystem.DoEntityReaction(targetEntity, removedSolution, ReactionMethod.Injection); if (!asRefill) - { _solutions.Inject(targetEntity, targetSolution, removedSolution); - } else - { _solutions.Refill(targetEntity, targetSolution, removedSolution); - } _popup.PopupEntity(Loc.GetString("injector-component-transfer-success-message", ("amount", removedSolution.Volume), diff --git a/Content.Server/Chemistry/EntitySystems/SolutionContainerSystem.cs b/Content.Server/Chemistry/EntitySystems/SolutionContainerSystem.cs index e84271981e..782a1e7ec3 100644 --- a/Content.Server/Chemistry/EntitySystems/SolutionContainerSystem.cs +++ b/Content.Server/Chemistry/EntitySystems/SolutionContainerSystem.cs @@ -128,6 +128,14 @@ public sealed partial class SolutionContainerSystem : EntitySystem return splitSol; } + public Solution SplitStackSolution(EntityUid targetUid, Solution solutionHolder, FixedPoint2 quantity, int stackCount) + { + var splitSol = solutionHolder.SplitSolution(quantity / stackCount); + Solution attackSolutionHolder = solutionHolder.SplitSolution(quantity - splitSol.Volume); + UpdateChemicals(targetUid, solutionHolder); + return splitSol; + } + /// /// Splits a solution without the specified reagent(s). /// diff --git a/Content.Server/Chemistry/EntitySystems/SolutionInjectOnCollideSystem.cs b/Content.Server/Chemistry/EntitySystems/SolutionInjectOnCollideSystem.cs index d5a5825ce8..ef0d757b4a 100644 --- a/Content.Server/Chemistry/EntitySystems/SolutionInjectOnCollideSystem.cs +++ b/Content.Server/Chemistry/EntitySystems/SolutionInjectOnCollideSystem.cs @@ -53,7 +53,7 @@ namespace Content.Server.Chemistry.EntitySystems var solRemoved = solution.SplitSolution(component.TransferAmount); var solRemovedVol = solRemoved.Volume; - + var solToInject = solRemoved.SplitSolution(solRemovedVol * component.TransferEfficiency); _bloodstreamSystem.TryAddToChemicals(target, solToInject, bloodstream); diff --git a/Content.Server/Nutrition/EntitySystems/FoodSystem.cs b/Content.Server/Nutrition/EntitySystems/FoodSystem.cs index 41e2e61f28..566b557b7e 100644 --- a/Content.Server/Nutrition/EntitySystems/FoodSystem.cs +++ b/Content.Server/Nutrition/EntitySystems/FoodSystem.cs @@ -4,6 +4,7 @@ using Content.Server.Body.Systems; using Content.Server.Chemistry.EntitySystems; using Content.Server.Nutrition.Components; using Content.Server.Popups; +using Content.Server.Stack; using Content.Shared.Administration.Logs; using Content.Shared.Body.Components; using Content.Shared.Body.Organ; @@ -22,6 +23,7 @@ using Content.Shared.Mobs.Components; using Content.Shared.Mobs.Systems; using Content.Shared.Nutrition; using Content.Shared.Verbs; +using Content.Shared.Stacks; using Robust.Shared.Audio; using Robust.Shared.Player; using Robust.Shared.Utility; @@ -47,6 +49,7 @@ namespace Content.Server.Nutrition.EntitySystems [Dependency] private readonly SharedHandsSystem _handsSystem = default!; [Dependency] private readonly ReactiveSystem _reaction = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly StackSystem _stack = default!; public override void Initialize() { @@ -260,7 +263,19 @@ namespace Content.Server.Nutrition.EntitySystems _utensilSystem.TryBreak(utensil, args.User); } - if (component.UsesRemaining > 0) + args.Repeat = !forceFeed; + + if (TryComp(uid, out var stack)) + { + //Not deleting whole stack piece will make troubles with grinding object + if (stack.Count > 1) + { + _stack.SetCount(uid, stack.Count - 1); + _solutionContainerSystem.TryAddSolution(uid, solution, split); + return; + } + } + else if (component.UsesRemaining > 0) { return; } diff --git a/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml b/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml index 0eed0ac32f..d55c143656 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml @@ -143,12 +143,14 @@ count: 1 - type: entity - parent: SheetOtherBase + parent: [SheetOtherBase, FoodBase] id: SheetUranium name: uranium suffix: Full components: - type: Material + - type: Food + transferAmount: 10 - type: PhysicalComposition materialComposition: Uranium: 100 @@ -166,10 +168,10 @@ - type: Item heldPrefix: uranium - type: Extractable - grindableSolutionName: uranium + grindableSolutionName: food - type: SolutionContainerManager solutions: - uranium: + food: reagents: - ReagentId: Uranium Quantity: 10