Direct answer
Block entities are not the same as ordinary blocks. Hoppers, furnaces and other containers can execute logic while loaded, and plugins may add inventory-event work.
How to check it
- Profile with
/spark profiler start --timeout 120while the suspect storage or furnace array is active; inspect tick-time branches rather than just total block count. - Compare a populated storage room against the same location with item flow paused. Watch for repeated inventory transfers, container checks or plugin listeners.
- Distinguish a hopper moving items from a plugin reacting to
InventoryMoveItemEvent; a fast inventory transfer rate can amplify expensive event handlers.
Example: If stopping a sorter removes the InventoryMoveItemEvent branch from a profile but leaves furnace time unchanged, investigate the item-transfer plugin before changing furnace counts.
What to change
Remove unnecessary always-active transfer lines, route items with shorter paths where practical, and avoid unloading player inventories or editing database-backed containers during play. Make one reversible change and profile again.
Software and version notes
Paper has hopper.cooldown-when-full and hopper.disable-move-event in its world configuration. Disabling movement events can break protection, logging and automation plugins; do not use it as a default fix.
Verify the result
Confirm the same item throughput and protection rules still work while measured tick cost falls.