1 -- Thanks to sofar for helping with that code.
3 minetest.setting_set("nodetimer_interval", 0.1)
6 screwdriver = screwdriver or {}
8 local function door_toggle(pos_actuator, pos_door, player)
9 local player_name = player:get_player_name()
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})
24 -- Re-get player object (or nil) because 'player' could
25 -- be an invalid object at this time (player left)
26 door:close(minetest.get_player_by_name(player_name))
30 function plate.construct(pos)
31 local timer = minetest.get_node_timer(pos)
35 function plate.timer(pos)
36 local objs = minetest.get_objects_inside_radius(pos, 0.8)
37 if not next(objs) or not doors.get then return true end
38 local minp = {x=pos.x-2, y=pos.y, z=pos.z-2}
39 local maxp = {x=pos.x+2, y=pos.y, z=pos.z+2}
40 local doors = minetest.find_nodes_in_area(minp, maxp, "group:door")
42 for _, player in pairs(objs) do
43 if player:is_player() then
45 door_toggle(pos, doors[i], player)
53 function plate.register(material, desc, def)
54 xdecor.register("pressure_"..material.."_off", {
55 description = desc.." Pressure Plate",
56 tiles = {"xdecor_pressure_"..material..".png"},
58 node_box = xdecor.pixelbox(16, {{1, 0, 1, 14, 1, 14}}),
61 sunlight_propagates = true,
62 on_rotate = screwdriver.rotate_simple,
63 on_construct = plate.construct,
64 on_timer = plate.timer
66 xdecor.register("pressure_"..material.."_on", {
67 tiles = {"xdecor_pressure_"..material..".png"},
69 node_box = xdecor.pixelbox(16, {{1, 0, 1, 14, 0.4, 14}}),
72 drop = "xdecor:pressure_"..material.."_off",
73 sunlight_propagates = true,
74 on_rotate = screwdriver.rotate_simple
78 plate.register("wood", "Wooden", {
79 sounds = default.node_sound_wood_defaults(),
80 groups = {choppy=3, oddly_breakable_by_hand=2, flammable=2}
83 plate.register("stone", "Stone", {
84 sounds = default.node_sound_stone_defaults(),
85 groups = {cracky=3, oddly_breakable_by_hand=2}
88 xdecor.register("lever_off", {
89 description = "Lever",
90 tiles = {"xdecor_lever_off.png"},
92 node_box = xdecor.pixelbox(16, {{2, 1, 15, 12, 14, 1}}),
93 groups = {cracky=3, oddly_breakable_by_hand=2},
94 sounds = default.node_sound_stone_defaults(),
95 sunlight_propagates = true,
96 on_rotate = screwdriver.rotate_simple,
97 on_rightclick = function(pos, node, clicker, itemstack)
98 if not doors.get then return itemstack end
99 local minp = {x=pos.x-2, y=pos.y-1, z=pos.z-2}
100 local maxp = {x=pos.x+2, y=pos.y+1, z=pos.z+2}
101 local doors = minetest.find_nodes_in_area(minp, maxp, "group:door")
104 door_toggle(pos, doors[i], clicker)
110 xdecor.register("lever_on", {
111 tiles = {"xdecor_lever_on.png"},
112 drawtype = "nodebox",
113 node_box = xdecor.pixelbox(16, {{2, 1, 15, 12, 14, 1}}),
114 groups = {cracky=3, oddly_breakable_by_hand=2, not_in_creative_inventory=1},
115 sounds = default.node_sound_stone_defaults(),
116 sunlight_propagates = true,
117 on_rotate = screwdriver.rotate_simple,
118 drop = "xdecor:lever_off"
123 minetest.register_craft({
124 output = "xdecor:pressure_stone_off",
126 recipe = {"group:stone", "group:stone"}
129 minetest.register_craft({
130 output = "xdecor:pressure_wood_off",
132 recipe = {"group:wood", "group:wood"}
135 minetest.register_craft({
136 output = "xdecor:lever_off",