
-- translation support

local S = core.get_translator("bakedclay")

-- list of clay colours

local clay = {
	{"natural", S("Natural")},
	{"white", S("White")},
	{"grey", S("Grey")},
	{"black", S("Black")},
	{"red", S("Red")},
	{"yellow", S("Yellow")},
	{"green", S("Green")},
	{"cyan", S("Cyan")},
	{"blue", S("Blue")},
	{"magenta", S("Magenta")},
	{"orange", S("Orange")},
	{"violet", S("Violet")},
	{"brown", S("Brown")},
	{"pink", S("Pink")},
	{"dark_grey", S("Dark Grey")},
	{"dark_green", S("Dark Green")}
}

-- check mod support

local techcnc_mod = core.get_modpath("technic_cnc")
local stairs_mod = core.get_modpath("stairs")
local stairsplus_mod = core.get_modpath("moreblocks") and core.global_exists("stairsplus")
local stairsplus_compat = core.settings:get_bool("stairsplus_clay_compatibility") ~= false

-- scroll through colours

for _, clay in pairs(clay) do

	-- register node

	core.register_node("bakedclay:" .. clay[1], {
		description = clay[2] .. " " .. S("Baked Clay"),
		tiles = {"baked_clay_" .. clay[1] ..".png"},
		groups = {cracky = 3, bakedclay = 1},
		sounds = default.node_sound_stone_defaults(),
		is_ground_content = false
	})

	-- register craft recipe

	if clay[1] ~= "natural" then

		core.register_craft({
			output = "bakedclay:" .. clay[1] .. " 8",
			recipe = {
				{"group:bakedclay", "group:bakedclay", "group:bakedclay"},
				{"group:bakedclay", "dye:" .. clay[1], "group:bakedclay"},
				{"group:bakedclay", "group:bakedclay", "group:bakedclay"}
			}
		})
	end

	-- stairs plus

	if stairsplus_mod then

		stairsplus:register_all("bakedclay", "baked_clay_" .. clay[1],
				"bakedclay:" .. clay[1], {
			description = clay[2] .. " " .. S("Baked Clay"),
			tiles = {"baked_clay_" .. clay[1] .. ".png"},
			groups = {cracky = 3},
			sounds = default.node_sound_stone_defaults()
		})

		if stairsplus_compat then

			stairsplus:register_alias_all("bakedclay", clay[1],
					"bakedclay", "baked_clay_" .. clay[1])

			core.register_alias("stairs:slab_bakedclay_".. clay[1],
					"bakedclay:slab_baked_clay_" .. clay[1])

			core.register_alias("stairs:stair_bakedclay_".. clay[1],
					"bakedclay:stair_baked_clay_" .. clay[1])
		end

	-- stairs redo

	elseif stairs_mod and stairs.mod then

		stairs.register_all("bakedclay_" .. clay[1], "bakedclay:" .. clay[1],
			{cracky = 3},
			{"baked_clay_" .. clay[1] .. ".png"},
			clay[2] .. " " .. S("Baked Clay"),
			default.node_sound_stone_defaults())

	-- default stairs

	elseif stairs_mod then

		stairs.register_stair_and_slab("bakedclay_".. clay[1], "bakedclay:".. clay[1],
			{cracky = 3},
			{"baked_clay_" .. clay[1] .. ".png"},
			clay[2] .. " " .. S("Baked Clay Stair"),
			clay[2] .. " " .. S("Baked Clay Slab"),
			default.node_sound_stone_defaults())
	end

	-- register bakedclay for use in technic_cnc mod after all mods loaded

	if techcnc_mod then

		core.register_on_mods_loaded(function()

			technic_cnc.register_all("bakedclay:" .. clay[1],
				{cracky = 3, not_in_creative_inventory = 1},
				{"baked_clay_" .. clay[1] .. ".png"},
				clay[2] .. " Baked Clay")
		end)
	end
end

-- Terracotta blocks

for _, clay in pairs(clay) do

	if clay[1] ~= "natural" then

		local texture = "baked_clay_terracotta_" .. clay[1] ..".png"

		core.register_node("bakedclay:terracotta_" .. clay[1], {
			description = clay[2] .. " " .. S("Glazed Terracotta"),
			tiles = {
				texture .. "",
				texture .. "",
				texture .. "^[transformR180",
				texture .. "",
				texture .. "^[transformR270",
				texture .. "^[transformR90",
			},
			paramtype2 = "facedir",
			groups = {cracky = 3, terracotta = 1},
			sounds = default.node_sound_stone_defaults(),
			is_ground_content = false,
			on_place = core.rotate_node
		})

		core.register_craft({
			type = "cooking",
			output = "bakedclay:terracotta_" .. clay[1],
			recipe = "bakedclay:" .. clay[1]
		})
	end
end

core.register_alias("bakedclay:terracotta_light_blue", "bakedclay:terracotta_cyan")

-- cook clay block into natural baked clay

core.register_craft({
	type = "cooking",
	output = "bakedclay:natural",
	recipe = "default:clay"
})

-- register a few extra dye colour options

core.register_craft({ output = "dye:green 4", recipe = {{"default:cactus"}} })
core.register_craft({ output = "dye:brown 4", recipe = {{"default:dry_shrub"}} })

-- only add light grey recipe if unifieddye mod isnt present (conflict)

if not core.get_modpath("unifieddyes") then

	core.register_craft( {
		output = "dye:dark_grey 3",
		recipe = {{"dye:black", "dye:black", "dye:white"}}
	})

	core.register_craft( {
		output = "dye:grey 3",
		recipe = {{"dye:black", "dye:white", "dye:white"}}
	})
end

-- 2x2 red baked clay makes 16x clay brick

core.register_craft( {
	output = "default:clay_brick 16",
	recipe = {
		{"bakedclay:red", "bakedclay:red"},
		{"bakedclay:red", "bakedclay:red"}
	}
})

-- colored clay compatibility

if core.settings:get_bool("colored_clay_compatibility") == true then

	local cc = {
		{"black", "black"},
		{"blue", "blue"},
		{"bright", "natural"},
		{"brown", "brown"},
		{"cyan", "cyan"},
		{"dark_green", "dark_green"},
		{"dark_grey", "dark_grey"},
		{"green", "green"},
		{"grey", "grey"},
		{"hardened", "natural"},
		{"magenta", "magenta"},
		{"orange", "orange"},
		{"pink", "pink"},
		{"red", "red"},
		{"violet", "violet"},
		{"white", "white"},
		{"yellow", "yellow"}
	}

	for n = 1, #cc do

		local nod1 = "colored_clay:" .. cc[n][1]
		local nod2 = "bakedclay:" .. cc[n][2]

		core.register_alias(nod1, nod2)

		if stairsplus_mod then
			stairsplus:register_alias_all("colored_clay", cc[n][1], "bakedclay", cc[n][2])
		end
	end
end

-- get mod path

local path = core.get_modpath("bakedclay")

-- add new flowers

dofile(path .. "/flowers.lua")

-- add lucky blocks if mod present

if core.get_modpath("lucky_block") then
	dofile(path .. "/lucky_block.lua")
end

print ("[MOD] Baked Clay loaded")
