diff options
Diffstat (limited to 'mods/vzxv_itemstacks/container.lua')
-rw-r--r-- | mods/vzxv_itemstacks/container.lua | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/mods/vzxv_itemstacks/container.lua b/mods/vzxv_itemstacks/container.lua index dca02c8..e7cf9fc 100644 --- a/mods/vzxv_itemstacks/container.lua +++ b/mods/vzxv_itemstacks/container.lua @@ -56,7 +56,6 @@ end function vzxv.get_container_stack(pos) local meta = minetest.get_meta(pos) local stack = meta:get_string("stack") - if stack == "" then return false end return ItemStack(stack) end @@ -101,9 +100,32 @@ function vzxv.container_destruct(pos) remove_container_entity(pos) end --- if the itemstack can be placed in the container, do so and return true. --- otherwise return false. -function vzxv.add_container_items(pos, itemstack) +function vzxv.add_container_items(pos, stack) + local contents = vzxv.get_container_stack(pos) + local leftover = contents:add_item(stack) + vzxv.set_container_stack(pos, contents) + return leftover end +function vzxv.take_container_items(pos, n) + local contents = vzxv.get_container_stack(pos) + local removed = contents:take_item(n) + vzxv.set_container_stack(pos, contents) + return removed +end + +function vzxv.player_take_container_items(pos, _, player) + local items = vzxv.take_container_items(pos, 99) + local leftover = vzxv.collect_items(player, items) + vzxv.add_container_items(pos, leftover) +end + +function vzxv.player_add_container_items(pos, _, player, stack) + stack:set_count(math.min(stack:get_count(), stack:get_stack_max())) + local items = vzxv.remove_items(player, stack) + local leftover = vzxv.add_container_items(pos, items) + vzxv.give_items(player, leftover) + + return leftover +end |