From c57a35d5bd5110f0de811c2a9871acf71db72060 Mon Sep 17 00:00:00 2001
From: DS <vorunbekannt75@web.de>
Date: Thu, 17 Aug 2017 21:20:38 +0200
Subject: filter: allow to take items out of locked chests if same owner (#193)

---
 compat-chests.lua | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/compat-chests.lua b/compat-chests.lua
index 7cff6fd..69eb2f1 100644
--- a/compat-chests.lua
+++ b/compat-chests.lua
@@ -36,7 +36,7 @@ local function get_chest_formspec(pos)
 				pipeworks.button_on
 			}
 		)..pipeworks.button_label
-	
+
 	return formspec
 end
 
@@ -62,7 +62,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
 				local sound = open_chests[pn].sound
 				local swap = open_chests[pn].swap
 				local node = minetest.get_node(pos)
-				
+
 				open_chests[pn] = nil
 				for k, v in pairs(open_chests) do
 					if v.pos.x == pos.x and v.pos.y == pos.y and v.pos.z == pos.z then
@@ -71,13 +71,13 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
 				end
 				minetest.after(0.2, function()
 					minetest.swap_node(pos, { name = "default:" .. swap, param2 = node.param2 })
-					
+
 					-- Pipeworks notification
 					pipeworks.after_place(pos)
 				end)
 				minetest.sound_play(sound, {gain = 0.3, pos = pos, max_hear_distance = 10})
 			end
-			
+
 			-- Pipeworks Switch
 			if pipeworks.may_configure(pos, player) and not fields.quit then
 				fs_helpers.on_receive_fields(pos, fields)
@@ -142,6 +142,7 @@ override_protected = {
 			end
 			return inv:room_for_item("main", stack)
 		end,
+		input_inventory = "main",
 		connect_sides = {left = 1, right = 1, back = 1, bottom = 1, top = 1}
 	},
 	after_dig_node = pipeworks.after_dig
@@ -191,9 +192,9 @@ override = {
 	after_dig_node = pipeworks.after_dig
 }
 --[[local override_common = {
-	
+
 }
-for k,v in pairs(override_common) do 
+for k,v in pairs(override_common) do
 	override_protected[k] = v
 	override[k] = v
 end]]
-- 
cgit v1.2.3


From a5e1bfa0e824ab70877803d087c97440ff729cac Mon Sep 17 00:00:00 2001
From: DS <vorunbekannt75@web.de>
Date: Mon, 21 Aug 2017 00:05:08 +0200
Subject: give more possibilities to mods (#194)

* add owner to tubed items

* allow custom inventories
---
 filter-injector.lua | 15 ++++++++++++---
 item_transport.lua  | 11 ++++++-----
 2 files changed, 18 insertions(+), 8 deletions(-)

diff --git a/filter-injector.lua b/filter-injector.lua
index 45b27c4..1f6a90a 100644
--- a/filter-injector.lua
+++ b/filter-injector.lua
@@ -156,7 +156,7 @@ local function grabAndFire(data,slotseq_mode,exmatch_mode,filtmeta,frominv,fromi
 				end
 				local pos = vector.add(frompos, vector.multiply(dir, 1.4))
 				local start_pos = vector.add(frompos, dir)
-				local item1 = pipeworks.tube_inject_item(pos, start_pos, dir, item)
+				local item1 = pipeworks.tube_inject_item(pos, start_pos, dir, item, fakePlayer:get_player_name())
 				return true-- only fire one item, please
 			end
 	end
@@ -317,8 +317,17 @@ local function punch_filter(data, filtpos, filtnode, msg)
 		exact_match = filtmeta:get_int("exmatch_mode")
 	end
 
-	local frommeta = minetest.get_meta(frompos)
-	local frominv = frommeta:get_inventory()
+	local frominv
+	if fromtube.return_input_invref then
+		local pos = vector.add(filtpos, vector.multiply(dir, -1))
+		frominv = fromtube.return_input_invref(pos, fromnode, dir, owner)
+		if not frominv then
+			return
+		end
+	else
+		local frommeta = minetest.get_meta(frompos)
+		frominv = frommeta:get_inventory()
+	end
 	if fromtube.before_filter then fromtube.before_filter(frompos) end
 	for _, frominvname in ipairs(type(fromtube.input_inventory) == "table" and fromtube.input_inventory or {fromtube.input_inventory}) do
 		local done = false
diff --git a/item_transport.lua b/item_transport.lua
index b2d2aa2..551db07 100644
--- a/item_transport.lua
+++ b/item_transport.lua
@@ -7,13 +7,14 @@ function pipeworks.tube_item(pos, item)
 	error("obsolete pipeworks.tube_item() called; change caller to use pipeworks.tube_inject_item() instead")
 end
 
-function pipeworks.tube_inject_item(pos, start_pos, velocity, item)
+function pipeworks.tube_inject_item(pos, start_pos, velocity, item, owner)
 	-- Take item in any format
 	local stack = ItemStack(item)
 	local obj = luaentity.add_entity(pos, "pipeworks:tubed_item")
 	obj:set_item(stack:to_string())
 	obj.start_pos = vector.new(start_pos)
 	obj:setvelocity(velocity)
+	obj.owner = owner
 	--obj:set_color("red") -- todo: this is test-only code
 	return obj
 end
@@ -49,7 +50,7 @@ minetest.register_globalstep(function(dtime)
 	end
 end)
 
-local function go_next(pos, velocity, stack)
+local function go_next(pos, velocity, stack, owner)
 	local next_positions = {}
 	local max_priority = 0
 	local cnode = minetest.get_node(pos)
@@ -84,7 +85,7 @@ local function go_next(pos, velocity, stack)
 			local tube_priority = (tube_def and tube_def.priority) or 100
 			if tubedevice > 0 and tube_priority >= max_priority then
 				if not tube_def or not tube_def.can_insert or
-						tube_def.can_insert(npos, node, stack, vect) then
+						tube_def.can_insert(npos, node, stack, vect, owner) then
 					if tube_priority > max_priority then
 						max_priority = tube_priority
 						next_positions = {}
@@ -260,7 +261,7 @@ luaentity.register_entity("pipeworks:tubed_item", {
 		if moved and minetest.get_item_group(node.name, "tubedevice_receiver") == 1 then
 			local leftover
 			if minetest.registered_nodes[node.name].tube and minetest.registered_nodes[node.name].tube.insert_object then
-				leftover = minetest.registered_nodes[node.name].tube.insert_object(self.start_pos, node, stack, vel)
+				leftover = minetest.registered_nodes[node.name].tube.insert_object(self.start_pos, node, stack, vel, self.owner)
 			else
 				leftover = stack
 			end
@@ -276,7 +277,7 @@ luaentity.register_entity("pipeworks:tubed_item", {
 		end
 
 		if moved then
-			local found_next, new_velocity = go_next(self.start_pos, velocity, stack) -- todo: color
+			local found_next, new_velocity = go_next(self.start_pos, velocity, stack, self.owner) -- todo: color
 			local rev_vel = vector.multiply(velocity, -1)
 			local rev_dir = vector.direction(self.start_pos,vector.add(self.start_pos,rev_vel))
 			local rev_node = minetest.get_node(vector.round(vector.add(self.start_pos,rev_dir)))
-- 
cgit v1.2.3