That's a good solution. I assume items are already using the observer pattern so there's only one observer looking over a k-d tree of item locations rather than each item periodically checking if the mouse or player is close.