From 6731db14e580ddccace186f5a8ac03dad0661e0c Mon Sep 17 00:00:00 2001
From: Gábriel <38207624+gabriel1379@users.noreply.github.com>
Date: Sun, 07 Jul 2024 18:53:15 +0200
Subject: [PATCH] Add compressor recipes for nether racks (#644)

---
 technic/machines/register/recipes.lua |   84 ++++++++++++++++++++++++++++++++++-------
 1 files changed, 69 insertions(+), 15 deletions(-)

diff --git a/technic/machines/register/recipes.lua b/technic/machines/register/recipes.lua
index cff8ca1..ba4a5e1 100644
--- a/technic/machines/register/recipes.lua
+++ b/technic/machines/register/recipes.lua
@@ -1,18 +1,38 @@
+local have_ui = minetest.get_modpath("unified_inventory")
+local have_cg = minetest.get_modpath("craftguide")
+local have_i3 = minetest.get_modpath("i3")
 
-technic.recipes = {cooking = {numitems = 1}}
-function technic.register_recipe_type(typename, desc, numitems)
-	numitems = numitems or 1
-	if unified_inventory and unified_inventory.register_craft_type then
-		unified_inventory.register_craft_type(typename, {
-			description = desc,
-			height = numitems,
-			width = 1,
-		})
+technic.recipes = { cooking = { input_size = 1, output_size = 1 } }
+function technic.register_recipe_type(typename, origdata)
+	local data = {}
+	for k, v in pairs(origdata) do data[k] = v end
+	data.input_size = data.input_size or 1
+	data.output_size = data.output_size or 1
+	if data.output_size == 1 then
+		if have_ui and unified_inventory.register_craft_type then
+			unified_inventory.register_craft_type(typename, {
+				description = data.description,
+				width = data.input_size,
+				height = 1,
+			})
+		end
+		if have_cg and craftguide.register_craft_type then
+			craftguide.register_craft_type(typename, {
+				description = data.description,
+			})
+		end
+		if have_i3 then
+			i3.register_craft_type(typename, {
+				description = data.description,
+			})
+		end
 	end
-	technic.recipes[typename] = {numitems = numitems, recipes = {}}
+	data.recipes = {}
+	technic.recipes[typename] = data
 end
 
 local function get_recipe_index(items)
+	if not items or type(items) ~= "table" then return false end
 	local l = {}
 	for i, stack in ipairs(items) do
 		l[i] = ItemStack(stack):get_name()
@@ -26,22 +46,53 @@
 	for i, stack in ipairs(data.input) do
 		data.input[i] = ItemStack(stack):to_string()
 	end
-	data.output = ItemStack(data.output):to_string()
-	
+	if type(data.output) == "table" then
+		for i, v in ipairs(data.output) do
+			data.output[i] = ItemStack(data.output[i]):to_string()
+		end
+	else
+		data.output = ItemStack(data.output):to_string()
+	end
+
 	local recipe = {time = data.time, input = {}, output = data.output}
 	local index = get_recipe_index(data.input)
+	if not index then
+		print("[Technic] ignored registration of garbage recipe!")
+		return
+	end
 	for _, stack in ipairs(data.input) do
 		recipe.input[ItemStack(stack):get_name()] = ItemStack(stack):get_count()
 	end
-	
+
 	technic.recipes[typename].recipes[index] = recipe
-	if unified_inventory then
+	if have_ui and technic.recipes[typename].output_size == 1 then
 		unified_inventory.register_craft({
 			type = typename,
 			output = data.output,
 			items = data.input,
 			width = 0,
 		})
+	end
+	if (have_cg or have_i3) and technic.recipes[typename].output_size == 1 then
+		local result = data.output
+		if (type(result)=="table") then
+			result = result[1]
+		end
+		local items = table.concat(data.input, ", ")
+		if have_cg and craftguide.register_craft then
+			craftguide.register_craft({
+				type = typename,
+				result = result,
+				items = {items},
+			})
+		end
+		if have_i3 then
+			i3.register_craft({
+				type = typename,
+				result = result,
+				items = {items},
+			})
+		end
 	end
 end
 
@@ -65,12 +116,15 @@
 		end
 	end
 	local index = get_recipe_index(items)
+	if not index then
+		print("[Technic] ignored registration of garbage recipe!")
+		return
+	end
 	local recipe = technic.recipes[typename].recipes[index]
 	if recipe then
 		local new_input = {}
 		for i, stack in ipairs(items) do
 			if stack:get_count() < recipe.input[stack:get_name()] then
-				print(stack:get_name())
 				return nil
 			else
 				new_input[i] = ItemStack(stack)

--
Gitblit v1.8.0