From 75894355d4f7b043dcf881cd8b39bd2b883995c8 Mon Sep 17 00:00:00 2001 From: SX <50966843+S-S-X@users.noreply.github.com> Date: Thu, 23 Jun 2022 19:06:01 +0300 Subject: [PATCH] Use on_repair when repairing tube (#37) * Use on_repair when repairing tube * Use tube.on_repair * Verify was_node registration --- routing_tubes.lua | 25 ++++++++++++++++++------- teleport_tube.lua | 12 ++++++++++++ 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/routing_tubes.lua b/routing_tubes.lua index 5fc1d82..7593322 100644 --- a/routing_tubes.lua +++ b/routing_tubes.lua @@ -64,28 +64,39 @@ pipeworks.register_tube("pipeworks:broken_tube", { local itemstack = puncher:get_wielded_item() local wieldname = itemstack:get_name() local playername = puncher:get_player_name() - local log_msg = playername.." struck a broken tube at "..minetest.pos_to_string(pos).."\n" + local log_msg = playername.." struck a broken tube at "..minetest.pos_to_string(pos).."\n " local meta = minetest.get_meta(pos) local was_node = minetest.deserialize(meta:get_string("the_tube_was")) if not was_node then - pipeworks.logger(log_msg.." but it can't be repaired.") + pipeworks.logger(log_msg.."but it can't be repaired.") return end if not pipeworks.check_and_wear_hammer(puncher) then if wieldname == "" then - pipeworks.logger(log_msg.." by hand. It's not very effective.") + pipeworks.logger(log_msg.."by hand. It's not very effective.") if minetest.settings:get_bool("enable_damage") then minetest.chat_send_player(playername,S("Broken tubes may be a bit sharp. Perhaps try with a hammer?")) puncher:set_hp(puncher:get_hp()-1) end else - pipeworks.logger(log_msg.." with "..wieldname.." but that tool is too weak.") + pipeworks.logger(log_msg.."with "..wieldname.." but that tool is too weak.") end return end - pipeworks.logger(log_msg.." with "..wieldname.." to repair it.") - minetest.swap_node(pos, { name = was_node.name, param2 = was_node.param2 }) - pipeworks.scan_for_tube_objects(pos) + log_msg = log_msg.."with "..wieldname.." to repair it" + local nodedef = minetest.registered_nodes[was_node.name] + if nodedef then + pipeworks.logger(log_msg..".") + if nodedef.tube and nodedef.tube.on_repair then + nodedef.tube.on_repair(pos, was_node) + else + minetest.swap_node(pos, { name = was_node.name, param2 = was_node.param2 }) + pipeworks.scan_for_tube_objects(pos) + end + else + pipeworks.logger(log_msg.." but original node "..was_node.name.." is not registered anymore.") + minetest.chat_send_player(playername, S("This tube cannot be repaired.")) + end end } }) diff --git a/teleport_tube.lua b/teleport_tube.lua index 7250045..ad6a51c 100644 --- a/teleport_tube.lua +++ b/teleport_tube.lua @@ -184,6 +184,18 @@ pipeworks.register_tube("pipeworks:teleport_tube", { pos.y = target[d].y pos.z = target[d].z return pipeworks.meseadjlist + end, + on_repair = function(pos, node) + local meta = minetest.get_meta(pos) + local channel = meta:get_string("channel") + minetest.swap_node(pos, { name = node.name, param2 = node.param2 }) + pipeworks.scan_for_tube_objects(pos) + if channel ~= "" then + local can_receive = meta:get_int("can_receive") + set_tube(pos, channel, can_receive) + local cr_description = (can_receive == 1) and "sending and receiving" or "sending" + meta:set_string("infotext", S("Teleportation Tube @1 on '@2'", cr_description, channel)) + end end }, on_construct = function(pos)