Skip to content

Commit

Permalink
Resolve aliases in cost calculation
Browse files Browse the repository at this point in the history
* If stairs from stairs mod were crafted before moreblocks was enabled,
  the old (now aliased) stairs variant is kept in inventory. If the player
  tried to recycle that stair variant, `inv:contains_item("output", stackname)`
  would return true as `contains_item` resolves alias names,
  but `circular_saw:get_cost` would return nil as it's expecting exact
  `stackname` matches which would later crash due to nil arithmetic.
  This PR fixes this issue by resolving alias using `minetest.registered_aliases` table.
  `circular_saw:get_cost` should work now in every scenario where
  `inv:contains_item("output", stackname)` returns true.
* backported from minetest-mods#175
* fixes minetest-mods#174
  • Loading branch information
mckaygerhard committed Feb 19, 2022
1 parent fe7e8a3 commit 4e1f71f
Showing 1 changed file with 2 additions and 1 deletion.
3 changes: 2 additions & 1 deletion circular_saw.lua
Original file line number Diff line number Diff line change
Expand Up @@ -89,8 +89,9 @@ circular_saw.names = {
}

function circular_saw:get_cost(inv, stackname)
local name = minetest.registered_aliases[stackname] or stackname
for i, item in pairs(inv:get_list("output")) do
if item:get_name() == stackname then
if item:get_name() == name then
return circular_saw.cost_in_microblocks[i]
end
end
Expand Down

0 comments on commit 4e1f71f

Please sign in to comment.