From 1a45ad19d4fa627e147bd385665e37942f6147fb Mon Sep 17 00:00:00 2001
From: Serhiy Zahoriya <serhiy.int@gmail.com>
Date: Sat, 11 Jan 2020 22:06:24 +0100
Subject: [PATCH] Alloy furnace: Accept only unique ItemStacks from tubes (#523)

---
 technic/machines/register/machine_base.lua |   45 +++++++++++++++++++++++++++++----------------
 1 files changed, 29 insertions(+), 16 deletions(-)

diff --git a/technic/machines/register/machine_base.lua b/technic/machines/register/machine_base.lua
index 15fb8ea..2965ba5 100644
--- a/technic/machines/register/machine_base.lua
+++ b/technic/machines/register/machine_base.lua
@@ -4,22 +4,26 @@
 local fs_helpers = pipeworks.fs_helpers
 local tube_entry = "^pipeworks_tube_connection_metallic.png"
 
-local tube = {
-	insert_object = function(pos, node, stack, direction)
-		local meta = minetest.get_meta(pos)
-		local inv = meta:get_inventory()
-		return inv:add_item("src", stack)
-	end,
-	can_insert = function(pos, node, stack, direction)
-		local meta = minetest.get_meta(pos)
-		local inv = meta:get_inventory()
-		if meta:get_int("splitstacks") == 1 then
-			stack = stack:peek_item(1)
-		end
-		return inv:room_for_item("src", stack)
-	end,
-	connect_sides = {left = 1, right = 1, back = 1, top = 1, bottom = 1},
-}
+function technic.default_can_insert(pos, node, stack, direction)
+	local meta = minetest.get_meta(pos)
+	local inv = meta:get_inventory()
+	if meta:get_int("splitstacks") == 1 then
+		stack = stack:peek_item(1)
+	end
+	return inv:room_for_item("src", stack)
+end
+
+function technic.new_default_tube()
+	return {
+		insert_object = function(pos, node, stack, direction)
+			local meta = minetest.get_meta(pos)
+			local inv = meta:get_inventory()
+			return inv:add_item("src", stack)
+		end,
+		can_insert = technic.default_can_insert,
+		connect_sides = {left = 1, right = 1, back = 1, top = 1, bottom = 1},
+	}
+end
 
 local connect_default = {"bottom", "back", "left", "right"}
 
@@ -62,6 +66,14 @@
 			"listring[current_player;main]"..
 			"listring[current_name;upgrade2]"..
 			"listring[current_player;main]"
+	end
+
+	local tube = technic.new_default_tube()
+	if data.can_insert then
+		tube.can_insert = data.can_insert
+	end
+	if data.insert_object then
+		tube.insert_object = data.insert_object
 	end
 
 	local run = function(pos, node)
@@ -144,6 +156,7 @@
 	if ltier == "lv" then
 		tentry = ""
 	end
+
 	minetest.register_node("technic:"..ltier.."_"..machine_name, {
 		description = machine_desc:format(tier),
 		tiles = {

--
Gitblit v1.8.0