From 6f01334c808b63757120d9035ce49fc3854be513 Mon Sep 17 00:00:00 2001
From: Wuzzy <almikes@aol.com>
Date: Fri, 9 Jun 2017 13:39:06 +0200
Subject: [PATCH] Add simple death messages

---
 mods/PLAYER/mcl_death/init.lua | 104 +++++++++++++++++++++++++++++++--
 1 file changed, 100 insertions(+), 4 deletions(-)

diff --git a/mods/PLAYER/mcl_death/init.lua b/mods/PLAYER/mcl_death/init.lua
index 33c5c6dce..edc97a2be 100644
--- a/mods/PLAYER/mcl_death/init.lua
+++ b/mods/PLAYER/mcl_death/init.lua
@@ -1,5 +1,6 @@
-if minetest.setting_getbool("mcl_keep_inventory_on_death") == false then
-	minetest.register_on_dieplayer(function(player)
+minetest.register_on_dieplayer(function(player)
+	local keep = minetest.setting_getbool("mcl_keep_inventory_on_death")
+	if keep == false then
 		local inv = player:get_inventory()
 		local pos = player:getpos()
 		local lists = { "main", "craft", "armor" }
@@ -16,5 +17,100 @@ if minetest.setting_getbool("mcl_keep_inventory_on_death") == false then
 				pos.z = pos.z - z
 			end
 		end
-	end)
-end
+	end
+
+	-- Death message
+	local message = minetest.setting_getbool("mcl_show_death_messages")
+	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)