@@ -80,26 +80,51 @@ minetest.register_node("fire:permanent_flame", {
80
80
end ,
81
81
})
82
82
83
+
84
+ -- Flint and steel
85
+
83
86
minetest .register_tool (" fire:flint_and_steel" , {
84
87
description = " Flint and Steel" ,
85
88
inventory_image = " fire_flint_steel.png" ,
86
89
on_use = function (itemstack , user , pointed_thing )
87
- local player_name = user : get_player_name ( )
90
+ itemstack : add_wear ( 1000 )
88
91
local pt = pointed_thing
89
-
90
- if pt .type == " node" and minetest .get_node (pt .above ).name == " air" then
91
- itemstack :add_wear (1000 )
92
+ if pt .type == " node" then
92
93
local node_under = minetest .get_node (pt .under ).name
93
-
94
- if minetest .get_item_group (node_under , " flammable" ) >= 1 then
95
- if not minetest .is_protected (pt .above , player_name ) then
96
- minetest .set_node (pt .above , {name = " fire:basic_flame" })
97
- else
98
- minetest .chat_send_player (player_name , " This area is protected" )
94
+ local is_coalblock = node_under == " default:coalblock"
95
+ local is_tnt = node_under == " tnt:tnt"
96
+ local is_gunpowder = node_under == " tnt:gunpowder"
97
+ if minetest .get_item_group (node_under , " flammable" ) >= 1 or
98
+ is_coalblock or is_tnt or is_gunpowder then
99
+ local flame_pos = pt .above
100
+ if is_coalblock then
101
+ flame_pos = {x = pt .under .x , y = pt .under .y + 1 , z = pt .under .z }
102
+ elseif is_tnt or is_gunpowder then
103
+ flame_pos = pt .under
104
+ end
105
+ if minetest .get_node (flame_pos ).name == " air" or
106
+ is_tnt or is_gunpowder then
107
+ local player_name = user :get_player_name ()
108
+ if not minetest .is_protected (flame_pos , player_name ) then
109
+ if is_coalblock then
110
+ minetest .set_node (flame_pos ,
111
+ {name = " fire:permanent_flame" })
112
+ elseif is_tnt then
113
+ minetest .set_node (flame_pos ,
114
+ {name = " tnt:tnt_burning" })
115
+ elseif is_gunpowder then
116
+ minetest .set_node (flame_pos ,
117
+ {name = " tnt:gunpowder_burning" })
118
+ else
119
+ minetest .set_node (flame_pos ,
120
+ {name = " fire:basic_flame" })
121
+ end
122
+ else
123
+ minetest .chat_send_player (player_name , " This area is protected" )
124
+ end
99
125
end
100
126
end
101
127
end
102
-
103
128
if not minetest .setting_getbool (" creative_mode" ) then
104
129
return itemstack
105
130
end
@@ -113,6 +138,20 @@ minetest.register_craft({
113
138
}
114
139
})
115
140
141
+
142
+ -- Override coalblock to enable permanent flame above
143
+ -- Coalblock is non-flammable to avoid unwanted basic_flame nodes
144
+
145
+ minetest .override_item (" default:coalblock" , {
146
+ after_destruct = function (pos , oldnode )
147
+ pos .y = pos .y + 1
148
+ if minetest .get_node (pos ).name == " fire:permanent_flame" then
149
+ minetest .remove_node (pos )
150
+ end
151
+ end ,
152
+ })
153
+
154
+
116
155
-- Get sound area of position
117
156
118
157
fire .D = 6 -- size of sound areas
0 commit comments