mirror of
				https://github.com/luanti-org/minetest_game.git
				synced 2025-11-04 01:05:49 +01:00 
			
		
		
		
	Fire: Make flames floodable, remove extinguish ABM
This commit is contained in:
		@@ -7,6 +7,20 @@ fire = {}
 | 
			
		||||
-- Items
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
-- Flood flame function
 | 
			
		||||
 | 
			
		||||
local function flood_flame(pos, oldnode, newnode)
 | 
			
		||||
	-- Play flame extinguish sound if liquid is not an 'igniter'
 | 
			
		||||
	local nodedef = minetest.registered_items[newnode.name]
 | 
			
		||||
	if not (nodedef and nodedef.groups and
 | 
			
		||||
			nodedef.groups.igniter and nodedef.groups.igniter > 0) then
 | 
			
		||||
		minetest.sound_play("fire_extinguish_flame",
 | 
			
		||||
			{pos = pos, max_hear_distance = 16, gain = 0.15})
 | 
			
		||||
	end
 | 
			
		||||
	-- Remove the flame
 | 
			
		||||
	return false
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-- Flame nodes
 | 
			
		||||
 | 
			
		||||
minetest.register_node("fire:basic_flame", {
 | 
			
		||||
@@ -28,8 +42,11 @@ minetest.register_node("fire:basic_flame", {
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	buildable_to = true,
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
	floodable = true,
 | 
			
		||||
	damage_per_second = 4,
 | 
			
		||||
	groups = {igniter = 2, dig_immediate = 3, not_in_creative_inventory = 1},
 | 
			
		||||
	drop = "",
 | 
			
		||||
 | 
			
		||||
	on_timer = function(pos)
 | 
			
		||||
		local f = minetest.find_node_near(pos, 1, {"group:flammable"})
 | 
			
		||||
		if not f then
 | 
			
		||||
@@ -39,11 +56,12 @@ minetest.register_node("fire:basic_flame", {
 | 
			
		||||
		-- Restart timer
 | 
			
		||||
		return true
 | 
			
		||||
	end,
 | 
			
		||||
	drop = "",
 | 
			
		||||
 | 
			
		||||
	on_construct = function(pos)
 | 
			
		||||
		minetest.get_node_timer(pos):start(math.random(30, 60))
 | 
			
		||||
	end,
 | 
			
		||||
 | 
			
		||||
	on_flood = flood_flame,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_node("fire:permanent_flame", {
 | 
			
		||||
@@ -66,9 +84,12 @@ minetest.register_node("fire:permanent_flame", {
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	buildable_to = true,
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
	floodable = true,
 | 
			
		||||
	damage_per_second = 4,
 | 
			
		||||
	groups = {igniter = 2, dig_immediate = 3},
 | 
			
		||||
	drop = "",
 | 
			
		||||
 | 
			
		||||
	on_flood = flood_flame,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -271,23 +292,6 @@ end
 | 
			
		||||
-- ABMs
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
-- Extinguish all flames quickly with water, snow, ice
 | 
			
		||||
 | 
			
		||||
minetest.register_abm({
 | 
			
		||||
	label = "Extinguish flame",
 | 
			
		||||
	nodenames = {"fire:basic_flame", "fire:permanent_flame"},
 | 
			
		||||
	neighbors = {"group:puts_out_fire"},
 | 
			
		||||
	interval = 3,
 | 
			
		||||
	chance = 1,
 | 
			
		||||
	catch_up = false,
 | 
			
		||||
	action = function(pos, node, active_object_count, active_object_count_wider)
 | 
			
		||||
		minetest.remove_node(pos)
 | 
			
		||||
		minetest.sound_play("fire_extinguish_flame",
 | 
			
		||||
			{pos = pos, max_hear_distance = 16, gain = 0.15})
 | 
			
		||||
	end,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- Enable the following ABMs according to 'enable fire' setting
 | 
			
		||||
 | 
			
		||||
local fire_enabled = minetest.settings:get_bool("enable_fire")
 | 
			
		||||
@@ -327,10 +331,6 @@ else -- Fire enabled
 | 
			
		||||
		chance = 12,
 | 
			
		||||
		catch_up = false,
 | 
			
		||||
		action = function(pos, node, active_object_count, active_object_count_wider)
 | 
			
		||||
			-- If there is water or stuff like that around node, don't ignite
 | 
			
		||||
			if minetest.find_node_near(pos, 1, {"group:puts_out_fire"}) then
 | 
			
		||||
				return
 | 
			
		||||
			end
 | 
			
		||||
			local p = minetest.find_node_near(pos, 1, {"air"})
 | 
			
		||||
			if p then
 | 
			
		||||
				minetest.set_node(p, {name = "fire:basic_flame"})
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user