oops, forgot to update itemDB

This commit is contained in:
Kan18
2022-12-29 01:26:19 +04:00
parent 2f67fb2ef8
commit f231173236

View File

@@ -33,20 +33,18 @@ end
function itemDB:makeKey(item) function itemDB:makeKey(item)
if not item then error('itemDB:makeKey: item is required', 2) end if not item then error('itemDB:makeKey: item is required', 2) end
return table.concat({ item.name, item.damage or '*', item.nbtHash }, ':') return table.concat({ item.name, item.nbt }, ':')
end end
function itemDB:splitKey(key, item) function itemDB:splitKey(key, item)
item = item or { } item = item or { }
local t = Util.split(key, '(.-):') local t = Util.split(key, '(.-):')
if #t[#t] > 8 then
item.nbtHash = table.remove(t) if t[3] then
end item.nbt = t[3]
local damage = table.remove(t)
if damage ~= '*' then
item.damage = tonumber(damage)
end end
item.name = table.concat(t, ':') item.name = table.concat(t, ':')
return item return item
@@ -82,36 +80,21 @@ function itemDB:_get(key)
return item return item
end end
-- try finding an item that has damage values for k,item in pairs(self.data) do
if type(key.damage) == 'number' then if key.name == item.name and
item = TableDB.get(self, self:makeKey({ name = key.name, nbtHash = key.nbtHash })) key.nbt == key.nbt then
if item and item.maxDamage then
item = Util.shallowCopy(item) item = Util.shallowCopy(item)
item.damage = key.damage item.nbt = key.nbt
if item.maxDamage > 0 and type(item.damage) == 'number' and item.damage > 0 then
item.displayName = string.format('%s (damage: %s)', item.displayName, item.damage)
end
return item return item
end end
else
for k,item in pairs(self.data) do
if key.name == item.name and
key.nbtHash == key.nbtHash and
item.maxDamage > 0 then
item = Util.shallowCopy(item)
item.nbtHash = key.nbtHash
return item
end
end
end end
if key.nbtHash then if key.nbt then
item = self:get({ name = key.name, damage = key.damage }) item = self:get({ name = key.name })
if item and item.ignoreNBT then if item and item.ignoreNBT then
item = Util.shallowCopy(item) item = Util.shallowCopy(item)
item.nbtHash = key.nbtHash item.nbt = key.nbt
item.damage = key.damage
return item return item
end end
end end
@@ -134,8 +117,7 @@ end
function itemDB:add(baseItem) function itemDB:add(baseItem)
local nItem = { local nItem = {
name = baseItem.name, name = baseItem.name,
damage = baseItem.damage, nbt = baseItem.nbt,
nbtHash = baseItem.nbtHash,
} }
-- if detail.maxDamage > 0 then -- if detail.maxDamage > 0 then
-- nItem.damage = '*' -- nItem.damage = '*'
@@ -143,7 +125,6 @@ function itemDB:add(baseItem)
nItem.displayName = safeString(baseItem.displayName) nItem.displayName = safeString(baseItem.displayName)
nItem.maxCount = baseItem.maxCount nItem.maxCount = baseItem.maxCount
nItem.maxDamage = baseItem.maxDamage
-- enchanted items -- enchanted items
if baseItem.enchantments then if baseItem.enchantments then
@@ -156,7 +137,7 @@ function itemDB:add(baseItem)
if k > 1 then if k > 1 then
nItem.displayName = nItem.displayName .. ', ' nItem.displayName = nItem.displayName .. ', '
end end
nItem.displayName = nItem.displayName .. v.fullName nItem.displayName = nItem.displayName .. v.displayName
end end
-- turtles / computers / etc -- turtles / computers / etc
@@ -192,18 +173,8 @@ function itemDB:add(baseItem)
if nItem.name == item.name and if nItem.name == item.name and
nItem.displayName == item.displayName then nItem.displayName == item.displayName then
if nItem.nbtHash ~= item.nbtHash and nItem.damage ~= item.damage then if nItem.nbt ~= item.nbt then
nItem.damage = '*' nItem.nbt = nil
nItem.nbtHash = nil
nItem.ignoreNBT = true
self.data[k] = nil
break
elseif nItem.damage ~= item.damage then
nItem.damage = '*'
self.data[k] = nil
break
elseif nItem.nbtHash ~= item.nbtHash then
nItem.nbtHash = nil
nItem.ignoreNBT = true nItem.ignoreNBT = true
self.data[k] = nil self.data[k] = nil
break break
@@ -214,8 +185,7 @@ function itemDB:add(baseItem)
TableDB.add(self, self:makeKey(nItem), nItem) TableDB.add(self, self:makeKey(nItem), nItem)
nItem = Util.shallowCopy(nItem) nItem = Util.shallowCopy(nItem)
nItem.damage = baseItem.damage nItem.nbt = baseItem.nbt
nItem.nbtHash = baseItem.nbtHash
return nItem return nItem
end end
@@ -234,8 +204,8 @@ function itemDB:getName(item)
-- fallback to nameDB -- fallback to nameDB
local strId = self:makeKey(item) local strId = self:makeKey(item)
local name = nameDB.data[strId] local name = nameDB.data[strId]
if not name and not item.damage then if not name then
name = nameDB.data[self:makeKey({ name = item.name, damage = 0, nbtHash = item.nbtHash })] name = nameDB.data[self:makeKey({ name = item.name, nbt = item.nbt })]
end end
return name or strId return name or strId
end end
@@ -250,24 +220,17 @@ function itemDB:load()
for key,item in pairs(self.data) do for key,item in pairs(self.data) do
self:splitKey(key, item) self:splitKey(key, item)
item.maxDamage = item.maxDamage or 0
item.maxCount = item.maxCount or 64 item.maxCount = item.maxCount or 64
end end
end end
function itemDB:flush() function itemDB:flush()
if self.dirty then if self.dirty then
local t = { } local t = { }
for k,v in pairs(self.data) do for k,v in pairs(self.data) do
v = Util.shallowCopy(v) v = Util.shallowCopy(v)
v.name = nil v.name = nil
v.damage = nil v.nbt = nil
v.nbtHash = nil
v.count = nil -- wipe out previously saved counts - temporary
if v.maxDamage == 0 then
v.maxDamage = nil
end
if v.maxCount == 64 then if v.maxCount == 64 then
v.maxCount = nil v.maxCount = nil
end end
@@ -281,4 +244,4 @@ end
itemDB:load() itemDB:load()
return itemDB return itemDB