diff options
Diffstat (limited to 'routing_tubes.lua')
-rw-r--r-- | routing_tubes.lua | 68 |
1 files changed, 48 insertions, 20 deletions
diff --git a/routing_tubes.lua b/routing_tubes.lua index 1ebcf06..7a90fd4 100644 --- a/routing_tubes.lua +++ b/routing_tubes.lua @@ -10,6 +10,36 @@ minetest.register_craft( { }, }) +-- The hammers that can be used to break/repair tubes +local allowed_hammers = { + "anvil:hammer", + "cottages:hammer", + "glooptest:hammer_steel", + "glooptest:hammer_bronze", + "glooptest:hammer_diamond", + "glooptest:hammer_mese", + "glooptest:hammer_alatro", + "glooptest:hammer_arol" +} + +-- Convert the above list to a format that's easier to look up +for _,hammer in ipairs(allowed_hammers) do + allowed_hammers[hammer] = true +end + +-- Check if the player is holding a suitable hammer or not - if they are, apply wear to it +function pipeworks.check_and_wear_hammer(player) + local itemstack = player:get_wielded_item() + local wieldname = itemstack:get_name() + local playername = player:get_player_name() + if allowed_hammers[wieldname] then + itemstack:add_wear(1000) + player:set_wielded_item(itemstack) + return true + end + return false +end + local nodecolor = 0xffff3030 pipeworks.register_tube("pipeworks:broken_tube", { @@ -36,29 +66,27 @@ pipeworks.register_tube("pipeworks:broken_tube", { 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" - if wieldname == "anvil:hammer" - or wieldname == "cottages:hammer" - or wieldname == "glooptest:hammer_steel" - or wieldname == "glooptest:hammer_bronze" - or wieldname == "glooptest:hammer_diamond" - or wieldname == "glooptest:hammer_mese" - or wieldname == "glooptest:hammer_alatro" - or wieldname == "glooptest:hammer_arol" then - local meta = minetest.get_meta(pos) - local was_node = minetest.deserialize(meta:get_string("the_tube_was")) - if was_node and was_node ~= "" then - 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) - itemstack:add_wear(1000) - puncher:set_wielded_item(itemstack) - return itemstack + 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.") + 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.") + 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.." but it can't be repaired.") + pipeworks.logger(log_msg.." with "..wieldname.." but that tool is too weak.") end - else - pipeworks.logger(log_msg.." with "..wieldname.." but that tool is too weak.") + 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) end } }) |