/ bjvxlx_util / init.lua
init.lua
 1  bjvxlx = {}
 2  
 3  local per_mod = {}
 4  
 5  --[[ bjvxlx.util.register_mod(name)
 6  Creates a table under bjvxlx[`name`],
 7  populates it with appropriate values for modname, modpath, and translate,
 8  and defines per-mod utility functions on the table.
 9  Returns the table created. ]]
10  local function register_mod(name)
11      bjvxlx[name] = {}
12  
13      --[[ bjvxlx.*.modname
14      Name of the mod as understood by Minetest. ]]
15      bjvxlx[name].modname = minetest.get_current_modname()
16  
17      --[[ bjvxlx.*.modpath
18      Install directory of the mod. ]]
19      bjvxlx[name].modpath = minetest.get_modpath(bjvxlx[name].modname)
20  
21      --[[ bjvxlx.*.translate
22      Translator which Minetest provides for the mod. ]]
23      bjvxlx[name].translate = minetest.get_translator(bjvxlx[name].modname)
24  
25      --[[ bjvxlx.*.global_storage
26      Minetest-allocated mod storage object for this mod. ]]
27      bjvxlx[name].storage = minetest.get_mod_storage()
28  
29      --[[ bjvxlx.*.dofile(path)
30      Invokes builtin dofile, but relative to mod's modpath. ]]
31      bjvxlx[name].dofile = function (path)
32          return dofile(("%s/%s"):format(bjvxlx[name].modpath, path))
33      end
34  
35      for k, f in pairs(per_mod) do
36          bjvxlx[name][k] = f(bjvxlx)
37      end
38  
39      return bjvxlx[name]
40  end
41  
42  local util = register_mod('util')
43  util.per_mod = per_mod
44  util.register_mod = register_mod
45  
46  --[[ bjvxlx.util.reregister_all_mods
47  Calls `bjvxlx.util.register_mod` again on every registered bjvxlx mod.
48  Intended use is to propagate changes to the behavior of `register_mod`,
49  such as when `bjvxlx.util.per_mod` changes. ]]
50  function util.reregister_all_mods()
51      local mods = {}
52      for name, mod in pairs(bjvxlx) do
53          mods[name] = mod
54      end
55      for name, mod in pairs(mods) do
56          util.register_mod(name)
57          for k, v in pairs(mod) do
58              bjvxlx[name][k] = bjvxlx[name][k] or v
59          end
60      end
61  end
62  
63  util.dofile("general.lua")
64  util.dofile("functional.lua")
65  util.dofile("load_localization.lua")
66  util.dofile("storage_proxy.lua")
67  util.dofile("sandbox.lua")
68  util.dofile("oop.lua")