diff --git a/core/apis/itemDB.lua b/core/apis/itemDB.lua index c8b66f2..790ce0b 100644 --- a/core/apis/itemDB.lua +++ b/core/apis/itemDB.lua @@ -33,20 +33,18 @@ end function itemDB:makeKey(item) 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 function itemDB:splitKey(key, item) item = item or { } local t = Util.split(key, '(.-):') - if #t[#t] > 8 then - item.nbtHash = table.remove(t) - end - local damage = table.remove(t) - if damage ~= '*' then - item.damage = tonumber(damage) + + if t[3] then + item.nbt = t[3] end + item.name = table.concat(t, ':') return item @@ -82,36 +80,21 @@ function itemDB:_get(key) return item end - -- try finding an item that has damage values - if type(key.damage) == 'number' then - item = TableDB.get(self, self:makeKey({ name = key.name, nbtHash = key.nbtHash })) - if item and item.maxDamage then + for k,item in pairs(self.data) do + if key.name == item.name and + key.nbt == key.nbt then item = Util.shallowCopy(item) - item.damage = key.damage - 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 + item.nbt = key.nbt return item 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 - if key.nbtHash then - item = self:get({ name = key.name, damage = key.damage }) + if key.nbt then + item = self:get({ name = key.name }) if item and item.ignoreNBT then item = Util.shallowCopy(item) - item.nbtHash = key.nbtHash - item.damage = key.damage + item.nbt = key.nbt return item end end @@ -134,8 +117,7 @@ end function itemDB:add(baseItem) local nItem = { name = baseItem.name, - damage = baseItem.damage, - nbtHash = baseItem.nbtHash, + nbt = baseItem.nbt, } -- if detail.maxDamage > 0 then -- nItem.damage = '*' @@ -143,7 +125,6 @@ function itemDB:add(baseItem) nItem.displayName = safeString(baseItem.displayName) nItem.maxCount = baseItem.maxCount - nItem.maxDamage = baseItem.maxDamage -- enchanted items if baseItem.enchantments then @@ -156,7 +137,7 @@ function itemDB:add(baseItem) if k > 1 then nItem.displayName = nItem.displayName .. ', ' end - nItem.displayName = nItem.displayName .. v.fullName + nItem.displayName = nItem.displayName .. v.displayName end -- turtles / computers / etc @@ -192,18 +173,8 @@ function itemDB:add(baseItem) if nItem.name == item.name and nItem.displayName == item.displayName then - if nItem.nbtHash ~= item.nbtHash and nItem.damage ~= item.damage then - nItem.damage = '*' - 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 + if nItem.nbt ~= item.nbt then + nItem.nbt = nil nItem.ignoreNBT = true self.data[k] = nil break @@ -214,8 +185,7 @@ function itemDB:add(baseItem) TableDB.add(self, self:makeKey(nItem), nItem) nItem = Util.shallowCopy(nItem) - nItem.damage = baseItem.damage - nItem.nbtHash = baseItem.nbtHash + nItem.nbt = baseItem.nbt return nItem end @@ -234,8 +204,8 @@ function itemDB:getName(item) -- fallback to nameDB local strId = self:makeKey(item) local name = nameDB.data[strId] - if not name and not item.damage then - name = nameDB.data[self:makeKey({ name = item.name, damage = 0, nbtHash = item.nbtHash })] + if not name then + name = nameDB.data[self:makeKey({ name = item.name, nbt = item.nbt })] end return name or strId end @@ -250,24 +220,17 @@ function itemDB:load() for key,item in pairs(self.data) do self:splitKey(key, item) - item.maxDamage = item.maxDamage or 0 item.maxCount = item.maxCount or 64 end end function itemDB:flush() if self.dirty then - local t = { } for k,v in pairs(self.data) do v = Util.shallowCopy(v) v.name = nil - v.damage = nil - v.nbtHash = nil -v.count = nil -- wipe out previously saved counts - temporary - if v.maxDamage == 0 then - v.maxDamage = nil - end + v.nbt = nil if v.maxCount == 64 then v.maxCount = nil end @@ -281,4 +244,4 @@ end itemDB:load() -return itemDB +return itemDB \ No newline at end of file