From 0e10e8360d6fa5aa6cbb86870b6244e8818d7dc8 Mon Sep 17 00:00:00 2001
From: coil <51716565+coil0@users.noreply.github.com>
Date: Sun, 15 Mar 2020 17:27:36 +0100
Subject: [PATCH] Fix crash when placing cable plates (#534)

---
 technic/machines/register/alloy_furnace.lua |   40 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 40 insertions(+), 0 deletions(-)

diff --git a/technic/machines/register/alloy_furnace.lua b/technic/machines/register/alloy_furnace.lua
index 879e528..1e3796d 100644
--- a/technic/machines/register/alloy_furnace.lua
+++ b/technic/machines/register/alloy_furnace.lua
@@ -1,10 +1,50 @@
 
 local S = technic.getter
 
+function technic.insert_object_unique_stack(pos, node, incoming_stack, direction)
+	local meta = minetest.get_meta(pos)
+	local inv = meta:get_inventory()
+	local incoming_name = incoming_stack:get_name()
+	local stack_index = nil
+	for inv_index, inv_stack in pairs(inv:get_list("src")) do
+		if inv_stack:get_name() == incoming_name then
+			stack_index = inv_index
+			break
+		end
+	end
+	if stack_index == nil then
+		return inv:add_item("src", incoming_stack)
+	end
+	local present_stack = inv:get_stack("src", stack_index)
+	local leftover = present_stack:add_item(incoming_stack)
+	inv:set_stack("src", stack_index, present_stack)
+	return leftover
+end
+
+function technic.can_insert_unique_stack(pos, node, incoming_stack, direction)
+	local meta = minetest.get_meta(pos)
+	local inv = meta:get_inventory()
+	local incoming_name = incoming_stack:get_name()
+	if meta:get_int("splitstacks") == 0 then
+		-- avoid looping second time with inv:contains_item("src", incoming_stack)
+		for _, inv_stack in pairs(inv:get_list("src")) do
+			if inv_stack:get_name() == incoming_name then
+				return inv_stack:item_fits(incoming_stack)
+			end
+		end
+	end
+
+	return technic.default_can_insert(pos, node, incoming_stack, direction)
+end
+
 function technic.register_alloy_furnace(data)
 	data.typename = "alloy"
 	data.machine_name = "alloy_furnace"
 	data.machine_desc = S("%s Alloy Furnace")
+
+	data.insert_object = technic.insert_object_unique_stack
+	data.can_insert = technic.can_insert_unique_stack
+
 	technic.register_base_machine(data)
 end
 

--
Gitblit v1.8.0