advtrains compat

This commit is contained in:
BuckarooBanzay 2024-09-15 17:45:14 +02:00
parent 226195a47e
commit 0637fcc5e1
4 changed files with 68 additions and 2 deletions

View File

@ -5,5 +5,10 @@ globals = {
}
read_globals = {
"mapsync", "mtt", "blockexchange", "travelnet", "display_api"
"mapsync",
"mtt",
"blockexchange",
"travelnet",
"display_api",
"advtrains"
}

57
compat/advtrains.lua Normal file
View File

@ -0,0 +1,57 @@
assert(type(advtrains.ndb.update) == "function")
local advtrains_nodeids = {}
minetest.register_on_mods_loaded(function()
for nodename, nodedef in pairs(minetest.registered_nodes) do
if nodedef.groups and nodedef.groups.save_in_at_nodedb then
advtrains_nodeids[minetest.get_content_id(nodename)] = true
end
end
end)
-- area-key -> table[pos]
local removed_nodes = {}
local function get_area_key(pos1, pos2)
return minetest.pos_to_string(pos1) .. "-" .. minetest.pos_to_string(pos2)
end
-- register to be removed nodedb positions
pick_and_place.register_on_before_remove(function(pos1, pos2, node_ids)
if not advtrains_nodeids[node_ids] then
-- nothing to do
return
end
local poslist = minetest.find_nodes_in_area(pos1, pos2, {"group:save_in_at_nodedb"})
local areakey = get_area_key(pos1, pos2)
removed_nodes[areakey] = poslist
end)
-- update removed nodedb positions
pick_and_place.register_on_remove(function(pos1, pos2)
local areakey = get_area_key(pos1, pos2)
local poslist = removed_nodes[areakey]
if not poslist then
return
end
removed_nodes[areakey] = nil
for _, pos in ipairs(poslist) do
advtrains.ndb.update(pos)
end
end)
-- update all nodedb positions
pick_and_place.register_on_place(function(pos1, pos2, node_ids)
if not advtrains_nodeids[node_ids] then
-- nothing to do
return
end
local poslist = minetest.find_nodes_in_area(pos1, pos2, {"group:save_in_at_nodedb"})
for _, pos in ipairs(poslist) do
advtrains.ndb.update(pos)
end
end)

View File

@ -36,6 +36,10 @@ if minetest.get_modpath("display_api") then
dofile(MP.."/compat/display_api.lua")
end
if minetest.get_modpath("advtrains") then
dofile(MP.."/compat/advtrains.lua")
end
if minetest.get_modpath("mtt") and mtt.enabled then
dofile(MP .. "/configure.spec.lua")
dofile(MP .. "/create_tool.spec.lua")

View File

@ -1,5 +1,5 @@
name = pick_and_place
description = Pick and place utility
depends = wield_events
optional_depends = mapsync, mtt, blockexchange, travelnet, display_api
optional_depends = mapsync, mtt, blockexchange, travelnet, display_api, advtrains
min_minetest_version = 5.5.0