--scrolls

minetest.register_craftitem(
	"witchcraft:scroll_day",
	{
		description = "Scroll of day",
		inventory_image = "witchcraft_scroll.png^witchcraft_sun_over.png",
		stack_max = 1,
		on_use = function(item)
			minetest.set_timeofday(0.5)
			item:take_item()
			return item
		end,
	})

minetest.register_craftitem(
	"witchcraft:scroll_night",
	{
		description = "Scroll of night",
		inventory_image = "witchcraft_scroll.png^witchcraft_moon_over.png",
		stack_max = 1,
		on_use = function(item)
			minetest.set_timeofday(0)
			item:take_item()
			return item
		end,
	})

if minetest.get_modpath("pmobs") then
	minetest.register_craftitem(
		"witchcraft:scroll_wild",
		{
			description = "Scroll of Wild",
			inventory_image = "witchcraft_scroll.png^witchcraft_dark_over.png",
			stack_max = 1,
			on_use = function(item, placer)
				local pos = placer:getpos();
				minetest.add_entity(pos, "pmobs:dog")
				item:take_item()
				return item
			end,
		})
end

minetest.register_craftitem(
	"witchcraft:scroll_fireball",
	{
		description = "Scroll of fireball",
		inventory_image = "witchcraft_scroll.png^witchcraft_fire_over.png",
		stack_max = 1,
		on_use = function(item, placer, pos)
			local dir = placer:get_look_dir();
			local playerpos = placer:getpos();
			local obj = minetest.add_entity(
				{x=playerpos.x+dir.x*1.5,y=playerpos.y+1.5+dir.y,z=playerpos.z+0+dir.z},
				"witchcraft:fireball")
			local obj2 = minetest.add_entity(
				{x=playerpos.x+dir.x*1.5,y=playerpos.y+1.5+dir.y,z=playerpos.z+0+dir.z},
				"witchcraft:fireball")
			local obj3 = minetest.add_entity(
				{x=playerpos.x+dir.x*1.5,y=playerpos.y+1.5+dir.y,z=playerpos.z+0+dir.z},
				"witchcraft:fireball")
			local obj4 = minetest.add_entity(
				{x=playerpos.x+dir.x*1.5,y=playerpos.y+1.5+dir.y,z=playerpos.z+0+dir.z},
				"witchcraft:fireball")
			obj2:setvelocity({x=dir.x*7+0.5,y=dir.y*7,z=dir.z*7+0.5})
			obj3:setvelocity({x=dir.x*7-0.5,y=dir.y*7,z=dir.z*7-0.5})
			obj4:setvelocity({x=dir.x*7,y=dir.y*7-0.5,z=dir.z*7})
			obj:setvelocity({x=dir.x*7,y=dir.y*7+0.5,z=dir.z*7})
			item:take_item()
			return item
		end,
	})

if minetest.get_modpath("lightning") then
	minetest.register_craftitem(
		"witchcraft:scroll_lightning",
		{
			description = "Scroll of lightning",
			inventory_image = "witchcraft_scroll.png^witchcraft_thunder_over.png",
			stack_max = 1,
			on_use = function(item, placer, pos)
				local playerpos = placer:getpos();
				local dir = placer:get_look_dir();
				lightning.strike({x=playerpos.x+dir.x*2,y=playerpos.y+0+dir.y,z=playerpos.z+dir.z*2})
				item:take_item()
				return item
			end,
		})
end

