--[[

	TechAge
	=======

	Copyright (C) 2019-2025 Joachim Stolberg

	AGPL v3
	See LICENSE.txt for more information

	Meltingpot recipes
	Bucket redefinitions

]]--

local S = techage.S

--
-- New burner recipes
--
techage.ironage_register_recipe({
	output = "default:obsidian",
	recipe = {"default:cobble"},
	heat = 10,
	time = 8,
})

techage.ironage_register_recipe({
	output = "techage:iron_ingot",
	recipe = {"default:iron_lump"},
	heat = 5,
	time = 3,
})

minetest.register_craftitem("techage:iron_ingot", {
	description = S("TA1 Iron Ingot"),
	inventory_image = "techage_iron_ingot.png",
	use_texture_alpha = techage.CLIP,
})

local function check_protection(pos, name, text)
	if minetest.is_protected(pos, name) then
		minetest.log("action", (name ~= "" and name or "A mod")
			.. " tried to " .. text
			.. " at protected position "
			.. minetest.pos_to_string(pos)
			.. " with a bucket")
		minetest.record_protection_violation(pos, name)
		return true
	end
	return false
end

-- derived from bucket/init.lua
local function register_liquid(source, flowing, itemname, inventory_image, name,
		groups, force_renew)
	bucket.liquids[source] = {
		source = source,
		flowing = flowing,
		itemname = itemname,
		force_renew = force_renew,
	}
	bucket.liquids[flowing] = bucket.liquids[source]

	if itemname ~= nil then
		minetest.unregister_item(itemname)

		minetest.register_craftitem(":"..itemname, {
			description = name,
			inventory_image = inventory_image,
			stack_max = 1,
			liquids_pointable = true,
			groups = groups,

			on_place = function(itemstack, user, pointed_thing)
				-- Must be pointing to node
				if pointed_thing.type ~= "node" then
					return
				end

				local node = minetest.get_node_or_nil(pointed_thing.under)
				local ndef = node and minetest.registered_nodes[node.name]

				-- Call on_rightclick if the pointed node defines it
				if ndef and ndef.on_rightclick and
						not (user and user:is_player() and
						user:get_player_control().sneak) then
					return ndef.on_rightclick(
						pointed_thing.under,
						node, user,
						itemstack)
				end

				local lpos

				-- Check if pointing to a buildable node
				if ndef and ndef.buildable_to then
					-- buildable; replace the node
					lpos = pointed_thing.under
				else
					-- not buildable to; place the liquid above
					-- check if the node above can be replaced

					lpos = pointed_thing.above
					node = minetest.get_node_or_nil(lpos)
					local above_ndef = node and minetest.registered_nodes[node.name]

					if not above_ndef or not above_ndef.buildable_to then
						-- do not remove the bucket with the liquid
						return itemstack
					end
				end

				if check_protection(lpos, user
						and user:get_player_name()
						or "", "place "..source) then
					return
				end

				-------------------------------- Start Modification
				if techage.disable_lava_above_sea_level then
					if source == "default:lava_source" and lpos.y > 0 and not minetest.is_singleplayer() then
					   minetest.chat_send_player(user:get_player_name(), S("[Bucket] Lava can only be placed below sea level!"))
					   return
					else
						-- see "basis/lib.lua" techage.is_ocean(pos)
						minetest.set_node(lpos, {name = source, param2 = 1})
					end
				else
					minetest.set_node(lpos, {name = source, param2 = 1})
				end
				-------------------------------- End Modification
				return ItemStack("bucket:bucket_empty")
			end
		})
	end
end


--
-- Changed default recipes
--
if techage.modified_recipes_enabled then
	minetest.clear_craft({
		recipe = {
		{"default:copper_ingot", "default:copper_ingot", "default:copper_ingot"},
		{"default:copper_ingot", "default:tin_ingot", "default:copper_ingot"},
		{"default:copper_ingot", "default:copper_ingot", "default:copper_ingot"},
	}
	})
	-- delete cooking iron lumps into steel ingots
	minetest.clear_craft({
		type = "cooking",
		recipe = "default:iron_lump",
	})
	minetest.clear_craft({output = "fire:flint_and_steel"})
	minetest.clear_craft({output = "bucket:bucket_empty"})
	if minetest.global_exists("moreores") then
		minetest.clear_craft({
			recipe = "moreores:silver_lump",
			type = "cooking",
		})
	end

	techage.ironage_register_recipe({
		output = "default:bronze_ingot 4",
		recipe = {"default:copper_ingot", "default:copper_ingot", "default:copper_ingot", "default:tin_ingot"},
		heat = 4,
		time = 8,
	})

	techage.ironage_register_recipe({
		output = "default:steel_ingot 4",
		recipe = {"default:coal_lump", "default:iron_lump", "default:iron_lump", "default:iron_lump"},
		heat = 7,
		time = 8,
	})

	techage.ironage_register_recipe({
		output = "default:tin_ingot 1",
		recipe = {"default:tin_lump"},
		heat = 4,
		time = 2,
	})

	if minetest.global_exists("moreores") then
		techage.ironage_register_recipe({
			output = "moreores:silver_ingot 1",
			recipe = {"moreores:silver_lump"},
			heat = 5,
			time = 2,
		})

	end

	minetest.register_craft({
	   output = "fire:flint_and_steel",
	   recipe = {
		  {"default:flint", "default:iron_lump"}
	   }
	})

	minetest.register_craft({
		output = 'bucket:bucket_empty 2',
		recipe = {
			{'techage:iron_ingot', '', 'techage:iron_ingot'},
			{'', 'techage:iron_ingot', ''},
		}
	})

	minetest.override_item("fire:flint_and_steel", {
			description = S("Flint and Iron"),
			inventory_image = "fire_flint_steel.png^[colorize:#c7643d:60",
	})

	minetest.override_item("bucket:bucket_empty", {
			inventory_image = "bucket.png^[colorize:#c7643d:40"
	})
	minetest.override_item("bucket:bucket_river_water", {
			inventory_image = "bucket_river_water.png^[colorize:#c7643d:30"
	})

	register_liquid(
		"default:water_source",
		"default:water_flowing",
		"bucket:bucket_water",
		"bucket_water.png^[colorize:#c7643d:30",
		"Water Bucket",
		{water_bucket = 1}
	)

	register_liquid(
		"default:lava_source",
		"default:lava_flowing",
		"bucket:bucket_lava",
		"bucket_lava.png^[colorize:#c7643d:30",
		"Lava Bucket"
	)
end
