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:
@@ -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)
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user