From 6f6d46ddfcc23b16f33a2f656089004f086f1f50 Mon Sep 17 00:00:00 2001
From: paramat <mat.gregory@virginmedia.com>
Date: Tue, 22 Sep 2015 21:37:05 +0100
Subject: [PATCH] Fire: Add 'permanent flame' node

Update 'disable fire' documentation in conf.example
---
 minetest.conf.example |  3 +-
 mods/fire/init.lua    | 94 ++++++++++++++++++++++++++++++-------------
 2 files changed, 67 insertions(+), 30 deletions(-)

diff --git a/minetest.conf.example b/minetest.conf.example
index 0e3c2c5..11b4835 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 f3f6369..7c65c5b 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"},