From aff005e7454e9a0659ba95527658684807efc3c2 Mon Sep 17 00:00:00 2001 From: fluxionary <25628292+fluxionary@users.noreply.github.com> Date: Wed, 26 Oct 2022 17:01:27 -0700 Subject: [PATCH] handle interactions w/ explosions (#14) * prevent signs entities from being destroyed * handle tnt destroying a sign * remove redundant destructor call --- api.lua | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/api.lua b/api.lua index 11fb584..ede80e3 100644 --- a/api.lua +++ b/api.lua @@ -172,6 +172,9 @@ minetest.register_entity("signs_lib:text", { self.object:remove() end end, + on_blast = function(self, damage) + return false, false, {} + end, }) function signs_lib.delete_objects(pos) @@ -742,6 +745,15 @@ function signs_lib.destruct_sign(pos) signs_lib.delete_objects(pos) end +function signs_lib.blast_sign(pos, intensity) + if signs_lib.can_modify(pos, "") then + local node = minetest.get_node(pos) + local drops = minetest.get_node_drops(node, "tnt:blast") + minetest.remove_node(pos) + return drops + end +end + local function make_infotext(text) text = trim_input(text) local lines = signs_lib.split_lines_and_words(text) or {} @@ -803,7 +815,16 @@ end function signs_lib.can_modify(pos, player) local meta = minetest.get_meta(pos) local owner = meta:get_string("owner") - local playername = player:get_player_name() + local playername + if type(player) == "userdata" then + playername = player:get_player_name() + + elseif type(player) == "string" then + playername = player + + else + playername = "" + end if minetest.is_protected(pos, playername) then minetest.record_protection_violation(pos, playername) @@ -984,6 +1005,7 @@ function signs_lib.register_sign(name, raw_def) end def.after_place_node = raw_def.after_place_node or signs_lib.after_place_node + def.on_blast = raw_def.on_blast or signs_lib.blast_sign if raw_def.entity_info then