Compare commits

3 Commits

Author SHA1 Message Date
3c9055c723 Fix crash when doors.registered_doors isn't available 2024-10-17 11:14:04 +02:00
b46c589a38 Support doors and trapdoors from mods (#683)
* Support doors and trapdoors from mods

Removed hardcoded door names and instead now use the API of the door mod to meseconify all doors and trapdoors that have been registered after the mods are finished loading.

* indentation as described by sfan5
2024-10-16 00:27:20 +02:00
ac83dead50 mesecons_doors: Don't modify doors that are already mesecon-enabled 2024-10-08 20:30:26 +02:00

View File

@ -22,6 +22,11 @@ end
local function meseconify_door(name) local function meseconify_door(name)
if minetest.registered_items[name .. "_b_1"] then if minetest.registered_items[name .. "_b_1"] then
-- old style double-node doors -- old style double-node doors
if minetest.registered_items[name .. "_b_1"].mesecons then
minetest.log("info", "[mesecons_doors] Not touching door " .. name)
return
end
local function toggle_state1 (pos) local function toggle_state1 (pos)
on_rightclick(pos, 1, name.."_t_1", name.."_b_2", name.."_t_2", {1,2,3,0}) on_rightclick(pos, 1, name.."_t_1", name.."_b_2", name.."_t_2", {1,2,3,0})
end end
@ -47,6 +52,10 @@ local function meseconify_door(name)
}) })
elseif minetest.registered_items[name .. "_a"] then elseif minetest.registered_items[name .. "_a"] then
-- new style mesh node based doors -- new style mesh node based doors
if minetest.registered_items[name .. "_a"].mesecons then
minetest.log("info", "[mesecons_doors] Not touching door " .. name)
return
end
local override = { local override = {
mesecons = {effector = { mesecons = {effector = {
action_on = function(pos) action_on = function(pos)
@ -73,15 +82,6 @@ local function meseconify_door(name)
end end
end end
local doors_list = {
"doors:door_wood",
"doors:door_steel",
"doors:door_glass",
"doors:door_obsidian_glass",
"xpanes:door_steel_bar",
}
for i=1,#doors_list do meseconify_door(doors_list[i]) end
-- Trapdoor -- Trapdoor
local function trapdoor_switch(name) local function trapdoor_switch(name)
return function(pos, node) return function(pos, node)
@ -131,9 +131,17 @@ local function meseconify_trapdoor(name)
end end
end end
local trapdoors_list = { minetest.register_on_mods_loaded(function()
"doors:trapdoor", if doors.registered_doors ~= nil then -- registered_doors is not always available
"doors:trapdoor_steel", for k,_ in pairs(doors.registered_doors) do
"xpanes:trapdoor_steel_bar" if k:find("_a$") then
} meseconify_door(k:sub(1,-3))
for i=1,#trapdoors_list do meseconify_trapdoor(trapdoors_list[i]) end end
end
for k,_ in pairs(doors.registered_trapdoors) do
if not k:find("_open$") then
meseconify_trapdoor(k)
end
end
end
end)