public Item GetItem(Func<Item, bool> predicate, StartAt startAt = StartAt.Random) { lock (_pockets) { foreach (var pocket in _pockets.Values) { var item = pocket.GetItem(predicate, startAt); if (item != null) return item; } return null; } }