From 0c6fdbdd05ced11649cc2d20665819e6a46d9cd4 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Sat, 9 May 2015 17:31:31 +0200 Subject: [PATCH] Destroy doors completely on on_blast event --- mods/doors/init.lua | 39 +++++++++++++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/mods/doors/init.lua b/mods/doors/init.lua index 902e1cf5..74c7eec6 100644 --- a/mods/doors/init.lua +++ b/mods/doors/init.lua @@ -25,10 +25,6 @@ function doors.register_door(name, def) if not def.sound_open_door then def.sound_open_door = "doors_door_open" end - if def.only_placer_can_open then - -- unaffected by explosions - def.on_blast = function() end - end minetest.register_craftitem(name, { @@ -112,6 +108,33 @@ function doors.register_door(name, def) 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 @@ -178,7 +201,7 @@ function doors.register_door(name, def) can_dig = check_player_priv, sounds = def.sounds, sunlight_propagates = def.sunlight, - on_blast = def.on_blast, + on_blast = make_on_blast(name, "_b_1", "_t_1") }) minetest.register_node(name.."_t_1", { @@ -211,7 +234,7 @@ function doors.register_door(name, def) can_dig = check_player_priv, sounds = def.sounds, sunlight_propagates = def.sunlight, - on_blast = def.on_blast, + on_blast = make_on_blast(name, "_t_1", "_b_1") }) minetest.register_node(name.."_b_2", { @@ -244,7 +267,7 @@ function doors.register_door(name, def) can_dig = check_player_priv, sounds = def.sounds, sunlight_propagates = def.sunlight, - on_blast = def.on_blast, + on_blast = make_on_blast(name, "_b_2", "_t_2") }) minetest.register_node(name.."_t_2", { @@ -277,7 +300,7 @@ function doors.register_door(name, def) can_dig = check_player_priv, sounds = def.sounds, sunlight_propagates = def.sunlight, - on_blast = def.on_blast, + on_blast = make_on_blast(name, "_t_2", "_b_2") }) end