fire = {} fire.mod = "redo" -- initial check to see if fire is disabled local disable_fire = minetest.setting_getbool("disable_fire") minetest.register_node("fire:basic_flame", { description = "Fire", drawtype = "plantlike", tiles = {{ name = "fire_basic_flame_animated.png", animation = { type="vertical_frames", aspect_w = 16, aspect_h = 16, length = 1 }, }}, inventory_image = "fire_basic_flame.png", paramtype = "light", light_source = 14, groups = {igniter = 2, dig_immediate = 3}, drop = '', walkable = false, buildable_to = true, sunlight_propagates = true, damage_per_second = 4, on_blast = function() end, }) -- extinguish flames quickly with dedicated ABM minetest.register_abm({ nodenames = {"fire:basic_flame"}, interval = 3, chance = 2, action = function(p0, node, _, _) if not disable_fire then return end minetest.set_node(p0, {name = "air"}) end, }) -- extinguish flames quickly with water, snow, ice minetest.register_abm({ nodenames = {"fire:basic_flame"}, neighbors = {"group:puts_out_fire"}, interval = 3, chance = 2, action = function(p0, node, _, _) minetest.set_node(p0, {name = "air"}) minetest.sound_play("fire_extinguish_flame", {pos = p0, max_hear_distance = 16, gain = 0.15}) end, }) -- ignite neighboring nodes minetest.register_abm({ nodenames = {"group:flammable"}, neighbors = {"group:igniter"}, interval = 7, chance = 32, action = function(p0, node, _, _) -- check to see if fire is still disabled disable_fire = minetest.setting_getbool("disable_fire") --print ("disable fire set to ", disable_fire) -- if there is water or stuff like that around flame, don't ignite if disable_fire or minetest.find_node_near(p0, 1, {"group:puts_out_fire"}) then return end local p = minetest.find_node_near(p0, 1, {"air"}) if p then minetest.set_node(p, {name = "fire:basic_flame"}) end end, }) -- remove flammable nodes and flame minetest.register_abm({ nodenames = {"fire:basic_flame"}, interval = 5, chance = 16, action = function(p0, node, _, _) -- If there are no flammable nodes around flame, remove flame if not minetest.find_node_near(p0, 1, {"group:flammable"}) then minetest.set_node(p0, {name = "air"}) return end if math.random(1, 4) == 1 then -- remove a flammable node around flame local p = minetest.find_node_near(p0, 1, {"group:flammable"}) if p then minetest.set_node(p, {name = "air"}) -- nodeupdate(p) end end end, })