diff --git a/minetest.conf.example b/minetest.conf.example index 0e3c2c55..11b4835f 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -9,7 +9,8 @@ # 0 to disable #share_bones_time = 1200 -# Whether fire should be disabled (all fire nodes will instantly disappear) +# Whether standard fire should be disabled ('basic flame' nodes will disappear) +# 'permanent flame' nodes will remain with either setting #disable_fire = false # Whether steel tools, torches and cobblestone should be given to new players diff --git a/mods/fire/init.lua b/mods/fire/init.lua index f3f6369a..7c65c5bb 100644 --- a/mods/fire/init.lua +++ b/mods/fire/init.lua @@ -5,25 +5,31 @@ fire = {} --- Register flame node +-- Register flame nodes minetest.register_node("fire:basic_flame", { - description = "Fire", + description = "Basic Flame", drawtype = "firelike", - tiles = {{ - name = "fire_basic_flame_animated.png", - animation = {type = "vertical_frames", - aspect_w = 16, aspect_h = 16, length = 1}, - }}, + 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, + groups = {igniter = 2, dig_immediate = 3}, + drop = "", on_construct = function(pos) minetest.after(0, fire.on_flame_add_at, pos) @@ -33,7 +39,36 @@ minetest.register_node("fire:basic_flame", { minetest.after(0, fire.on_flame_remove_at, pos) end, - on_blast = function() end, -- unaffected by explosions + on_blast = function() + end, -- unaffected by explosions +}) + +minetest.register_node("fire:permanent_flame", { + description = "Permanent Flame", + drawtype = "firelike", + 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, + walkable = false, + buildable_to = true, + sunlight_propagates = true, + damage_per_second = 4, + groups = {igniter = 2, dig_immediate = 3}, + drop = "", + + on_blast = function() + end, }) @@ -129,15 +164,30 @@ function fire.flame_should_extinguish(pos) end --- Enable ABMs according to 'disable fire' setting +-- Extinguish all flames quickly with water, snow, ice + +minetest.register_abm({ + nodenames = {"fire:basic_flame", "fire:permanent_flame"}, + neighbors = {"group:puts_out_fire"}, + interval = 3, + chance = 2, + action = function(p0, node, _, _) + minetest.remove_node(p0) + minetest.sound_play("fire_extinguish_flame", + {pos = p0, max_hear_distance = 16, gain = 0.25}) + end, +}) + + +-- Enable the following ABMs according to 'disable fire' setting if minetest.setting_getbool("disable_fire") then - -- Extinguish flames quickly with dedicated ABM + -- Remove basic flames only minetest.register_abm({ nodenames = {"fire:basic_flame"}, - interval = 3, + interval = 7, chance = 2, action = function(p0, node, _, _) minetest.remove_node(p0) @@ -146,21 +196,7 @@ if minetest.setting_getbool("disable_fire") then else - -- 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.remove_node(p0) - minetest.sound_play("fire_extinguish_flame", - {pos = p0, max_hear_distance = 16, gain = 0.25}) - end, - }) - - -- Ignite neighboring nodes + -- Ignite neighboring nodes, add basic flames minetest.register_abm({ nodenames = {"group:flammable"}, @@ -179,7 +215,7 @@ else end, }) - -- Remove flames and flammable nodes + -- Remove basic flames and flammable nodes minetest.register_abm({ nodenames = {"fire:basic_flame"},