1
0
mirror of https://github.com/minetest/minetest_game.git synced 2024-12-22 23:10:17 +01:00

Fire: Make flames floodable, remove extinguish ABM

This commit is contained in:
Paramat 2018-09-02 02:43:59 +01:00 committed by GitHub
parent 5673a71752
commit ef20f9e12b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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"})