Call nodeupdate on the entire blast zone
authorAuke Kok <sofar@foo-projects.org>
Thu, 31 Mar 2016 23:07:15 +0000 (16:07 -0700)
committerparamat <mat.gregory@virginmedia.com>
Sat, 16 Apr 2016 18:27:16 +0000 (19:27 +0100)
This will make sand and gravel blocks on top of TNT actually fly
in the air.

  https://youtu.be/4omndVZijLc

mods/tnt/init.lua

index f465620142a6c70903e12617d19079f42765d8cb..a8deeb0c78228ea54564a7f7e15f97dde476107b 100644 (file)
@@ -247,6 +247,19 @@ local function tnt_explode(pos, radius, ignore_protection, ignore_on_blast)
        vm:update_map()
        vm:update_liquids()
 
+       -- call nodeupdate for everything within 1.5x blast radius
+       for z = -radius * 1.5, radius * 1.5 do
+       for x = -radius * 1.5, radius * 1.5 do
+       for y = -radius * 1.5, radius * 1.5 do
+               local s = vector.add(pos, {x = x, y = y, z = z})
+               local r = vector.distance(pos, s)
+               if r / radius < 1.4 then
+                       nodeupdate(s)
+               end
+       end
+       end
+       end
+
        for _, data in ipairs(on_blast_queue) do
                local dist = math.max(1, vector.distance(data.pos, pos))
                local intensity = (radius * radius) / (dist * dist)