1
0
mirror of https://github.com/kepler155c/opus synced 2025-10-20 10:17:39 +00:00

refined storage bug, obsidian script

This commit is contained in:
kepler155c@gmail.com
2017-04-20 07:33:36 -04:00
parent 17f4f8d9c1
commit c57ff1541b
4 changed files with 99 additions and 34 deletions

View File

@@ -7,37 +7,41 @@ function ChestProvider:init(args)
args = args or { }
self.items = { } -- consolidated item info
self.stacks = { } -- raw stack info
self.cache = { }
self.name = 'chest'
self.direction = args.direction or 'up'
self.wrapSide = args.wrapSide or 'bottom'
self.p = peripheral.wrap(self.wrapSide)
end
function ChestProvider:isValid()
return self.p and self.p.list
end
function ChestProvider:refresh()
if self.p then
--self.p.condenseItems()
self.items = { }
self.stacks = self.p.list()
for k,s in pairs(self.stacks) do
for k,s in pairs(self.p.list()) do
local key = s.name .. ':' .. s.damage
local entry = self.items[key]
if not entry then
local meta = self.p.getItemMeta(k)
entry = {
id = s.name,
dmg = s.damage,
name = meta.displayName,
max_size = meta.maxCount,
qty = 0,
}
entry = self.cache[key]
if not entry then
local meta = self.p.getItemMeta(k) -- slow method.. cache for speed
entry = {
id = s.name,
dmg = s.damage,
name = meta.displayName,
max_size = meta.maxCount,
}
self.cache[key] = entry
end
entry = Util.shallowCopy(entry)
self.items[key] = entry
entry.qty = 0
end
entry.qty = entry.qty + s.count
end
end
@@ -45,16 +49,15 @@ function ChestProvider:refresh()
end
function ChestProvider:getItemInfo(id, dmg)
for key,item in pairs(self.items) do
if item.id == id and item.dmg == dmg then
return item
end
end
end
function ChestProvider:craft(id, dmg, qty)
return false
end
function ChestProvider:craftItems(items)
@@ -62,8 +65,8 @@ end
function ChestProvider:provide(item, qty, slot)
if self.p then
self:refresh()
for key,stack in pairs(self.stacks) do
local stacks = self.p.list()
for key,stack in pairs(stacks) do
if stack.name == item.id and stack.damage == item.dmg then
local amount = math.min(qty, stack.count)
self.p.pushItems(self.direction, key, amount, slot)
@@ -75,7 +78,7 @@ function ChestProvider:provide(item, qty, slot)
end
end
end
function ChestProvider:extract(slot, qty)
if self.p then
self.p.pushItems(self.direction, slot, qty)

View File

@@ -34,8 +34,10 @@ function RefinedProvider:getCachedItemDetails(item)
if not detail then
detail = self.findItem(item)
if detail then
Util.merge(detail, detail.getMetadata())
if detail.displayName then
local meta
pcall(function() meta = detail.getMetadata() end)
if meta then
Util.merge(detail, meta)
if detail.maxDamage and detail.maxDamage > 0 and detail.damage > 0 then
detail.displayName = detail.displayName .. ' (damaged)'
end
@@ -95,9 +97,10 @@ end
function RefinedProvider:isCrafting(item)
for _,task in pairs(self.getCraftingTasks()) do
if task.name == item.name and
task.damage == item.damage and
task.nbtHash == item.nbtHash then
local output = task.getPattern().outputs[1]
if output.name == item.name and
output.damage == item.damage and
output.nbtHash == item.nbtHash then
return true
end
end