minetest.register_craftitem(
	"witchcraft:scroll_icicle",
	{
		description = "Scroll of icicle",
		inventory_image = "witchcraft_scroll.png^witchcraft_ice_over.png",
		stack_max = 1,
		on_use = function(item, placer, pos)
			local dir = placer:get_look_dir();
			local playerpos = placer:getpos();
			local vec = {x=dir.x*7,y=dir.y*7,z=dir.z*7}
			local obj = minetest.add_entity({x=playerpos.x+dir.x*1.5,y=playerpos.y+1.5+dir.y,z=playerpos.z+0+dir.z}, "witchcraft:ice")
			local obj2 = minetest.add_entity({x=playerpos.x+dir.x*1.5,y=playerpos.y+1.5+dir.y,z=playerpos.z+1+dir.z}, "witchcraft:ice")
			local obj3 = minetest.add_entity({x=playerpos.x+1+dir.x*1.5,y=playerpos.y+1.5+dir.y,z=playerpos.z+0+dir.z}, "witchcraft:ice")
			obj:setvelocity(vec)
			obj2:setvelocity(vec)
			obj3:setvelocity(vec)
			
			item:take_item()
			return item
		end,
	})

minetest.register_craftitem(
	"witchcraft:scroll_nature",
	{
		description = "Scroll of nature",
		inventory_image = "witchcraft_scroll.png^witchcraft_leaf_over.png",
		stack_max = 1,
		on_use = function(item, placer, pos)
			local dir = placer:get_look_dir();
			local playerpos = placer:getpos();
			local vec = {x=dir.x*6,y=dir.y*6,z=dir.z*6}
			local obj = minetest.add_entity({x=playerpos.x+dir.x*1.5,y=playerpos.y+1.5+dir.y,z=playerpos.z+0+dir.z}, "witchcraft:tree")
			obj:setvelocity(vec)
			
			item:take_item()
			return item
		end,
	})

minetest.register_craftitem(
	"witchcraft:scroll",
	{
		description = "Blank Scroll",
		inventory_image = "witchcraft_scroll.png",
	})

minetest.register_craftitem(
	"witchcraft:scroll_recipe",
	{
		description = "Recipe Scroll",
		inventory_image = "witchcraft_scroll.png^witchcraft_writing_over.png",
		on_use = function(itemstack, user, pointed_thing)			
			local formspec = "size[10,9]"..
				"background[-0.6,-0.5;11.5,10.4;witchcraft_recipes.png]";
			
			minetest.show_formspec(user:get_player_name(), "witchcraft:scroll", formspec);	
		end,
	})

if minetest.get_modpath("pmobs")then
	minetest.register_craft(
		{
			output = 'witchcraft:scroll_wild',
			recipe = {
				{'mobs:meat_raw'},
				{'witchcraft:scroll'},
			}
		})
	
end

minetest.register_craft(
	{
		output = 'witchcraft:scroll',
		recipe = {
			{'default:paper', 'default:paper', ''},
			{'default:paper', 'default:paper', ''},
		}
	})

minetest.register_craft(
	{
		output = 'witchcraft:scroll_recipe',
		recipe = {
			{'dye:black'},
			{'witchcraft:scroll'},
		}
	})

minetest.register_craft(
	{
		output = 'witchcraft:scroll_icicle',
		recipe = {
			{'default:ice'},
			{'default:diamond'},
			{'witchcraft:scroll'},
		}
	})

minetest.register_craft(
	{
		output = 'witchcraft:scroll_fireball',
		recipe = {
			{'default:obsidian_shard'},
			{'default:diamond'},
			{'witchcraft:scroll'},
		}
	})

minetest.register_craft(
	{
		output = 'witchcraft:scroll_nature',
		recipe = {
			{'default:leaves'},
			{'default:diamond'},
			{'witchcraft:scroll'},
		}
	})

minetest.register_craft(
	{
		output = 'witchcraft:scroll_day',
		recipe = {
			{'default:torch'},
			{'default:diamond'},
			{'witchcraft:scroll'},
		}
	})

minetest.register_craft(
	{
		output = 'witchcraft:scroll_night',
		recipe = {
			{'default:coal_lump'},
			{'default:diamond'},
			{'witchcraft:scroll'},
		}
	})


minetest.register_craft(
	{
		output = 'witchcraft:scroll_lightning',
		recipe = {
			{'default:steel_ingot'},
			{'default:diamond'},
			{'witchcraft:scroll'},
		}
	})

