From af0025debc7d753e7bc62f0af7b6f90bdbf267f7 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Tue, 8 May 2018 13:46:39 +0200 Subject: [PATCH] Wooden buttons stay pushed by arrow --- mods/ITEMS/REDSTONE/mesecons_button/init.lua | 27 ++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/mods/ITEMS/REDSTONE/mesecons_button/init.lua b/mods/ITEMS/REDSTONE/mesecons_button/init.lua index 20d329bf7b..362d8c7c73 100644 --- a/mods/ITEMS/REDSTONE/mesecons_button/init.lua +++ b/mods/ITEMS/REDSTONE/mesecons_button/init.lua @@ -66,7 +66,7 @@ end local buttonuse = "Rightclick the button to push it." -mesecon.register_button = function(basename, description, texture, recipeitem, sounds, plusgroups, button_timer, longdesc) +mesecon.register_button = function(basename, description, texture, recipeitem, sounds, plusgroups, button_timer, push_by_arrow, longdesc) local groups_off = table.copy(plusgroups) groups_off.attached_node=1 groups_off.dig_by_water=1 @@ -78,6 +78,11 @@ mesecon.register_button = function(basename, description, texture, recipeitem, s groups_on.not_in_creative_inventory=1 groups_on.button=2 -- button (on) + if push_by_arrow then + groups_off.button_push_by_arrow = 1 + groups_on.button_push_by_arrow = 1 + end + minetest.register_node("mesecons_button:button_"..basename.."_off", { drawtype = "nodebox", tiles = {texture}, @@ -137,6 +142,22 @@ mesecon.register_button = function(basename, description, texture, recipeitem, s on_timer = function(pos, elapsed) local node = minetest.get_node(pos) if node.name=="mesecons_button:button_"..basename.."_on" then --has not been dug + -- Is button pushable by arrow? + if push_by_arrow then + -- If there's an arrow stuck in the button, keep it pressed and check + -- it again later. + local objs = minetest.get_objects_inside_radius(pos, 1) + for o=1, #objs do + local entity = objs[o]:get_luaentity() + if entity and entity.name == "mcl_bows:arrow_entity" then + local timer = minetest.get_node_timer(pos) + timer:start(button_timer) + return + end + end + end + + -- Normal operation: Un-press the button minetest.set_node(pos, {name="mesecons_button:button_"..basename.."_off",param2=node.param2}) minetest.sound_play("mesecons_button_pop", {pos=pos}) mesecon.receptor_off(pos, button_get_output_rules(node)) @@ -160,6 +181,7 @@ mesecon.register_button( mcl_sounds.node_sound_stone_defaults(), {material_stone=1,handy=1,pickaxey=1}, 1, + false, "A stone button is a redstone component made out of stone which can be pushed to provide redstone power. When pushed, it powers adjacent redstone components for 1 second. It can only be placed on solid opaque full cubes (like cobblestone).") local woods = { @@ -180,7 +202,8 @@ for w=1, #woods do mcl_sounds.node_sound_wood_defaults(), {material_wood=1,handy=1,axey=1}, 1.5, - "A wooden button is a redstone component made out of wood which can be pushed to provide redstone power. When pushed, it powers adjacent redstone components for 1.5 seconds. It can only be placed on solid opaque full cubes (like cobblestone).") + true, + "A wooden button is a redstone component made out of wood which can be pushed to provide redstone power. When pushed, it powers adjacent redstone components for 1.5 seconds. It can only be placed on solid opaque full cubes (like cobblestone). Wooden buttons may also be pushed by arrows.") minetest.register_craft({ type = "fuel",