Yeah, sound good. As for pulling items from inventories, I'd recommend event-driver approach, rather than periodically polling if there is any item to pull. So, you would listen on inventory change in an entity, and then find if there is anything that pulls items from that block, and if so - pull the item. Then if it is capable of pulling only 1 pack of items in a specified period, you can use the "DelayedActionSystem" to schedule a recheck. This I think will be the most efficient approach.