feat: add find_item functionality to locate items in chests
This commit is contained in:
@@ -705,6 +705,43 @@ local function main()
|
|||||||
state.bumpStateVersion()
|
state.bumpStateVersion()
|
||||||
end
|
end
|
||||||
pcall(broadcastState)
|
pcall(broadcastState)
|
||||||
|
|
||||||
|
elseif message.type == "find_item" and message.items then
|
||||||
|
-- Return chest+slot locations for the first matching item
|
||||||
|
-- message.items = list of item names to search (in priority order)
|
||||||
|
-- message.limit = max items to return info for (default 64)
|
||||||
|
local limit = message.limit or 64
|
||||||
|
local results = {}
|
||||||
|
for _, itemName in ipairs(message.items) do
|
||||||
|
if cache.catalogue[itemName] then
|
||||||
|
for _, source in ipairs(cache.catalogue[itemName]) do
|
||||||
|
local chest = ops.wrapCached(source.chest)
|
||||||
|
if chest then
|
||||||
|
for slot, slotItem in pairs(chest.list()) do
|
||||||
|
if slotItem.name == itemName then
|
||||||
|
table.insert(results, {
|
||||||
|
chest = source.chest,
|
||||||
|
slot = slot,
|
||||||
|
name = itemName,
|
||||||
|
count = slotItem.count,
|
||||||
|
})
|
||||||
|
if #results >= limit then break end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if #results >= limit then break end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if #results > 0 then break end -- found fuel, stop searching
|
||||||
|
end
|
||||||
|
log.info("NET", "find_item: found %d source(s)", #results)
|
||||||
|
pcall(function()
|
||||||
|
ctx.networkModem.transmit(replyChannel, cfg.ORDER_CHANNEL, {
|
||||||
|
type = "find_item_result",
|
||||||
|
commandId = message.commandId,
|
||||||
|
results = results,
|
||||||
|
})
|
||||||
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
end) -- pcall handler
|
end) -- pcall handler
|
||||||
|
|||||||
Reference in New Issue
Block a user