mirror of
https://github.com/minetest/minetest_game.git
synced 2024-12-23 15:20:19 +01:00
Fire / tnt: Make flint-and-steel use node on_ignite functions
Add on_ignite functions to tnt, gunpowder, coalblock.
This commit is contained in:
parent
c7e2d59461
commit
c824d69182
@ -227,6 +227,14 @@ New node def property:
|
|||||||
* Called when fire attempts to remove a burning node.
|
* Called when fire attempts to remove a burning node.
|
||||||
* `pos` Position of the burning node.
|
* `pos` Position of the burning node.
|
||||||
|
|
||||||
|
`on_ignite(pos, igniter)`
|
||||||
|
|
||||||
|
* Called when Flint and steel (or a mod defined ignitor) is used on a node.
|
||||||
|
Defining it may prevent the default action (spawning flames) from triggering.
|
||||||
|
* `pos` Position of the ignited node.
|
||||||
|
* `igniter` Player that used the tool, when available.
|
||||||
|
|
||||||
|
|
||||||
Give Initial Stuff API
|
Give Initial Stuff API
|
||||||
----------------------
|
----------------------
|
||||||
|
|
||||||
|
@ -95,38 +95,20 @@ minetest.register_tool("fire:flint_and_steel", {
|
|||||||
itemstack:add_wear(1000)
|
itemstack:add_wear(1000)
|
||||||
if pt.type == "node" then
|
if pt.type == "node" then
|
||||||
local node_under = minetest.get_node(pt.under).name
|
local node_under = minetest.get_node(pt.under).name
|
||||||
local is_coalblock = node_under == "default:coalblock"
|
local nodedef = minetest.registered_nodes[node_under]
|
||||||
local is_tnt = node_under == "tnt:tnt"
|
if not nodedef then
|
||||||
local is_gunpowder = node_under == "tnt:gunpowder"
|
return
|
||||||
if minetest.get_item_group(node_under, "flammable") >= 1 or
|
|
||||||
is_coalblock or is_tnt or is_gunpowder then
|
|
||||||
local flame_pos = pt.above
|
|
||||||
if is_coalblock then
|
|
||||||
flame_pos = {x = pt.under.x, y = pt.under.y + 1, z = pt.under.z}
|
|
||||||
elseif is_tnt or is_gunpowder then
|
|
||||||
flame_pos = pt.under
|
|
||||||
end
|
end
|
||||||
if minetest.get_node(flame_pos).name == "air" or
|
|
||||||
is_tnt or is_gunpowder then
|
|
||||||
local player_name = user:get_player_name()
|
local player_name = user:get_player_name()
|
||||||
if not minetest.is_protected(flame_pos, player_name) then
|
if minetest.is_protected(pt.under, player_name) then
|
||||||
if is_coalblock then
|
|
||||||
minetest.set_node(flame_pos,
|
|
||||||
{name = "fire:permanent_flame"})
|
|
||||||
elseif is_tnt then
|
|
||||||
minetest.set_node(flame_pos,
|
|
||||||
{name = "tnt:tnt_burning"})
|
|
||||||
elseif is_gunpowder then
|
|
||||||
minetest.set_node(flame_pos,
|
|
||||||
{name = "tnt:gunpowder_burning"})
|
|
||||||
else
|
|
||||||
minetest.set_node(flame_pos,
|
|
||||||
{name = "fire:basic_flame"})
|
|
||||||
end
|
|
||||||
else
|
|
||||||
minetest.chat_send_player(player_name, "This area is protected")
|
minetest.chat_send_player(player_name, "This area is protected")
|
||||||
|
return
|
||||||
end
|
end
|
||||||
end
|
if nodedef.on_ignite then
|
||||||
|
nodedef.on_ignite(pt.under, user)
|
||||||
|
elseif minetest.get_item_group(node_under, "flammable") >= 1
|
||||||
|
and minetest.get_node(pt.above).name == "air" then
|
||||||
|
minetest.set_node(pt.above, {name = "fire:basic_flame"})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if not minetest.setting_getbool("creative_mode") then
|
if not minetest.setting_getbool("creative_mode") then
|
||||||
@ -153,9 +135,14 @@ minetest.override_item("default:coalblock", {
|
|||||||
minetest.remove_node(pos)
|
minetest.remove_node(pos)
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
|
on_ignite = function(pos, igniter)
|
||||||
|
local flame_pos = {x = pos.x, y = pos.y + 1, z = pos.z}
|
||||||
|
if minetest.get_node(flame_pos).name == "air" then
|
||||||
|
minetest.set_node(flame_pos, {name = "fire:permanent_flame"})
|
||||||
|
end
|
||||||
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
-- Get sound area of position
|
-- Get sound area of position
|
||||||
|
|
||||||
fire.D = 6 -- size of sound areas
|
fire.D = 6 -- size of sound areas
|
||||||
|
@ -418,7 +418,10 @@ minetest.register_node("tnt:gunpowder", {
|
|||||||
end,
|
end,
|
||||||
on_burn = function(pos)
|
on_burn = function(pos)
|
||||||
minetest.set_node(pos, {name = "tnt:gunpowder_burning"})
|
minetest.set_node(pos, {name = "tnt:gunpowder_burning"})
|
||||||
end
|
end,
|
||||||
|
on_ignite = function(pos, igniter)
|
||||||
|
minetest.set_node(pos, {name = "tnt:gunpowder_burning"})
|
||||||
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_node("tnt:gunpowder_burning", {
|
minetest.register_node("tnt:gunpowder_burning", {
|
||||||
@ -563,7 +566,10 @@ function tnt.register_tnt(def)
|
|||||||
},
|
},
|
||||||
on_burn = function(pos)
|
on_burn = function(pos)
|
||||||
minetest.set_node(pos, {name = name .. "_burning"})
|
minetest.set_node(pos, {name = name .. "_burning"})
|
||||||
end
|
end,
|
||||||
|
on_ignite = function(pos, igniter)
|
||||||
|
minetest.set_node(pos, {name = name .. "_burning"})
|
||||||
|
end,
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user