From 8e9affc841412fffef35e2396566334ae3e6b091 Mon Sep 17 00:00:00 2001 From: est31 Date: Tue, 3 Feb 2015 23:12:10 +0100 Subject: Make sorting tubes not drop elements if all outputs filtering for a specific element are filled. Send them to some other open (empty) port instead. --- sorting_tubes.lua | 39 +++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/sorting_tubes.lua b/sorting_tubes.lua index 84a2306..8c1d49e 100644 --- a/sorting_tubes.lua +++ b/sorting_tubes.lua @@ -52,22 +52,29 @@ if pipeworks.enable_mese_tube then local inv = meta:get_inventory() local name = stack:get_name() for i, vect in ipairs(pipeworks.meseadjlist) do - if meta:get_int("l"..i.."s") == 1 then - local invname = "line"..i - local is_empty = true - for _, st in ipairs(inv:get_list(invname)) do - if not st:is_empty() then - is_empty = false - if st:get_name() == name then - foundn = foundn + 1 - found[foundn] = vect - end - end - end - if is_empty then - tbln = tbln + 1 - tbl[tbln] = vect - end + local npos = vector.add(pos, vect) + local node = minetest.get_node(npos) + local reg_node = minetest.registered_nodes[node.name] + if meta:get_int("l"..i.."s") == 1 and reg_node then + local tube_def = reg_node.tube + if not tube_def or not tube_def.can_insert or + tube_def.can_insert(npos, node, stack, vect) then + local invname = "line"..i + local is_empty = true + for _, st in ipairs(inv:get_list(invname)) do + if not st:is_empty() then + is_empty = false + if st:get_name() == name then + foundn = foundn + 1 + found[foundn] = vect + end + end + end + if is_empty then + tbln = tbln + 1 + tbl[tbln] = vect + end + end end end return (foundn > 0) and found or tbl -- cgit v1.2.3