1 --[[ Thanks to sofar for helping with that code.
2 Recommended setting in minetest.conf (requires 0.4.14 or newer) :
3 nodetimer_interval = 0.1
7 screwdriver = screwdriver or {}
9 local function door_toggle(pos_actuator, pos_door, player)
10 local actuator = minetest.get_node(pos_actuator)
11 local door = doors.get(pos_door)
13 if actuator.name:sub(-4) == "_off" then
14 minetest.set_node(pos_actuator,
15 {name=actuator.name:gsub("_off", "_on"), param2=actuator.param2})
19 minetest.after(2, function()
20 if minetest.get_node(pos_actuator).name:sub(-3) == "_on" then
21 minetest.set_node(pos_actuator,
22 {name=actuator.name, param2=actuator.param2})
28 function plate.construct(pos)
29 local timer = minetest.get_node_timer(pos)
33 function plate.timer(pos)
34 local objs = minetest.get_objects_inside_radius(pos, 0.8)
35 if objs == {} or not doors.get then return true end
36 local minp = {x=pos.x-2, y=pos.y, z=pos.z-2}
37 local maxp = {x=pos.x+2, y=pos.y, z=pos.z+2}
38 local doors = minetest.find_nodes_in_area(minp, maxp, "group:door")
40 for _, player in pairs(objs) do
41 if player:is_player() then
43 door_toggle(pos, doors[i], player)
51 function plate.register(material, desc, def)
52 xdecor.register("pressure_"..material.."_off", {
53 description = desc.." Pressure Plate",
54 tiles = {"xdecor_pressure_"..material..".png"},
56 node_box = xdecor.pixelbox(16, {{1, 0, 1, 14, 1, 14}}),
59 sunlight_propagates = true,
60 on_rotate = screwdriver.rotate_simple,
61 on_construct = plate.construct,
62 on_timer = plate.timer
64 xdecor.register("pressure_"..material.."_on", {
65 tiles = {"xdecor_pressure_"..material..".png"},
67 node_box = xdecor.pixelbox(16, {{1, 0, 1, 14, 0.4, 14}}),
70 drop = "xdecor:pressure_"..material.."_off",
71 sunlight_propagates = true,
72 on_rotate = screwdriver.rotate_simple
76 plate.register("wood", "Wooden", {
77 sounds = default.node_sound_wood_defaults(),
78 groups = {choppy=3, oddly_breakable_by_hand=2, flammable=2}
81 plate.register("stone", "Stone", {
82 sounds = default.node_sound_stone_defaults(),
83 groups = {cracky=3, oddly_breakable_by_hand=2}
86 xdecor.register("lever_off", {
87 description = "Lever",
88 tiles = {"xdecor_lever_off.png"},
90 node_box = xdecor.pixelbox(16, {{2, 1, 15, 12, 14, 1}}),
91 groups = {cracky=3, oddly_breakable_by_hand=2},
92 sounds = default.node_sound_stone_defaults(),
93 sunlight_propagates = true,
94 on_rotate = screwdriver.rotate_simple,
95 on_rightclick = function(pos, node, clicker)
96 if not doors.get then return end
97 local minp = {x=pos.x-2, y=pos.y-1, z=pos.z-2}
98 local maxp = {x=pos.x+2, y=pos.y+1, z=pos.z+2}
99 local doors = minetest.find_nodes_in_area(minp, maxp, "group:door")
102 door_toggle(pos, doors[i], clicker)
107 xdecor.register("lever_on", {
108 tiles = {"xdecor_lever_on.png"},
109 drawtype = "nodebox",
110 node_box = xdecor.pixelbox(16, {{2, 1, 15, 12, 14, 1}}),
111 groups = {cracky=3, oddly_breakable_by_hand=2, not_in_creative_inventory=1},
112 sounds = default.node_sound_stone_defaults(),
113 sunlight_propagates = true,
114 on_rotate = screwdriver.rotate_simple,
115 drop = "xdecor:lever_off"