summaryrefslogtreecommitdiff
path: root/mods/vzxv_inv/init.lua
diff options
context:
space:
mode:
Diffstat (limited to 'mods/vzxv_inv/init.lua')
-rw-r--r--mods/vzxv_inv/init.lua26
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