Skip to content

Commit a82bac7

Browse files
author
Mikita Wiśniewski
authored
[mesecons_doors] Improve code quality and fix Voxelgarden support (#671)
now trapdoors are also overridden using their own function, and both `meseconify_door` and `meseconify_trapdoor` are now ran inside loops In the future, this could help refactor this mod entirely to not list doors manually but parse through the `doors.registered_*` variables, ensuring that every door works. As a nice bonus, Voxelgarden support is fixed, and potentially so is support for other games with exotic implementations of the doors mod. No longer are we assuming that the existence of doors.get means that all the trapdoors exist too; now, if the meseconify function doesn't find their definition, it just returns without crashing.
1 parent cffbc33 commit a82bac7

File tree

1 file changed

+53
-54
lines changed

1 file changed

+53
-54
lines changed

mesecons_doors/init.lua

+53-54
Original file line numberDiff line numberDiff line change
@@ -73,68 +73,67 @@ local function meseconify_door(name)
7373
end
7474
end
7575

76-
meseconify_door("doors:door_wood")
77-
meseconify_door("doors:door_steel")
78-
meseconify_door("doors:door_glass")
79-
meseconify_door("doors:door_obsidian_glass")
80-
meseconify_door("xpanes:door_steel_bar")
76+
local doors_list = {
77+
"doors:door_wood",
78+
"doors:door_steel",
79+
"doors:door_glass",
80+
"doors:door_obsidian_glass",
81+
"xpanes:door_steel_bar",
82+
}
83+
for i=1,#doors_list do meseconify_door(doors_list[i]) end
8184

8285
-- Trapdoor
83-
local function trapdoor_switch(pos, node)
84-
local state = minetest.get_meta(pos):get_int("state")
85-
86-
if state == 1 then
87-
minetest.sound_play("doors_door_close", { pos = pos, gain = 0.3, max_hear_distance = 10 }, true)
88-
minetest.set_node(pos, {name="doors:trapdoor", param2 = node.param2})
89-
else
90-
minetest.sound_play("doors_door_open", { pos = pos, gain = 0.3, max_hear_distance = 10 }, true)
91-
minetest.set_node(pos, {name="doors:trapdoor_open", param2 = node.param2})
86+
local function trapdoor_switch(name)
87+
return function(pos, node)
88+
local state = minetest.get_meta(pos):get_int("state")
89+
if state == 1 then
90+
minetest.sound_play("doors_door_close", { pos = pos, gain = 0.3, max_hear_distance = 10 }, true)
91+
minetest.set_node(pos, {name=name, param2 = node.param2})
92+
else
93+
minetest.sound_play("doors_door_open", { pos = pos, gain = 0.3, max_hear_distance = 10 }, true)
94+
minetest.set_node(pos, {name=name.."_open", param2 = node.param2})
95+
end
96+
minetest.get_meta(pos):set_int("state", state == 1 and 0 or 1)
9297
end
93-
94-
minetest.get_meta(pos):set_int("state", state == 1 and 0 or 1)
9598
end
9699

97-
if doors and doors.get then
98-
local override = {
99-
mesecons = {effector = {
100-
action_on = function(pos)
101-
local door = doors.get(pos)
102-
if door then
103-
door:open()
104-
end
105-
end,
106-
action_off = function(pos)
107-
local door = doors.get(pos)
108-
if door then
109-
door:close()
110-
end
111-
end,
112-
}},
113-
}
114-
minetest.override_item("doors:trapdoor", override)
115-
minetest.override_item("doors:trapdoor_open", override)
116-
minetest.override_item("doors:trapdoor_steel", override)
117-
minetest.override_item("doors:trapdoor_steel_open", override)
118-
119-
if minetest.registered_items["xpanes:trapdoor_steel_bar"] then
120-
minetest.override_item("xpanes:trapdoor_steel_bar", override)
121-
minetest.override_item("xpanes:trapdoor_steel_bar_open", override)
122-
end
123-
124-
else
125-
if minetest.registered_nodes["doors:trapdoor"] then
126-
minetest.override_item("doors:trapdoor", {
100+
local function meseconify_trapdoor(name)
101+
local override
102+
if doors and doors.get then
103+
override = {
127104
mesecons = {effector = {
128-
action_on = trapdoor_switch,
129-
action_off = trapdoor_switch
105+
action_on = function(pos)
106+
local door = doors.get(pos)
107+
if door then
108+
door:open()
109+
end
110+
end,
111+
action_off = function(pos)
112+
local door = doors.get(pos)
113+
if door then
114+
door:close()
115+
end
116+
end,
130117
}},
131-
})
132-
133-
minetest.override_item("doors:trapdoor_open", {
118+
}
119+
else
120+
override = {
134121
mesecons = {effector = {
135-
action_on = trapdoor_switch,
136-
action_off = trapdoor_switch
122+
action_on = trapdoor_switch(name),
123+
action_off = trapdoor_switch(name)
137124
}},
138-
})
125+
}
126+
end
127+
128+
if minetest.registered_items[name] then
129+
minetest.override_item(name, override)
130+
minetest.override_item(name.."_open", override)
139131
end
140132
end
133+
134+
local trapdoors_list = {
135+
"doors:trapdoor",
136+
"doors:trapdoor_steel",
137+
"xpanes:trapdoor_steel_bar"
138+
}
139+
for i=1,#trapdoors_list do meseconify_trapdoor(trapdoors_list[i]) end

0 commit comments

Comments
 (0)