summaryrefslogtreecommitdiff
path: root/item_transport.lua
diff options
context:
space:
mode:
Diffstat (limited to 'item_transport.lua')
-rw-r--r--item_transport.lua8
1 files changed, 4 insertions, 4 deletions
diff --git a/item_transport.lua b/item_transport.lua
index e67ef35..b97d5bb 100644
--- a/item_transport.lua
+++ b/item_transport.lua
@@ -38,7 +38,7 @@ function pipeworks.tube_item(pos, item)
end
-- adding two tube functions
--- can_remove(pos,node,stack,dir) returns true if an item can be removed from that stack on that node
+-- can_remove(pos,node,stack,dir) returns the maximum number of items of that stack that can be removed
-- remove_items(pos,node,stack,dir,count) removes count items and returns them
-- both optional w/ sensible defaults and fallback to normal allow_* function
-- XXX: possibly change insert_object to insert_item
@@ -48,18 +48,18 @@ end
local function grabAndFire(frominv,frominvname,frompos,fromnode,sname,tube,idef,dir,all)
for spos,stack in ipairs(frominv:get_list(frominvname)) do
if (sname == nil and stack:get_name() ~= "") or stack:get_name() == sname then
- local doRemove = true
+ local doRemove = stack:get_count()
if tube.can_remove then
doRemove = tube.can_remove(frompos, fromnode, stack, dir)
elseif idef.allow_metadata_inventory_take then
doRemove = idef.allow_metadata_inventory_take(frompos,"main",spos, stack, fakePlayer)
end
-- stupid lack of continue statements grumble
- if doRemove then
+ if doRemove > 0 then
local item
local count
if all then
- count = stack:get_count()
+ count = math.min(stack:get_count(), doRemove)
else
count = 1
end