--scroll powers

minetest.register_entity(
	"witchcraft:fireball",
	{
		textures = {"tnt_boom.png"},
		velocity = 0.1,
		damage = 2,
		collisionbox = {0, 0, 0, 0, 0, 0},
		on_step = function(self, obj, pos)		
			local remove = minetest.after(
				2,
				function() 
					self.object:remove()
				end)
			local pos = self.object:getpos()
			local objs = minetest.get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 2)	
			for k, obj in pairs(objs) do
				if obj:get_luaentity() ~= nil then
					if obj:get_luaentity().name ~= "witchcraft:fireball"
						and obj:get_luaentity().name ~= "__builtin:item"
						and obj:get_luaentity().name ~= "gauges:hp_bar"
					then
						obj:punch(
							self.object, 1.0,
							{
								full_punch_interval=1.0,
								damage_groups={fleshy=3},
							}, nil)
						self.object:remove()
					end
				end
			end
			for dx=0,1 do
				for dy=0,1 do
					for dz=0,1 do
						local p = {x=pos.x+dx, y=pos.y, z=pos.z+dz}
						local t = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz}
						local n = minetest.get_node(p).name
						if n ~= "witchcraft:fireball" and n ~="default:dirt_with_grass"
						and n ~="default:dirt_with_dry_grass" and n ~="default:stone" then	
							if minetest.registered_nodes[n].groups.flammable --[[or math.random(1, 100) <= 1]] then
								minetest.set_node(t, {name="fire:basic_flame"})
								self.object:remove()
								return
							end
						end
					end
				end
			end
			hit_node = function(self, pos, node)
				--	local pos = self.object:getpos()
				for dx=-4,4 do
					for dy=-4,4 do
						for dz=-4,4 do
							local p = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz}
							local t = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz}
							local n = minetest.get_node(pos).name
							if math.random(1, 50) <= 35 then
								minetest.remove_node(p)
							end
							if minetest.registered_nodes[n].groups.flammable or math.random(1, 100) <=5 then
								minetest.set_node(t, {name="fire:basic_flame"})
							end
						end
					end
				end
			end

			local apos = self.object:getpos()
			local vec = self.object:getvelocity()
			local part = minetest.add_particlespawner(
				6, --amount
				0.3, --time
				{x=apos.x-0.3, y=apos.y-0.3, z=apos.z-0.3}, --minpos
				{x=apos.x+0.3, y=apos.y+0.3, z=apos.z+0.3}, --maxpos
				{x=-0, y=-0, z=-0}, --minvel
				{x=0, y=0, z=0}, --maxvel
				{x=0,y=-0.5,z=0}, --minacc
				{x=-vec.x,y=-vec.y,z=-vec.z}, --maxacc
				0.1, --minexptime
				0.3, --maxexptime
				1, --minsize
				2, --maxsize
				false, --collisiondetection
				"witchcraft_flame.png" --texture
			)
			
		end,
	})



