private void HandleInjection(EntityUid uid, SolutionInjectOnCollideComponent component, StartCollideEvent args)
        {
            var target = args.OtherFixture.Body.Owner;

            if (!args.OtherFixture.Body.Hard ||
                !EntityManager.TryGetComponent <BloodstreamComponent>(target, out var bloodstream) ||
                !_solutionsSystem.TryGetInjectableSolution(component.Owner, out var solution))
            {
                return;
            }

            if (component.BlockSlots != 0x0 && TryComp <InventoryComponent>(target, out var inventory))
            {
                var containerEnumerator = new InventorySystem.ContainerSlotEnumerator(target, inventory.TemplateId, _protoManager, _inventorySystem, component.BlockSlots);

                while (containerEnumerator.MoveNext(out var container))
                {
                    if (!container.ContainedEntity.HasValue)
                    {
                        continue;
                    }
                    return;
                }
            }

            var solRemoved    = solution.SplitSolution(component.TransferAmount);
            var solRemovedVol = solRemoved.TotalVolume;

            var solToInject = solRemoved.SplitSolution(solRemovedVol * component.TransferEfficiency);

            _bloodstreamSystem.TryAddToChemicals(target, solToInject, bloodstream);
        }
        private void HandleInjection(EntityUid uid, SolutionInjectOnCollideComponent component, StartCollideEvent args)
        {
            if (!EntityManager.TryGetComponent <BloodstreamComponent?>(args.OtherFixture.Body.Owner, out var bloodstream) ||
                !_solutionsSystem.TryGetInjectableSolution(component.Owner, out var solution))
            {
                return;
            }

            var solRemoved    = solution.SplitSolution(component.TransferAmount);
            var solRemovedVol = solRemoved.TotalVolume;

            var solToInject = solRemoved.SplitSolution(solRemovedVol * component.TransferEfficiency);

            _bloodstreamSystem.TryAddToBloodstream((args.OtherFixture.Body).Owner, solToInject, bloodstream);
        }
        private void HandleInjection(EntityUid uid, SolutionInjectOnCollideComponent component, StartCollideEvent args)
        {
            if (!args.OtherFixture.Body.Owner.TryGetComponent <BloodstreamComponent>(out var bloodstream) ||
                !ComponentManager.TryGetComponent(uid, out SolutionContainerComponent? solutionContainer))
            {
                return;
            }

            var solution      = solutionContainer.Solution;
            var solRemoved    = solution.SplitSolution(component.TransferAmount);
            var solRemovedVol = solRemoved.TotalVolume;

            var solToInject = solRemoved.SplitSolution(solRemovedVol * component.TransferEfficiency);

            bloodstream.TryTransferSolution(solToInject);
        }
 private void HandleInit(EntityUid uid, SolutionInjectOnCollideComponent component, ComponentInit args)
 {
     component.Owner
     .EnsureComponentWarn <SolutionContainerManagerComponent>($"{nameof(SolutionInjectOnCollideComponent)} requires a SolutionContainerManager on {component.Owner}!");
 }