diff options
Diffstat (limited to 'mods/vzxv_inv/init.lua')
-rw-r--r-- | mods/vzxv_inv/init.lua | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/mods/vzxv_inv/init.lua b/mods/vzxv_inv/init.lua index c5bf6f0..8c7aff4 100644 --- a/mods/vzxv_inv/init.lua +++ b/mods/vzxv_inv/init.lua @@ -94,7 +94,7 @@ end -- item is given to player -- TODO: weight limit function vzxv.give_items(player, stack) - if stack:is_empty() then return 0 end + if stack:is_empty() then return stack end local inv = vzxv.get_inventory(player) local idx = vzxv.inventory_idx(player, stack) if idx then @@ -103,34 +103,35 @@ function vzxv.give_items(player, stack) table.insert(inv, ItemStack(stack)) end vzxv.update_inventory(player, inv) - return stack:get_count() + -- return leftover + return ItemStack "" end -- player actively collects item function vzxv.collect_items(player, stack) if stack:is_empty() then return 0 end - local count = vzxv.give_items(player, stack) + local leftover = vzxv.give_items(player, stack) local idx = vzxv.inventory_idx(player, stack) if idx then vzxv.add_to_hotbar(player, idx) end - return count + return leftover end -- set require_all to require that all that at least the amount of items being -- removed exist in the inventory function vzxv.remove_items(player, stack, require_all) - if stack:is_empty() then return 0 end + if stack:is_empty() then return ItemStack "" end local idx = vzxv.inventory_idx(player, stack) - if not idx then return 0 end + if not idx then return ItemStack "" end local inv = vzxv.get_inventory(player) if require_all and inv[idx]:get_count() < stack:get_count() then - return 0 + return ItemStack "" end local taken = inv[idx]:take_item(stack:get_count()) - vzxv.update_inventory(inv) + vzxv.update_inventory(player, inv) return taken end @@ -149,9 +150,9 @@ function minetest.handle_node_drops(pos, drops, digger) local rejected = {} for _, drop in ipairs(drops) do drop = ItemStack(drop) - local accepted = vzxv.collect_items(digger, drop) - if drop:get_count() - accepted ~= 0 then - table.insert(rejected, drop:peek_item(drop:get_count() - accepted)) + local leftover = vzxv.collect_items(digger, drop) + if not leftover:is_empty() then + table.insert(rejected, leftover) end end -- delay this until after the node has been set to air @@ -185,7 +186,8 @@ local function give_command(player_name, item, count) local stack = ItemStack(item) stack:set_count(count) - local count = vzxv.collect_items(player, stack) + local leftover = vzxv.collect_items(player, stack) + local count = count - leftover:get_count() return true, ("gave %s %s to %s"):format(count, item, player_name) end |