Browse Source

TNT: Gunpowder (and tnt.burn) will trigger the on_ignite of nodes

The previous behaviour is kept as fallback for compatibility, for when the on_ignite
is not defined in the node.
Fernando Carmona Varo 7 years ago
parent
commit
be9121214c
2 changed files with 10 additions and 6 deletions
  1. 4 2
      game_api.txt
  2. 6 4
      mods/tnt/init.lua

+ 4 - 2
game_api.txt

@@ -312,8 +312,10 @@ TNT API
 
 `tnt.burn(position, [nodename])`
 
-^ Ignite TNT at position, nodename isn't required unless already known.
-
+^ Ignite node at position, triggering its `on_ignite` callback (see fire mod).
+If no such callback exists, fallback to turn tnt group nodes to their
+"_burning" variant.
+  nodename isn't required unless already known.
 
 To make dropping items from node inventories easier, you can use the
 following helper function from 'default':

+ 6 - 4
mods/tnt/init.lua

@@ -260,13 +260,15 @@ end
 
 function tnt.burn(pos, nodename)
 	local name = nodename or minetest.get_node(pos).name
-	local group = minetest.get_item_group(name, "tnt")
-	if group > 0 then
+	local def = minetest.registered_nodes[name]
+	if not def then
+		return
+	elseif def.on_ignite then
+		def.on_ignite(pos)
+	elseif minetest.get_item_group(name, "tnt") > 0 then
 		minetest.sound_play("tnt_ignite", {pos = pos})
 		minetest.set_node(pos, {name = name .. "_burning"})
 		minetest.get_node_timer(pos):start(1)
-	elseif name == "tnt:gunpowder" then
-		minetest.set_node(pos, {name = "tnt:gunpowder_burning"})
 	end
 end