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
1 changed files with 13 additions and 3 deletions

View File

@ -130,20 +130,30 @@ minetest.register_node("pipeworks:filter", {
if not (tube and tube.input_inventory) then
return
end
if tube.before_filter then
tube.before_filter(frompos)
end
local frommeta = minetest.get_meta(frompos)
local frominvname = tube.input_inventory
local frominv = frommeta:get_inventory()
local sname
local fired = false
for _,filter in ipairs(inv:get_list("main")) do
sname = filter:get_name()
if sname ~= "" then
-- 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
if inv:is_empty("main") then
if not fired and inv:is_empty("main") then
grabAndFire(frominv,frominvname,frompos,fromnode,nil,tube,idef,dir)
end
if tube.after_filter then
tube.after_filter(frompos)
end
end,
})
@ -208,7 +218,7 @@ minetest.register_node("pipeworks:mese_filter", {
end
end
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,
})