mirror of
https://github.com/mt-mods/pipeworks.git
synced 2024-12-26 10:50:27 +01:00
Accept multiple input inventories, fix bug with mesecons_mvps
This commit is contained in:
parent
8efcd39e39
commit
fd3c88eb86
@ -134,23 +134,36 @@ minetest.register_node("pipeworks:filter", {
|
|||||||
tube.before_filter(frompos)
|
tube.before_filter(frompos)
|
||||||
end
|
end
|
||||||
local frommeta = minetest.get_meta(frompos)
|
local frommeta = minetest.get_meta(frompos)
|
||||||
local frominvname = tube.input_inventory
|
|
||||||
local frominv = frommeta:get_inventory()
|
local frominv = frommeta:get_inventory()
|
||||||
|
|
||||||
|
local function from_inventory(frominvname)
|
||||||
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
|
if grabAndFire(frominv, frominvname, frompos, fromnode, sname, tube, idef, dir) then
|
||||||
fired = true
|
return true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if inv:is_empty("main") then
|
||||||
|
grabAndFire(frominv, frominvname, frompos, fromnode, nil, tube, idef, dir)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
if type(tube.input_inventory) == "table" then
|
||||||
|
for _, i in ipairs(tube.input_inventory) do
|
||||||
|
if from_inventory(i) then -- fired an item
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
else
|
||||||
|
from_inventory(tube.input_inventory)
|
||||||
end
|
end
|
||||||
if not fired and inv:is_empty("main") then
|
|
||||||
grabAndFire(frominv,frominvname,frompos,fromnode,nil,tube,idef,dir)
|
|
||||||
end
|
|
||||||
if tube.after_filter then
|
if tube.after_filter then
|
||||||
tube.after_filter(frompos)
|
tube.after_filter(frompos)
|
||||||
end
|
end
|
||||||
@ -207,18 +220,43 @@ minetest.register_node("pipeworks:mese_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 = minetest.registered_nodes[fromnode.name].tube.input_inventory
|
|
||||||
local frominv = frommeta:get_inventory()
|
local frominv = frommeta:get_inventory()
|
||||||
|
|
||||||
|
local function from_inventory(frominvname)
|
||||||
local sname
|
local sname
|
||||||
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
|
||||||
if grabAndFire(frominv, frominvname, frompos, fromnode, sname, tube, idef, dir, true) then return end
|
-- XXX: that's a lot of parameters
|
||||||
|
if grabAndFire(frominv, frominvname, frompos, fromnode, sname, tube, idef, dir, true) then
|
||||||
|
return true
|
||||||
|
end
|
||||||
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)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
if type(tube.input_inventory) == "table" then
|
||||||
|
for _, i in ipairs(tube.input_inventory) do
|
||||||
|
if from_inventory(i) then -- fired an item
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
from_inventory(tube.input_inventory)
|
||||||
|
end
|
||||||
|
|
||||||
|
if tube.after_filter then
|
||||||
|
tube.after_filter(frompos)
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
@ -473,6 +511,16 @@ minetest.register_entity("pipeworks:tubed_item", {
|
|||||||
})
|
})
|
||||||
|
|
||||||
if minetest.get_modpath("mesecons_mvps") ~= nil then
|
if minetest.get_modpath("mesecons_mvps") ~= nil then
|
||||||
|
local function add_table(table,toadd)
|
||||||
|
local i = 1
|
||||||
|
while true do
|
||||||
|
o = table[i]
|
||||||
|
if o == toadd then return end
|
||||||
|
if o == nil then break end
|
||||||
|
i = i+1
|
||||||
|
end
|
||||||
|
table[i] = toadd
|
||||||
|
end
|
||||||
mesecon:register_mvps_unmov("pipeworks:tubed_item")
|
mesecon:register_mvps_unmov("pipeworks:tubed_item")
|
||||||
mesecon:register_on_mvps_move(function(moved_nodes)
|
mesecon:register_on_mvps_move(function(moved_nodes)
|
||||||
local objects_to_move = {}
|
local objects_to_move = {}
|
||||||
@ -481,7 +529,8 @@ if minetest.get_modpath("mesecons_mvps") ~= nil then
|
|||||||
for _, obj in ipairs(objects) do
|
for _, obj in ipairs(objects) do
|
||||||
local entity = obj:get_luaentity()
|
local entity = obj:get_luaentity()
|
||||||
if entity and entity.name == "pipeworks:tubed_item" then
|
if entity and entity.name == "pipeworks:tubed_item" then
|
||||||
objects_to_move[#objects_to_move+1] = obj
|
--objects_to_move[#objects_to_move+1] = obj
|
||||||
|
add_table(objects_to_move, obj)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user