diff --git a/mods/ENVIRONMENT/lightning/init.lua b/mods/ENVIRONMENT/lightning/init.lua
index 32ff721b2..e6973e1c6 100644
--- a/mods/ENVIRONMENT/lightning/init.lua
+++ b/mods/ENVIRONMENT/lightning/init.lua
@@ -107,29 +107,7 @@ local function choose_pos(pos)
 	return pos, pos2
 end
 
--- * pos: optional, if not given a random pos will be chosen
--- * returns: bool - success if a strike happened
-function lightning.strike(pos)
-	if lightning.auto then
-		after(rng:next(lightning.interval_low, lightning.interval_high), lightning.strike)
-	end
-
-	local pos2
-	pos, pos2 = choose_pos(pos)
-
-	if not pos then
-		return false
-	end
-	if lightning.on_strike_functions then
-		for _, func in pairs(lightning.on_strike_functions) do
-			-- allow on_strike callbacks to destroy entities by re-obtaining objects for each callback
-			local objects = get_objects_inside_radius(pos2, 3.5)
-			func(pos, pos2, objects)
-		end
-	end
-end
-
-lightning.register_on_strike(function(pos, pos2, objects)
+function lightning.strike_func(pos, pos2, objects)
 	local particle_pos = vector.offset(pos2, 0, (lightning.size / 2) + 0.5, 0)
 	local particle_size = lightning.size * 10
 	local time = 0.2
@@ -230,7 +208,38 @@ lightning.register_on_strike(function(pos, pos2, objects)
 			end
 		end
 	end
-end)
+end
+
+-- * pos: optional, if not given a random pos will be chosen
+-- * returns: bool - success if a strike happened
+function lightning.strike(pos)
+	if lightning.auto then
+		after(rng:next(lightning.interval_low, lightning.interval_high), lightning.strike)
+	end
+
+	local pos2
+	pos, pos2 = choose_pos(pos)
+
+	if not pos then
+		return false
+	end
+	local do_strike = true
+	if lightning.on_strike_functions then
+		for _, func in pairs(lightning.on_strike_functions) do
+			-- allow on_strike callbacks to destroy entities by re-obtaining objects for each callback
+			local objects = get_objects_inside_radius(pos2, 3.5)
+			local p,stop = func(pos, pos2, objects)
+			if p then
+				pos = p
+				pos2 = choose_pos(p)
+			end
+			do_strike = do_strike and not stop
+		end
+	end
+	if do_strike then
+		lightning.strike_func(pos,pos2,get_objects_inside_radius(pos2, 3.5))
+	end
+end
 
 -- if other mods disable auto lightning during initialization, don't trigger the first lightning.
 after(5, function(dtime)
diff --git a/mods/ITEMS/mcl_lightning_rods/init.lua b/mods/ITEMS/mcl_lightning_rods/init.lua
new file mode 100644
index 000000000..41d9adfbd
--- /dev/null
+++ b/mods/ITEMS/mcl_lightning_rods/init.lua
@@ -0,0 +1,82 @@
+local S = minetest.get_translator("mobs_mc")
+
+local cbox = {
+	type = "fixed",
+	fixed = {
+		{ 0/16, -8/16, 0/16,  2/16, 4/16,  2/16 },
+		{ 0/16, 4/16, 0/16,  3/16,  8/16,  3/16 },
+	}
+}
+
+minetest.register_node("mcl_lightning_rods:rod", {
+	description = S("Lightning Rod"),
+	_doc_items_longdesc = S("A block that attracts lightning"),
+	--inventory_image = "mcl_lightning_rods_rod_inv.png",
+	tiles = {
+		"mcl_lightning_rods_rod.png",
+		"mcl_lightning_rods_rod.png",
+		"mcl_lightning_rods_rod.png",
+		"mcl_lightning_rods_rod.png",
+		"mcl_lightning_rods_rod.png",
+		"mcl_lightning_rods_rod.png",
+	},
+	drawtype = "nodebox",
+	is_ground_content = false,
+	paramtype = "light",
+	paramtype2 = "facedir",
+	groups = {pickaxey=2,attracts_lightning=1},
+	sounds = mcl_sounds.node_sound_metal_defaults(),
+	node_box = cbox,
+	selection_box = cbox,
+	collision_box = cbox,
+	on_place = function(itemstack, placer, pointed_thing)
+		if pointed_thing.type ~= "node" then
+			return itemstack
+		end
+
+		local p0 = pointed_thing.under
+		local p1 = pointed_thing.above
+		local param2 = 0
+
+		local placer_pos = placer:get_pos()
+		if placer_pos then
+			local dir = {
+				x = p1.x - placer_pos.x,
+				y = p1.y - placer_pos.y,
+				z = p1.z - placer_pos.z
+			}
+			param2 = minetest.dir_to_facedir(dir)
+		end
+
+		if p0.y - 1 == p1.y then
+			param2 = 20
+		elseif p0.x - 1 == p1.x then
+			param2 = 16
+		elseif p0.x + 1 == p1.x then
+			param2 = 12
+		elseif p0.z - 1 == p1.z then
+			param2 = 8
+		elseif p0.z + 1 == p1.z then
+			param2 = 4
+		end
+
+		return minetest.item_place(itemstack, placer, pointed_thing, param2)
+	end,
+
+	sounds = mcl_sounds.node_sound_glass_defaults(),
+	_mcl_blast_resistance = 0,
+})
+
+lightning.register_on_strike(function(pos,pos2,objects)
+	local lr = minetest.find_node_near(pos,128,{"group:attracts_lightning"},true)
+	return lr,nil
+end)
+
+minetest.register_craft({
+	output = "mcl_lightning_rods:rod",
+	recipe = {
+		{"", "mcl_copper:copper_ingot",""},
+		{"", "mcl_copper:copper_ingot",""},
+		{"", "mcl_copper:copper_ingot",""},
+	}
+})
diff --git a/mods/ITEMS/mcl_lightning_rods/mod.conf b/mods/ITEMS/mcl_lightning_rods/mod.conf
new file mode 100644
index 000000000..cafd9ba5e
--- /dev/null
+++ b/mods/ITEMS/mcl_lightning_rods/mod.conf
@@ -0,0 +1,3 @@
+name = mcl_lightning_rods
+author = cora
+depends = mcl_sounds, lightning
diff --git a/mods/ITEMS/mcl_lightning_rods/textures/mcl_lightning_rods_rod.png b/mods/ITEMS/mcl_lightning_rods/textures/mcl_lightning_rods_rod.png
new file mode 100644
index 000000000..71a081702
Binary files /dev/null and b/mods/ITEMS/mcl_lightning_rods/textures/mcl_lightning_rods_rod.png differ