forked from mtcontrib/pipeworks
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:
parent
458fbb6240
commit
7bac96c588
@ -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,
|
||||||
})
|
})
|
||||||
|
Loading…
Reference in New Issue
Block a user