Add optional before/after filter callbacks

These allow nodes that manage inventory in a non-standard manner (e.g. a
barrel) to still be able to work with pipeworks filters.
This commit is contained in:
Ciaran Gultnieks 2014-02-10 19:18:18 +00:00
parent 458fbb6240
commit 7bac96c588

View File

@ -130,20 +130,30 @@ minetest.register_node("pipeworks:filter", {
if not (tube and tube.input_inventory) then if not (tube and tube.input_inventory) then
return return
end end
if tube.before_filter then
tube.before_filter(frompos)
end
local frommeta = minetest.get_meta(frompos) local frommeta = minetest.get_meta(frompos)
local frominvname = tube.input_inventory local frominvname = tube.input_inventory
local frominv = frommeta:get_inventory() local frominv = frommeta:get_inventory()
local sname local sname
local fired = false
for _,filter in ipairs(inv:get_list("main")) do for _,filter in ipairs(inv:get_list("main")) do
sname = filter:get_name() sname = filter:get_name()
if sname ~= "" then if sname ~= "" then
-- XXX: that's a lot of parameters -- XXX: that's a lot of parameters
if grabAndFire(frominv, frominvname, frompos, fromnode, sname, tube, idef, dir) then return end if grabAndFire(frominv, frominvname, frompos, fromnode, sname, tube, idef, dir) then
fired = true
break
end
end end
end end
if inv:is_empty("main") then if not fired and inv:is_empty("main") then
grabAndFire(frominv,frominvname,frompos,fromnode,nil,tube,idef,dir) grabAndFire(frominv,frominvname,frompos,fromnode,nil,tube,idef,dir)
end end
if tube.after_filter then
tube.after_filter(frompos)
end
end, end,
}) })
@ -208,7 +218,7 @@ minetest.register_node("pipeworks:mese_filter", {
end end
end end
if inv:is_empty("main") then if inv:is_empty("main") then
grabAndFire(frominv, frominvname, frompos, fromnode, nil, tube, idef, dir, true) grabAndFire(frominv, frominvname, frompos, fromnode, nil, tube, idef, dir, true)
end end
end, end,
}) })