minetest.register_on_dieplayer(function(player)
	local keep = minetest.setting_getbool("mcl_keepInventory") or false
	if keep == false then
		-- Drop inventory, crafting grid and armor
		local inv = player:get_inventory()
		local pos = player:getpos()
		local name, player_armor_inv, armor_armor_inv, pos = armor:get_valid_player(player, "[on_dieplayer]")
		local lists = {
			{ inv = inv, listname = "main", drop = true },
			{ inv = inv, listname = "craft", drop = true },
			{ inv = player_armor_inv, listname = "armor", drop = true },
			{ inv = armor_armor_inv, listname = "armor", drop = false },
		}
		for l=1,#lists do
			local inv = lists[l].inv
			local listname = lists[l].listname
			local drop = lists[l].drop
			if inv ~= nil then
				for i, stack in ipairs(inv:get_list(listname)) do
					local x = math.random(0, 9)/3
					local z = math.random(0, 9)/3
					pos.x = pos.x + x
					pos.z = pos.z + z
					if drop then
						minetest.add_item(pos, stack)
					end
					stack:clear()
					inv:set_stack(listname, i, stack)
					pos.x = pos.x - x
					pos.z = pos.z - z
				end
			end
		end
		armor:set_player_armor(player)
		armor:update_inventory(player)
	end

	-- Death message
	local message = minetest.setting_getbool("mcl_showDeathMessages")
	if message == nil then message = true end
	if message then
		local name = player:get_player_name()

		-- Death messages
		local msgs = {
			["arrow"] = {
				"%s was fatally hit by an arrow.",
				"%s has been killed with an arrow.",
			},
			["cactus"] = {
				"%s was killed by a cactus.",
				"%s was pricked to death.",
			},
			["fire"] = {
				"%s has been cooked crisp.",
				"%s felt the burn.",
				"%s died in the flames.",
				"%s died in a fire.",
			},
			["explosion"] = {
				"%s was caught in an explosion.",
			},
			["lava"] = {
				"%s melted in lava.",
				"%s took a bath in a hot lava tub.",
				"%s died in lava.",
				"%s could not survive in lava.",
			},
			["drown"] = {
				"%s forgot to breathe.",
				"%s drowned.",
				"%s ran out of oxygen.",
			},
			["void"] = {
				"%s fell into the endless void.",
			},
			["suffocation"] = {
				"%s suffocated to death.",
			},
			["starve"] = {
				"%s starved.",
			},
			["murder"] = {
				"%s was killed by %s.",
			},
			["falling_anvil"] = {
				"%s was smashed by a falling anvil!",
			},
			["falling_block"] = {
				"%s was smashed by a falling block.",
				"%s was buried under a falling block.",
			},
			["fall_damage"] = {
				"%s fell from a high cliff.",
				"%s took fatal fall damage.",
				"%s fell victim to gravity.",
			},
			["other"] = {
				"%s died.",
			}
		}

		-- Select death message
		local dmsg = function(mtype, ...)
			local r = math.random(1, #msgs[mtype])
			return string.format(msgs[mtype][r], ...)
		end

		local node = minetest.registered_nodes[minetest.get_node(player:getpos()).name]
		local msg
		-- Lava
		if minetest.get_item_group(node.name, "lava") ~= 0 then
			msg = dmsg("lava", name)
		-- Drowning
		elseif player:get_breath() == 0 then
			msg = dmsg("drown", name)
		-- Fire
		elseif minetest.get_item_group(node.name, "fire") ~= 0 then
			msg = dmsg("fire", name)
		-- Void
		elseif node.name == "mcl_core:void" then
			msg = dmsg("void", name)
		-- Cactus
		elseif node.name == "mcl_core:cactus" then
			msg = dmsg("cactus", name)
		-- Other
		else
			msg = dmsg("other", name)
		end
		minetest.chat_send_all(msg)
	end
end)