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