local mod_storage = minetest.get_mod_storage(); -- The path to this mod, for including files local modpath = minetest.get_modpath("cartographer"); -- The API object cartographer = { scan_queue = {}, }; _cartographer = { maps = minetest.deserialize(mod_storage:get_string("maps")) or {}, next_map_id = mod_storage:get_int("next_map_id"), materials_by_name = {}, materials_by_group = {}, }; if _cartographer.next_map_id == 0 then _cartographer.next_map_id = 1; end local map_data = { generated = minetest.deserialize(mod_storage:get_string("map")) or {}, } local function save() mod_storage:set_string("maps", minetest.serialize(_cartographer.maps)); mod_storage:set_int("next_map_id", _cartographer.next_map_id); mod_storage:set_string("map", minetest.serialize(map_data.generated)); end minetest.register_on_shutdown(save); minetest.register_on_leaveplayer(save); local function periodic_save() save(); minetest.after(60, periodic_save); end minetest.after(60, periodic_save); local chunk_size = 16; local chunk = { to = function(coord) return math.floor(coord / chunk_size); end, from = function(coord) return math.floor(coord * chunk_size); end }; local biome_lookup = {}; local marker_lookup = {}; -- Includes cartographer.skin = loadfile(modpath .. "/skin_api.lua") (); cartographer.gui = loadfile(modpath .. "/formspec.lua") (); loadfile(modpath .. "/scanner.lua") (map_data, chunk); loadfile(modpath .. "/map_api.lua") (chunk, biome_lookup, marker_lookup); loadfile(modpath .. "/items.lua") (chunk, marker_lookup, cartographer.gui, cartographer.skin); loadfile(modpath .. "/map_formspec.lua") (map_data); loadfile(modpath .. "/commands.lua") (); loadfile(modpath .. "/table.lua") (_cartographer.materials_by_name, _cartographer.materials_by_group, cartographer.gui, cartographer.skin);