minetest.register_entity(
	"witchcraft:tree",
	{
		textures = {"witchcraft_skin.png"},
		velocity = 1,
		damage = 2,
		collisionbox = {0, 0, 0, 0, 0, 0},
		on_step = function(self, obj, pos)		
			local remove = minetest.after(
				2,
				function() 
					self.object:remove()
				end)
			local pos = self.object:getpos()
			local objs = minetest.get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 2)	
			for k, obj in pairs(objs) do
				if obj:get_luaentity() ~= nil then
					if obj:get_luaentity().name ~= "witchcraft:tree"
						and obj:get_luaentity().name ~= "__builtin:item"
						and obj:get_luaentity().name ~= "gauges:hp_bar"
					then
						obj:remove()
						local treepos = self.object:getpos()
						default.grow_new_jungle_tree(treepos)
						self.object:remove()
					end
				end
			end
			for dx=0,1 do
				for dy=0,1 do
					for dz=0,1 do
						local p = {x=pos.x+dx, y=pos.y, z=pos.z+dz}
						local t = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz}
						local n = minetest.get_node(p).name
						if n ~= "witchcraft:tree" and n ~="air" then	
							local treepos = self.object:getpos()
							default.grow_new_jungle_tree(treepos)
							self.object:remove()
						elseif n == "default:wood" or n =="default:tree" or n =="default:dirt_with_grass" or n =="default:dirt_with_dry_grass" then
							self.hit_node(self, pos, node)
							self.object:remove()
							return
						end
					end
				end
			end
			hit_node = function(self, pos, node)
				local treepos = self.object:getpos()
				default.grow_new_jungle_tree(treepos)
			end
			
			local apos = self.object:getpos()
			local part = minetest.add_particlespawner(
				6, --amount
				0.3, --time
				{x=apos.x-0.3, y=apos.y-0.3, z=apos.z-0.3}, --minpos
				{x=apos.x+0.3, y=apos.y+0.3, z=apos.z+0.3}, --maxpos
				{x=-0, y=-0, z=-0}, --minvel
				{x=0, y=0, z=0}, --maxvel
				{x=0,y=-0.5,z=0}, --minacc
				{x=0.5,y=0.5,z=0.5}, --maxacc
				0.1, --minexptime
				0.3, --maxexptime
				1, --minsize
				2, --maxsize
				false, --collisiondetection
				"witchcraft_leaf_over.png" --texture
			)
			
		end,
	})

minetest.register_entity(
	"witchcraft:ice",
	{
		visual="sprite",
		visual_size={x=1,y=1},
		physical=false,
		textures={"witchcraft_ice.png"},
		velocity = 1,
		rotate = 90,
		auto_rotate = true,
		damage = 2,
		collisionbox = {0, 0, 0, 0, 0, 0},
		on_step = function(self, obj, pos)		
			local remove = minetest.after(10, function() 
														self.object:remove()
														 end)
			local pos = self.object:getpos()
			local objs = minetest.get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 2)	
			for k, obj in pairs(objs) do
				if obj:get_luaentity() ~= nil then
					if obj:get_luaentity().name ~= "witchcraft:ice"
						and obj:get_luaentity().name ~= "__builtin:item"
						and obj:get_luaentity().name ~= "gauges:hp_bar"
					then
						obj:punch(
							self.object, 1.0,
							{
								full_punch_interval=1.0,
								damage_groups={fleshy=1},
							}, nil)
						self.object:remove()
					end
				end
				for dx=0,1 do
					for dy=0,1 do
						for dz=0,1 do
							local p = {x=pos.x+dx, y=pos.y, z=pos.z+dz}
							local t = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz}
							local n = minetest.get_node(p).name
							if n == "default:water_source" or n =="default:river_water_source" then	
								local pos = self.object:getpos()
								minetest.set_node(pos, {name="default:ice"})
								self.object:remove()
							elseif n ~= "air" then
								local velo = self.object:getvelocity()
								self.object:setvelocity({x=velo.x*-1, y=velo.y*0, z=velo.z*1})
								--self.object:remove()
								return
							end
						end
					end
				end

				local apos = self.object:getpos()
				local part = minetest.add_particlespawner(
					10, --amount
					0.3, --time
					{x=apos.x-0.3, y=apos.y-0.3, z=apos.z-0.3}, --minpos
					{x=apos.x+0.3, y=apos.y+0.3, z=apos.z+0.3}, --maxpos
					{x=-0, y=-0, z=-0}, --minvel
					{x=0, y=0, z=0}, --maxvel
					{x=0,y=-0.5,z=0}, --minacc
					{x=0.5,y=0.5,z=0.5}, --maxacc
					0.1, --minexptime
					0.3, --maxexptime
					0.2, --minsize
					0.5, --maxsize
					false, --collisiondetection
					"witchcraft_light_over.png" --texture
				)
			end
		end
	})