Хаюшки всем кто читает this тему.
Работа с инвентарём довольно медленная, поиск, сканирование и получение информации, я решил ускорить этот процесс путём кэширования, обработки события inventory_changed, список потенциальных слотов для сканирования, такими являются слоты с количеством айтемов меньше максимального, еще возможна подмена функций всех продвинутых контроллеров инвентаря(функция не опробована), конечно не без минусов, есть такие ситуации которые могут нарушить работу кэша, например, если слот полный но в какой-то момент стал потенциальным, тобишь каким-то образом айтемов стало меньше максимума, увы но на данный момент других способов кроме сканирования слота нет, тут нужно будет кэшу сказать что бы обновил слот.
Требует продвинутый контроллер инвентаря, без него невозможно получать подробную информацию.
Библиотека очень сырая, ей требуется доработок. Была написана за пару часов.
Список функций.
init([advancedMode: boolean]): nil - инициализирует библиотеку, опционально можно включить замену dropIntoSlot, suckFromSlot.
free(): nil - удаляет callbacks с прослушки событий.
scan():nil - сканирует полностью весь инвентарь.
addPotentialSlot(slot:number): nil - добавляет в очередь потенциальный слот.
removePotentialSlot(slot:number): nil - находит и удаляет слот из очереди.
isPotetial(slot:number): nil - проверяет, находится-ли слот в очереди.
update(): nil - сканирует слоты из очереди и заносит в кэш, вызов updateSlot для всей очереди.
updateSlot(slot:number): nil - сканирует слот и заносит в кэш.
getSlot(slot:number): table or nil - извлекает информацию о слоте из кэша.
setSlot(slot:number, item:table): nil - устанавливает информацию о слоте, функция для внутреннего использования.
requestInventorySize(): nil - сканирует размер инвентаря и обновляет информацию для кэша.
getInventorySize(): number - получает закэшированный размер инвентаря.
Остальные функции полностью служебные, обо всех багах или предложениях сообщать сюда.
P.S
Надеюсь она будет полезной как я предполагаю.
Ссылка на исходный код: https://github.com/Avaja/OpenComputers/blob/master/cache.lua