-- Hurt players hit by an anvil

local falling_node = minetest.registered_entities["__builtin:falling_node"]
local on_step_old = falling_node.on_step
local on_step_add = function(self, dtime)
	if minetest.get_item_group(self.node.name, "anvil") == 0 then
		return
	end
	local kill
	local pos = self.object:getpos()
	if not self._startpos then
		self._startpos = pos
	end
	local objs = minetest.get_objects_inside_radius(pos, 1)
	for _,v in ipairs(objs) do
		local hp = v:get_hp()
		if v:is_player() and hp ~= 0 then
			if not self.hit_players then
				self.hit_players = {}
			end
			local name = v:get_player_name()
			local hit = false
			for _,v in ipairs(self.hit_players) do
				if name == v then
					hit = true
				end
			end
			if not hit then
				table.insert(self.hit_players, name)
				local way = self._startpos.y - pos.y
				local damage = (way - 1) * 2
				damage = math.min(40, math.max(0, damage))
				if damage >= 1 then
					hp = hp - damage
					if hp < 0 then
						hp = 0
					end
					v:set_hp(hp)
					if hp == 0 then
						kill = true
					end
				end
			end
		end
	end
	if kill then
		local pos = self.object:getpos()
		local pos = {x = pos.x, y = pos.y + 0.3, z = pos.z}
		if minetest.registered_nodes[self.node.name] then
			minetest.add_node(pos, self.node)
		end
		self.object:remove()
		core.check_for_falling(pos)
	end
end
local on_step_table = {on_step_old, on_step_add}
local on_step_new = table.copy(on_step_table)
falling_node.on_step = function(self, dtime)
	for _,v in ipairs(on_step_new) do
		v(self, dtime)
	end
end