Вот как вариант, выгружает тикеты, когда их больше или равно нужному количеству. От других предметов инвентарь не чистит, для этого нужна отдельная функция.
local component = require('component')
local function get_tickets(item, min_qty, side) -- получаем имя предмета, количество и куда перемещать
if not component.isAvailable('chest') then -- проверяем наличие сундука
return nil, 'нет сундука'
end
local chest = component.chest -- линкуем сундук
local stacks = chest.getAllStacks() -- получаем инвентарь
local counter, slots, c_item, moved = 0, {} -- создаем счетчик, список слотов и текущий предмет
for k, v in pairs(stacks) do -- пробегаем по слотам
c_item = v.basic() -- линкуем основную информацию о предмете
if c_item.id == item then -- если имя совпадает
table.insert(slots, k) -- добавляем слот в список
counter = counter + c_item.qty -- обновляем счетчик
end
end
if counter >= min_qty then -- условие допилить под свои нужды
moved = true
for i = 1, #slots do -- бежим по слотам
chest.pushItem(side, slots[i]) -- выгружаем предметы
end
end
return moved, counter -- возвращаем количество
end
local status, tickets = get_tickets('minecraft:stone', 3, 'DOWN')
if status then
print('получено ' .. tickets .. ' билетов') -- обрабатываем удачную ситуацию
else
-- обрабатываем исключение
end