44 lines
983 B
Lua
44 lines
983 B
Lua
local class = require('class')
|
|
local itemDB = require('core.itemDB')
|
|
local Util = require('util')
|
|
|
|
local device = _G.device
|
|
|
|
local Adapter = class()
|
|
|
|
function Adapter:init(args)
|
|
if args.side then
|
|
local inventory = device[args.side]
|
|
if inventory then
|
|
Util.merge(self, inventory)
|
|
end
|
|
end
|
|
end
|
|
|
|
function Adapter:listItems(throttle)
|
|
local cache = { }
|
|
throttle = throttle or Util.throttle()
|
|
|
|
for k,v in pairs(self.list()) do
|
|
if v.count > 0 then
|
|
local key = table.concat({ v.name, v.damage, v.nbtHash }, ':')
|
|
|
|
local entry = cache[key]
|
|
if entry then
|
|
entry.count = entry.count + v.count
|
|
else
|
|
cache[key] = itemDB:get(v, function() return self.getItemMeta(k) end)
|
|
end
|
|
throttle()
|
|
end
|
|
end
|
|
|
|
-- TODO: cache number of slots, free slots, used slots
|
|
-- useful for when inserting into chests
|
|
-- ie. insert only if chest does not have item and has free slots
|
|
|
|
self.cache = cache
|
|
end
|
|
|
|
return Adapter
|