From f14b41115705647a33dbb874c5b0fcab73cd5376 Mon Sep 17 00:00:00 2001
From: Auke Kok <sofar@foo-projects.org>
Date: Tue, 26 Apr 2016 23:08:00 -0700
Subject: [PATCH] TNT: Fix multiple explosions erasing drops

Any second explosion near a first TNT explosion will punch all
entities found nearby, including item drops. This causes the
item pickup code to think the item was picked up, but by
a `nil` player, thus removing the item.

We query for the immortal entity group, and if the item is in
the immortal group, do not punch the item.
---
 mods/tnt/init.lua | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/mods/tnt/init.lua b/mods/tnt/init.lua
index 4330c4fc..d61cbf13 100644
--- a/mods/tnt/init.lua
+++ b/mods/tnt/init.lua
@@ -160,10 +160,12 @@ local function entity_physics(pos, radius)
 			local obj_vel = obj:getvelocity()
 			obj:setvelocity(calc_velocity(pos, obj_pos,
 					obj_vel, radius * 10))
-			obj:punch(obj, 1.0, {
-				full_punch_interval = 1.0,
-				damage_groups = {fleshy = damage},
-			}, nil)
+			if not obj:get_armor_groups().immortal then
+				obj:punch(obj, 1.0, {
+					full_punch_interval = 1.0,
+					damage_groups = {fleshy = damage},
+				}, nil)
+			end
 		end
 	end
 end
-- 
GitLab