From: Ciaran Gultnieks Date: Mon, 10 Feb 2014 19:18:18 +0000 (+0000) Subject: Add optional before/after filter callbacks X-Git-Url: http://81.2.79.47:8989/gitweb/?a=commitdiff_plain;h=7bac96c58816b4c4ad5dc95dcbdce9e435fcfb50;p=zefram%2Fminetest%2Fpipeworks.git 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. --- diff --git a/item_transport.lua b/item_transport.lua index b97d5bb..1e698bf 100644 --- a/item_transport.lua +++ b/item_transport.lua @@ -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, })