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
39 local minp = {x = pos.x - 2, y = pos.y, z = pos.z - 2}
40 local maxp = {x = pos.x + 2, y = pos.y, z = pos.z + 2}
41 local doors = minetest.find_nodes_in_area(minp, maxp, "group:door")
43 for _, player in pairs(objs) do
44 if player:is_player() then
46 door_toggle(pos, doors[i], player)
55 function plate.register(material, desc, def)
56 xdecor.register("pressure_" .. material .. "_off", {
57 description = desc .. " Pressure Plate",
58 tiles = {"xdecor_pressure_" .. material .. ".png"},
60 node_box = xdecor.pixelbox(16, {{1, 0, 1, 14, 1, 14}}),
63 sunlight_propagates = true,
64 on_rotate = screwdriver.rotate_simple,
65 on_construct = plate.construct,
66 on_timer = plate.timer
68 xdecor.register("pressure_" .. material .. "_on", {
69 tiles = {"xdecor_pressure_" .. material .. ".png"},
71 node_box = xdecor.pixelbox(16, {{1, 0, 1, 14, 0.4, 14}}),
74 drop = "xdecor:pressure_" .. material .. "_off",
75 sunlight_propagates = true,
76 on_rotate = screwdriver.rotate_simple
80 plate.register("wood", "Wooden", {
81 sounds = default.node_sound_wood_defaults(),
82 groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 2}
85 plate.register("stone", "Stone", {
86 sounds = default.node_sound_stone_defaults(),
87 groups = {cracky = 3, oddly_breakable_by_hand = 2}
90 xdecor.register("lever_off", {
91 description = "Lever",
92 tiles = {"xdecor_lever_off.png"},
94 node_box = xdecor.pixelbox(16, {{2, 1, 15, 12, 14, 1}}),
95 groups = {cracky = 3, oddly_breakable_by_hand = 2},
96 sounds = default.node_sound_stone_defaults(),
97 sunlight_propagates = true,
98 on_rotate = screwdriver.rotate_simple,
100 on_rightclick = function(pos, node, clicker, itemstack)
101 if not doors.get then return itemstack end
102 local minp = {x = pos.x - 2, y = pos.y - 1, z = pos.z - 2}
103 local maxp = {x = pos.x + 2, y = pos.y + 1, z = pos.z + 2}
104 local doors = minetest.find_nodes_in_area(minp, maxp, "group:door")
107 door_toggle(pos, doors[i], clicker)
114 xdecor.register("lever_on", {
115 tiles = {"xdecor_lever_on.png"},
116 drawtype = "nodebox",
117 node_box = xdecor.pixelbox(16, {{2, 1, 15, 12, 14, 1}}),
118 groups = {cracky = 3, oddly_breakable_by_hand = 2, not_in_creative_inventory = 1},
119 sounds = default.node_sound_stone_defaults(),
120 sunlight_propagates = true,
121 on_rotate = screwdriver.rotate_simple,
122 drop = "xdecor:lever_off"
127 minetest.register_craft({
128 output = "xdecor:pressure_stone_off",
130 recipe = {"group:stone", "group:stone"}
133 minetest.register_craft({
134 output = "xdecor:pressure_wood_off",
136 recipe = {"group:wood", "group:wood"}
139 minetest.register_craft({
140 output = "xdecor:lever_off",