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;
{
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);
}
// Move units from attackSolution to targetSolution
- var removedSolution = _solutions.SplitSolution(injector, solution, realTransferAmount);
+ Solution removedSolution;
+ if (TryComp<StackComponent>(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),
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;
+ }
+
/// <summary>
/// Splits a solution without the specified reagent(s).
/// </summary>
var solRemoved = solution.SplitSolution(component.TransferAmount);
var solRemovedVol = solRemoved.Volume;
-
+
var solToInject = solRemoved.SplitSolution(solRemovedVol * component.TransferEfficiency);
_bloodstreamSystem.TryAddToChemicals(target, solToInject, bloodstream);
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;
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;
[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()
{
_utensilSystem.TryBreak(utensil, args.User);
}
- if (component.UsesRemaining > 0)
+ args.Repeat = !forceFeed;
+
+ if (TryComp<StackComponent>(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;
}
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
- type: Item
heldPrefix: uranium
- type: Extractable
- grindableSolutionName: uranium
+ grindableSolutionName: food
- type: SolutionContainerManager
solutions:
- uranium:
+ food:
reagents:
- ReagentId: Uranium
Quantity: 10