mirror of
				https://github.com/luanti-org/minetest_game.git
				synced 2025-11-04 09:15:29 +01:00 
			
		
		
		
	Fire / tnt: Make flint-and-steel use node on_ignite functions
Add on_ignite functions to tnt, gunpowder, coalblock.
This commit is contained in:
		
				
					committed by
					
						
						paramat
					
				
			
			
				
	
			
			
			
						parent
						
							c7e2d59461
						
					
				
				
					commit
					c824d69182
				
			@@ -227,6 +227,14 @@ New node def property:
 | 
			
		||||
 * Called when fire attempts to remove a burning node.
 | 
			
		||||
 * `pos` Position of the burning node.
 | 
			
		||||
 | 
			
		||||
 `on_ignite(pos, igniter)`
 | 
			
		||||
 | 
			
		||||
  * Called when Flint and steel (or a mod defined ignitor) is used on a node.
 | 
			
		||||
    Defining it may prevent the default action (spawning flames) from triggering.
 | 
			
		||||
  * `pos` Position of the ignited node.
 | 
			
		||||
  * `igniter` Player that used the tool, when available.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Give Initial Stuff API
 | 
			
		||||
----------------------
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -95,38 +95,20 @@ minetest.register_tool("fire:flint_and_steel", {
 | 
			
		||||
		itemstack:add_wear(1000)
 | 
			
		||||
		if pt.type == "node" then
 | 
			
		||||
			local node_under = minetest.get_node(pt.under).name
 | 
			
		||||
			local is_coalblock = node_under == "default:coalblock"
 | 
			
		||||
			local is_tnt = node_under == "tnt:tnt"
 | 
			
		||||
			local is_gunpowder = node_under == "tnt:gunpowder"
 | 
			
		||||
			if minetest.get_item_group(node_under, "flammable") >= 1 or
 | 
			
		||||
					is_coalblock or is_tnt or is_gunpowder then
 | 
			
		||||
				local flame_pos = pt.above
 | 
			
		||||
				if is_coalblock then
 | 
			
		||||
					flame_pos = {x = pt.under.x, y = pt.under.y + 1, z = pt.under.z}
 | 
			
		||||
				elseif is_tnt or is_gunpowder then
 | 
			
		||||
					flame_pos = pt.under
 | 
			
		||||
				end
 | 
			
		||||
				if minetest.get_node(flame_pos).name == "air" or
 | 
			
		||||
						is_tnt or is_gunpowder then
 | 
			
		||||
					local player_name = user:get_player_name()
 | 
			
		||||
					if not minetest.is_protected(flame_pos, player_name) then
 | 
			
		||||
						if is_coalblock then
 | 
			
		||||
							minetest.set_node(flame_pos,
 | 
			
		||||
								{name = "fire:permanent_flame"})
 | 
			
		||||
						elseif is_tnt then
 | 
			
		||||
							minetest.set_node(flame_pos,
 | 
			
		||||
								{name = "tnt:tnt_burning"})
 | 
			
		||||
						elseif is_gunpowder then
 | 
			
		||||
							minetest.set_node(flame_pos,
 | 
			
		||||
								{name = "tnt:gunpowder_burning"})
 | 
			
		||||
						else
 | 
			
		||||
							minetest.set_node(flame_pos,
 | 
			
		||||
								{name = "fire:basic_flame"})
 | 
			
		||||
						end
 | 
			
		||||
					else
 | 
			
		||||
						minetest.chat_send_player(player_name, "This area is protected")
 | 
			
		||||
					end
 | 
			
		||||
				end
 | 
			
		||||
			local nodedef = minetest.registered_nodes[node_under]
 | 
			
		||||
			if not nodedef then
 | 
			
		||||
				return
 | 
			
		||||
			end
 | 
			
		||||
			local player_name = user:get_player_name()
 | 
			
		||||
			if minetest.is_protected(pt.under, player_name) then
 | 
			
		||||
				minetest.chat_send_player(player_name, "This area is protected")
 | 
			
		||||
				return
 | 
			
		||||
			end
 | 
			
		||||
			if nodedef.on_ignite then
 | 
			
		||||
				nodedef.on_ignite(pt.under, user)
 | 
			
		||||
			elseif minetest.get_item_group(node_under, "flammable") >= 1
 | 
			
		||||
					and minetest.get_node(pt.above).name == "air" then
 | 
			
		||||
				minetest.set_node(pt.above, {name = "fire:basic_flame"})
 | 
			
		||||
			end
 | 
			
		||||
		end
 | 
			
		||||
		if not minetest.setting_getbool("creative_mode") then
 | 
			
		||||
@@ -153,9 +135,14 @@ minetest.override_item("default:coalblock", {
 | 
			
		||||
			minetest.remove_node(pos)
 | 
			
		||||
		end
 | 
			
		||||
	end,
 | 
			
		||||
	on_ignite = function(pos, igniter)
 | 
			
		||||
		local flame_pos = {x = pos.x, y = pos.y + 1, z = pos.z}
 | 
			
		||||
		if minetest.get_node(flame_pos).name == "air" then
 | 
			
		||||
			minetest.set_node(flame_pos, {name = "fire:permanent_flame"})
 | 
			
		||||
		end
 | 
			
		||||
	end,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- Get sound area of position
 | 
			
		||||
 | 
			
		||||
fire.D = 6 -- size of sound areas
 | 
			
		||||
 
 | 
			
		||||
@@ -418,7 +418,10 @@ minetest.register_node("tnt:gunpowder", {
 | 
			
		||||
	end,
 | 
			
		||||
	on_burn = function(pos)
 | 
			
		||||
		minetest.set_node(pos, {name = "tnt:gunpowder_burning"})
 | 
			
		||||
	end
 | 
			
		||||
	end,
 | 
			
		||||
	on_ignite = function(pos, igniter)
 | 
			
		||||
		minetest.set_node(pos, {name = "tnt:gunpowder_burning"})
 | 
			
		||||
	end,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_node("tnt:gunpowder_burning", {
 | 
			
		||||
@@ -563,7 +566,10 @@ function tnt.register_tnt(def)
 | 
			
		||||
			},
 | 
			
		||||
			on_burn = function(pos)
 | 
			
		||||
				minetest.set_node(pos, {name = name .. "_burning"})
 | 
			
		||||
			end
 | 
			
		||||
			end,
 | 
			
		||||
			on_ignite = function(pos, igniter)
 | 
			
		||||
				minetest.set_node(pos, {name = name .. "_burning"})
 | 
			
		||||
			end,
 | 
			
		||||
		})
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user