Track nbt entries

This commit is contained in:
Gabriel Tofvesson 2024-10-09 04:26:39 +02:00
parent df93ccf801
commit 3f3dd111c1
2 changed files with 18 additions and 3 deletions

@ -49,6 +49,10 @@ function ItemGroup:getEnchantments()
return self:_getIdentityStack():getEnchantments() return self:_getIdentityStack():getEnchantments()
end end
function ItemGroup:getNBT()
return self:_getIdentityStack():getNBT()
end
function ItemGroup:_getIdentityStack() function ItemGroup:_getIdentityStack()
return self[1] return self[1]
end end

@ -19,6 +19,7 @@ function ItemStack:fromDetail(inv, detail, slot)
obj.maxCount = detail.maxCount obj.maxCount = detail.maxCount
obj.enchantments = detail.enchantments obj.enchantments = detail.enchantments
obj.displayName = detail.displayName obj.displayName = detail.displayName
obj.nbt = detail.nbt
end end
setmetatable(obj, self) setmetatable(obj, self)
@ -37,7 +38,8 @@ function ItemStack:clone(withSlot)
count = self.count, count = self.count,
maxCount = self.maxCount, maxCount = self.maxCount,
enchantments = self.enchantments, enchantments = self.enchantments,
displayName = self.displayName displayName = self.displayName,
nbt = self.nbt
} }
setmetatable(obj, self) setmetatable(obj, self)
@ -52,7 +54,7 @@ function ItemStack:toSerializable()
maxCount = self.maxCount maxCount = self.maxCount
} }
if self.count ~= nil then if not self:isEmpty() then
-- Not empty -- Not empty
ser.name = self.name ser.name = self.name
ser.damage = self.damage ser.damage = self.damage
@ -60,6 +62,7 @@ function ItemStack:toSerializable()
ser.count = self.count ser.count = self.count
ser.enchantments = self.enchantments ser.enchantments = self.enchantments
ser.displayName = self.displayName ser.displayName = self.displayName
ser.nbt = self.nbt
end end
return ser return ser
@ -106,6 +109,10 @@ function ItemStack:getInventory()
return self.inv return self.inv
end end
function ItemStack:getNBT()
return self.nbt
end
function ItemStack:isEmpty() function ItemStack:isEmpty()
return self.count == nil or self.count == 0 return self.count == nil or self.count == 0
end end
@ -134,7 +141,7 @@ function ItemStack:getSimpleName()
return simpleName return simpleName
end end
return Inventory.getSimpleName(self:getInventory()).."["..(self:getSlot() or "NO_SLOT").."]" return Inventory.getSimpleName(self:getInventory()).."["..(self:getSlot() or "NO_SLOT").."]"
end end
@ -163,6 +170,7 @@ function ItemStack:_modify(countDelta, stack)
self.maxCount = nil self.maxCount = nil
self.enchantments = nil self.enchantments = nil
self.displayName = nil self.displayName = nil
self.nbt = nil
else else
-- If stack is empty, copy stack data from source -- If stack is empty, copy stack data from source
if self:isEmpty() then if self:isEmpty() then
@ -173,6 +181,7 @@ function ItemStack:_modify(countDelta, stack)
self.maxCount = stack.maxCount self.maxCount = stack.maxCount
self.enchantments = stack.enchantments self.enchantments = stack.enchantments
self.displayName = stack.displayName self.displayName = stack.displayName
self.nbt = stack.nbt
end end
self.count = newCount self.count = newCount
@ -243,6 +252,7 @@ function ItemStack:canTransfer(stack)
self.damage == stack.damage and self.damage == stack.damage and
self.maxDamage == stack.maxDamage and self.maxDamage == stack.maxDamage and
self.displayName == stack.displayName and self.displayName == stack.displayName and
self.nbt == stack.nbt and
objEquals(self.enchantments, stack.enchantments)) objEquals(self.enchantments, stack.enchantments))
end end
@ -272,6 +282,7 @@ function ItemStack:matches(query)
queryField(query.maxDamage, self.maxDamage) and queryField(query.maxDamage, self.maxDamage) and
queryField(query.enchantments, self.enchantments) and queryField(query.enchantments, self.enchantments) and
queryField(query.maxCount, self.maxCount) and queryField(query.maxCount, self.maxCount) and
queryField(query.nbt, self.nbt) and
queryField(query.displayName, self.displayName) queryField(query.displayName, self.displayName)
end end