## About The Pull Request
Plumbing components waste extra ticks in requesting reagents if those
requested reagents are stored in a reaction chamber & they are catalysts
which cannot be sent out. That is because the reaction chamber lies &
tells the pipeline it can give them inside it's
`/datum/component/plumbing/reaction_chamber/can_give()` proc but won't
actually transfer them if it has no excess to spare.
This doesn't cause errors because those components will eventually get
their requested values from other supplies but it takes extra ticks to
do so
This ensures the reaction chamber won't volunteer itself as a supplier
if it can't give out those catalysts thus enabling the pipeline to
request more accurate values by excluding that reaction chamber from its
list suppliers
## Changelog
🆑
code: plumbing reaction chamber won't waste extra ticks for the pipeline
when sending out catalysts
/🆑
---------
Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
Loosely adapted from /vg/. This is an entity component system for adding behaviours to datums when inheritance doesn't quite cut it. By using signals and events instead of direct inheritance, you can inject behaviours without hacky overloads. It requires a different method of thinking, but is not hard to use correctly. If a behaviour can have application across more than one thing. Make it generic, make it a component. Atom/mob/obj event? Give it a signal, and forward its arguments with a SendSignal() call. Now every component that want's to can also know about this happening.