lavatemple.mapgen_data = {} lavatemple.file = minetest.get_worldpath()..'/lavatemple.mt' -- try to load the data from file local f = io.open(lavatemple.file, "r") if f then local contents = f:read() io.close(f) if contents ~= nil then lavatemple.mapgen_data = minetest.deserialize(contents) end end -- generate position of the temple (if not done already) if type (lavatemple.mapgen_data) ~= "table" or lavatemple.mapgen_data.pos == nil or lavatemple.mapgen_data.pos.x == nil or lavatemple.mapgen_data.pos.y == nil or lavatemple.mapgen_data.pos.z == nil then -- generate the temple position math.randomseed(os.time()) lavatemple.mapgen_data.pos = { x=math.random(-2000,2000), y=math.random(-500,-50), z=math.random(-2000,2000) } -- save data local f = io.open(lavatemple.file, "w") f:write(minetest.serialize(lavatemple.mapgen_data)) io.close(f) end minetest.register_on_generated(function(minp,maxp,seed) local ltp = lavatemple.mapgen_data.pos if ltp.x > minp.x and ltp.x < maxp.x and ltp.y > minp.y and ltp.y < maxp.y and ltp.z > minp.z and ltp.z < maxp.z then local f = io.open(minetest.get_modpath("lavatemple").."/schems/lavatemple.we", "r") if not f then return end local contents = f:read() io.close(f) if not contents then return end -- Clear the area since worldedit doesn't save "air" nodes local pos1, pos2, count = worldedit.allocate(ltp, contents) for x=pos1.x,pos2.x do for y=pos1.y,pos2.y do for z=pos1.z,pos2.z do minetest.remove_node({x=x,y=y,z=z}) end end end -- Deserialize the temple --worldedit.deserialize(ltp, contents, minetest|.env) worldedit.deserialize(ltp, contents, minetest) end end)