)
end
end,
+ on_blast = function() end,
})
end
end
+ local function check_and_blast(pos, name)
+ local node = minetest.get_node(pos)
+ if node.name == name then
+ minetest.remove_node(pos)
+ end
+ end
+
+ local function make_on_blast(base_name, door_type, other_door_type)
+ if def.only_placer_can_open then
+ return function() end
+ else
+ if door_type == "_b_1" or door_type == "_b_2" then
+ return function(pos, intensity)
+ check_and_blast(pos, name..door_type)
+ pos.y = pos.y + 1
+ check_and_blast(pos, name..other_door_type)
+ end
+ elseif door_type == "_t_1" or door_type == "_t_2" then
+ return function(pos, intensity)
+ check_and_blast(pos, name..door_type)
+ pos.y = pos.y - 1
+ check_and_blast(pos, name..other_door_type)
+ end
+ end
+ end
+ end
+
local function on_rightclick(pos, dir, check_name, replace, replace_dir, params)
pos.y = pos.y+dir
if not minetest.get_node(pos).name == check_name then
can_dig = check_player_priv,
sounds = def.sounds,
- sunlight_propagates = def.sunlight
+ sunlight_propagates = def.sunlight,
+ on_blast = make_on_blast(name, "_b_1", "_t_1")
})
minetest.register_node(name.."_t_1", {
can_dig = check_player_priv,
sounds = def.sounds,
- sunlight_propagates = def.sunlight,
+ sunlight_propagates = def.sunlight,
+ on_blast = make_on_blast(name, "_t_1", "_b_1")
})
minetest.register_node(name.."_b_2", {
can_dig = check_player_priv,
sounds = def.sounds,
- sunlight_propagates = def.sunlight
+ sunlight_propagates = def.sunlight,
+ on_blast = make_on_blast(name, "_b_2", "_t_2")
})
minetest.register_node(name.."_t_2", {
can_dig = check_player_priv,
sounds = def.sounds,
- sunlight_propagates = def.sunlight
+ sunlight_propagates = def.sunlight,
+ on_blast = make_on_blast(name, "_t_2", "_b_2")
})
end
on_destruct = function(pos)
minetest.after(0, fire.on_flame_remove_at, pos)
end,
+
+ -- unaffected by explosions
+ on_blast = function() end,
})
fire.D = 6
name = name,
drops = def.drops,
flammable = def.groups.flammable,
+ on_blast = def.on_blast,
}
end
end)
if def and def.flammable then
minetest.set_node(pos, fire_node)
else
- minetest.remove_node(pos)
+ local on_blast = def.on_blast
+ if on_blast ~= nil then
+ on_blast(pos, 1)
+ return
+ else
+ minetest.remove_node(pos)
+ end
if def then
local node_drops = minetest.get_node_drops(def.name, "")
for _, item in ipairs(node_drops) do
local p = {}
local c_air = minetest.get_content_id("air")
- local c_tnt = minetest.get_content_id("tnt:tnt")
- local c_tnt_burning = minetest.get_content_id("tnt:tnt_burning")
- local c_gunpowder = minetest.get_content_id("tnt:gunpowder")
- local c_gunpowder_burning = minetest.get_content_id("tnt:gunpowder_burning")
- local c_boom = minetest.get_content_id("tnt:boom")
- local c_fire = minetest.get_content_id("fire:basic_flame")
for z = -radius, radius do
for y = -radius, radius do
p.x = pos.x + x
p.y = pos.y + y
p.z = pos.z + z
- if cid == c_tnt or cid == c_gunpowder then
- burn(p)
- elseif cid ~= c_tnt_burning and
- cid ~= c_gunpowder_burning and
- cid ~= c_air and
- cid ~= c_fire and
- cid ~= c_boom then
+ if cid ~= c_air then
destroy(drops, p, cid)
end
end
minetest.get_node_timer(pos):start(4)
end
end,
+ on_blast = function(pos, intensity)
+ burn(pos)
+ end,
mesecons = {effector = {action_on = boom}},
})
drop = "",
sounds = default.node_sound_wood_defaults(),
on_timer = boom,
+ -- unaffected by explosions
+ on_blast = function() end,
})
minetest.register_node("tnt:boom", {
on_timer = function(pos, elapsed)
minetest.remove_node(pos)
end,
+ -- unaffected by explosions
+ on_blast = function() end,
})
minetest.register_node("tnt:gunpowder", {
burn(pos)
end
end,
+ on_blast = function(pos, intensity)
+ burn(pos)
+ end,
})
minetest.register_node("tnt:gunpowder_burning", {
end
end
minetest.remove_node(pos)
- end
+ end,
+ -- unaffected by explosions
+ on_blast = function() end,
})
minetest.register_abm({