aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--builtin/async/init.lua18
-rw-r--r--builtin/async_env.lua21
-rw-r--r--builtin/async_event.lua45
-rw-r--r--builtin/builtin.lua32
-rw-r--r--builtin/common/async_event.lua42
-rw-r--r--builtin/common/misc_helpers.lua (renamed from builtin/misc_helpers.lua)0
-rw-r--r--builtin/common/serialize.lua (renamed from builtin/serialize.lua)0
-rw-r--r--builtin/common/vector.lua (renamed from builtin/vector.lua)0
-rw-r--r--builtin/game/auth.lua (renamed from builtin/auth.lua)0
-rw-r--r--builtin/game/chatcommands.lua (renamed from builtin/chatcommands.lua)0
-rw-r--r--builtin/game/deprecated.lua (renamed from builtin/deprecated.lua)0
-rw-r--r--builtin/game/detached_inventory.lua (renamed from builtin/detached_inventory.lua)0
-rw-r--r--builtin/game/falling.lua (renamed from builtin/falling.lua)2
-rw-r--r--builtin/game/features.lua (renamed from builtin/features.lua)0
-rw-r--r--builtin/game/forceloading.lua (renamed from builtin/forceloading.lua)0
-rw-r--r--builtin/game/init.lua23
-rw-r--r--builtin/game/item.lua (renamed from builtin/item.lua)0
-rw-r--r--builtin/game/item_entity.lua (renamed from builtin/item_entity.lua)2
-rw-r--r--builtin/game/misc.lua (renamed from builtin/misc.lua)0
-rw-r--r--builtin/game/privileges.lua (renamed from builtin/privileges.lua)0
-rw-r--r--builtin/game/register.lua (renamed from builtin/misc_register.lua)0
-rw-r--r--builtin/game/statbars.lua (renamed from builtin/statbars.lua)0
-rw-r--r--builtin/game/static_spawn.lua (renamed from builtin/static_spawn.lua)0
-rw-r--r--builtin/game/voxelarea.lua (renamed from builtin/voxelarea.lua)0
-rw-r--r--builtin/init.lua34
-rw-r--r--builtin/mainmenu/filterlist.lua (renamed from builtin/filterlist.lua)0
-rw-r--r--builtin/mainmenu/gamemgr.lua (renamed from builtin/gamemgr.lua)0
-rw-r--r--builtin/mainmenu/init.lua (renamed from builtin/mainmenu.lua)23
-rw-r--r--builtin/mainmenu/menubar.lua (renamed from builtin/mm_menubar.lua)0
-rw-r--r--builtin/mainmenu/modmgr.lua (renamed from builtin/modmgr.lua)0
-rw-r--r--builtin/mainmenu/modstore.lua (renamed from builtin/modstore.lua)0
-rw-r--r--builtin/mainmenu/textures.lua (renamed from builtin/mm_textures.lua)0
-rw-r--r--src/defaultsettings.cpp6
-rw-r--r--src/guiEngine.cpp65
-rw-r--r--src/script/cpp_api/s_async.cpp14
-rw-r--r--src/script/cpp_api/s_base.cpp20
-rw-r--r--src/script/lua_api/l_mainmenu.cpp4
-rw-r--r--src/script/lua_api/l_mainmenu.h2
-rw-r--r--src/script/lua_api/l_server.cpp8
-rw-r--r--src/script/lua_api/l_util.cpp14
-rw-r--r--src/script/lua_api/l_util.h3
-rw-r--r--src/script/scripting_game.cpp9
-rw-r--r--src/script/scripting_mainmenu.cpp6
-rw-r--r--src/server.cpp16
44 files changed, 206 insertions, 203 deletions
diff --git a/builtin/async/init.lua b/builtin/async/init.lua
new file mode 100644
index 000000000..79b1a0a6c
--- /dev/null
+++ b/builtin/async/init.lua
@@ -0,0 +1,18 @@
+engine.log("info", "Initializing Asynchronous environment")
+
+local core = engine or minetest
+
+function core.job_processor(serialized_func, serialized_param)
+ local func = loadstring(serialized_func)
+ local param = core.deserialize(serialized_param)
+ local retval = nil
+
+ if type(func) == "function" then
+ retval = core.serialize(func(param))
+ else
+ core.log("error", "ASYNC WORKER: Unable to deserialize function")
+ end
+
+ return retval or core.serialize(nil)
+end
+
diff --git a/builtin/async_env.lua b/builtin/async_env.lua
deleted file mode 100644
index cdcb82ee3..000000000
--- a/builtin/async_env.lua
+++ /dev/null
@@ -1,21 +0,0 @@
-engine.log("info", "Initializing Asynchronous environment")
-local tbl = engine or minetest
-
-minetest = tbl
-dofile(SCRIPTDIR .. DIR_DELIM .. "serialize.lua")
-dofile(SCRIPTDIR .. DIR_DELIM .. "misc_helpers.lua")
-
-function tbl.job_processor(serialized_func, serialized_param)
- local func = loadstring(serialized_func)
- local param = tbl.deserialize(serialized_param)
- local retval = nil
-
- if type(func) == "function" then
- retval = tbl.serialize(func(param))
- else
- tbl.log("error", "ASYNC WORKER: Unable to deserialize function")
- end
-
- return retval or tbl.serialize(nil)
-end
-
diff --git a/builtin/async_event.lua b/builtin/async_event.lua
deleted file mode 100644
index 2c3fb8fa7..000000000
--- a/builtin/async_event.lua
+++ /dev/null
@@ -1,45 +0,0 @@
-local tbl = engine or minetest
-
-local SCRIPTDIR = SCRIPTDIR or tbl.get_scriptdir()
-minetest = tbl
-dofile(SCRIPTDIR .. DIR_DELIM .. "serialize.lua")
-
-tbl.async_jobs = {}
-
-local function handle_job(jobid, serialized_retval)
- local retval = tbl.deserialize(serialized_retval)
- assert(type(tbl.async_jobs[jobid]) == "function")
- tbl.async_jobs[jobid](retval)
- tbl.async_jobs[jobid] = nil
-end
-
-if engine ~= nil then
- tbl.async_event_handler = handle_job
-else
- minetest.register_globalstep(function(dtime)
- for i, job in ipairs(tbl.get_finished_jobs()) do
- handle_job(job.jobid, job.retval)
- end
- end)
-end
-
-function tbl.handle_async(func, parameter, callback)
- -- Serialize function
- local serialized_func = string.dump(func)
-
- assert(serialized_func ~= nil)
-
- -- Serialize parameters
- local serialized_param = tbl.serialize(parameter)
-
- if serialized_param == nil then
- return false
- end
-
- local jobid = tbl.do_async_callback(serialized_func, serialized_param)
-
- tbl.async_jobs[jobid] = callback
-
- return true
-end
-
diff --git a/builtin/builtin.lua b/builtin/builtin.lua
deleted file mode 100644
index 1babe006f..000000000
--- a/builtin/builtin.lua
+++ /dev/null
@@ -1,32 +0,0 @@
---
--- This file contains built-in stuff in Minetest implemented in Lua.
---
--- It is always loaded and executed after registration of the C API,
--- before loading and running any mods.
---
-
--- Initialize some very basic things
-print = minetest.debug
-math.randomseed(os.time())
-os.setlocale("C", "numeric")
-
--- Load other files
-local modpath = minetest.get_modpath("__builtin")
-dofile(modpath.."/serialize.lua")
-dofile(modpath.."/misc_helpers.lua")
-dofile(modpath.."/item.lua")
-dofile(modpath.."/misc_register.lua")
-dofile(modpath.."/item_entity.lua")
-dofile(modpath.."/deprecated.lua")
-dofile(modpath.."/misc.lua")
-dofile(modpath.."/privileges.lua")
-dofile(modpath.."/auth.lua")
-dofile(modpath.."/chatcommands.lua")
-dofile(modpath.."/static_spawn.lua")
-dofile(modpath.."/detached_inventory.lua")
-dofile(modpath.."/falling.lua")
-dofile(modpath.."/features.lua")
-dofile(modpath.."/voxelarea.lua")
-dofile(modpath.."/vector.lua")
-dofile(modpath.."/forceloading.lua")
-dofile(modpath.."/statbars.lua")
diff --git a/builtin/common/async_event.lua b/builtin/common/async_event.lua
new file mode 100644
index 000000000..ef4bf4354
--- /dev/null
+++ b/builtin/common/async_event.lua
@@ -0,0 +1,42 @@
+
+local core = engine or minetest
+
+core.async_jobs = {}
+
+local function handle_job(jobid, serialized_retval)
+ local retval = core.deserialize(serialized_retval)
+ assert(type(core.async_jobs[jobid]) == "function")
+ core.async_jobs[jobid](retval)
+ core.async_jobs[jobid] = nil
+end
+
+if engine ~= nil then
+ core.async_event_handler = handle_job
+else
+ minetest.register_globalstep(function(dtime)
+ for i, job in ipairs(core.get_finished_jobs()) do
+ handle_job(job.jobid, job.retval)
+ end
+ end)
+end
+
+function core.handle_async(func, parameter, callback)
+ -- Serialize function
+ local serialized_func = string.dump(func)
+
+ assert(serialized_func ~= nil)
+
+ -- Serialize parameters
+ local serialized_param = core.serialize(parameter)
+
+ if serialized_param == nil then
+ return false
+ end
+
+ local jobid = core.do_async_callback(serialized_func, serialized_param)
+
+ core.async_jobs[jobid] = callback
+
+ return true
+end
+
diff --git a/builtin/misc_helpers.lua b/builtin/common/misc_helpers.lua
index 9c7349726..9c7349726 100644
--- a/builtin/misc_helpers.lua
+++ b/builtin/common/misc_helpers.lua
diff --git a/builtin/serialize.lua b/builtin/common/serialize.lua
index 93fffe80d..93fffe80d 100644
--- a/builtin/serialize.lua
+++ b/builtin/common/serialize.lua
diff --git a/builtin/vector.lua b/builtin/common/vector.lua
index 77944b612..77944b612 100644
--- a/builtin/vector.lua
+++ b/builtin/common/vector.lua
diff --git a/builtin/auth.lua b/builtin/game/auth.lua
index b6cca609c..b6cca609c 100644
--- a/builtin/auth.lua
+++ b/builtin/game/auth.lua
diff --git a/builtin/chatcommands.lua b/builtin/game/chatcommands.lua
index f8df83d8e..f8df83d8e 100644
--- a/builtin/chatcommands.lua
+++ b/builtin/game/chatcommands.lua
diff --git a/builtin/deprecated.lua b/builtin/game/deprecated.lua
index d8b578d48..d8b578d48 100644
--- a/builtin/deprecated.lua
+++ b/builtin/game/deprecated.lua
diff --git a/builtin/detached_inventory.lua b/builtin/game/detached_inventory.lua
index 3757f1387..3757f1387 100644
--- a/builtin/detached_inventory.lua
+++ b/builtin/game/detached_inventory.lua
diff --git a/builtin/falling.lua b/builtin/game/falling.lua
index 7ac348bdb..93d17221a 100644
--- a/builtin/falling.lua
+++ b/builtin/game/falling.lua
@@ -4,7 +4,7 @@
-- Falling stuff
--
-minetest.register_entity("__builtin:falling_node", {
+minetest.register_entity(":__builtin:falling_node", {
initial_properties = {
physical = true,
collide_with_objects = false,
diff --git a/builtin/features.lua b/builtin/game/features.lua
index f3de3ba21..f3de3ba21 100644
--- a/builtin/features.lua
+++ b/builtin/game/features.lua
diff --git a/builtin/forceloading.lua b/builtin/game/forceloading.lua
index 84895792b..84895792b 100644
--- a/builtin/forceloading.lua
+++ b/builtin/game/forceloading.lua
diff --git a/builtin/game/init.lua b/builtin/game/init.lua
new file mode 100644
index 000000000..b878a2664
--- /dev/null
+++ b/builtin/game/init.lua
@@ -0,0 +1,23 @@
+
+local scriptpath = minetest.get_builtin_path()..DIR_DELIM
+local commonpath = scriptpath.."common"..DIR_DELIM
+local gamepath = scriptpath.."game"..DIR_DELIM
+
+dofile(commonpath.."vector.lua")
+
+dofile(gamepath.."item.lua")
+dofile(gamepath.."register.lua")
+dofile(gamepath.."item_entity.lua")
+dofile(gamepath.."deprecated.lua")
+dofile(gamepath.."misc.lua")
+dofile(gamepath.."privileges.lua")
+dofile(gamepath.."auth.lua")
+dofile(gamepath.."chatcommands.lua")
+dofile(gamepath.."static_spawn.lua")
+dofile(gamepath.."detached_inventory.lua")
+dofile(gamepath.."falling.lua")
+dofile(gamepath.."features.lua")
+dofile(gamepath.."voxelarea.lua")
+dofile(gamepath.."forceloading.lua")
+dofile(gamepath.."statbars.lua")
+
diff --git a/builtin/item.lua b/builtin/game/item.lua
index 002c14f5e..002c14f5e 100644
--- a/builtin/item.lua
+++ b/builtin/game/item.lua
diff --git a/builtin/item_entity.lua b/builtin/game/item_entity.lua
index 0dcc2dc2d..8150e6da1 100644
--- a/builtin/item_entity.lua
+++ b/builtin/game/item_entity.lua
@@ -8,7 +8,7 @@ function minetest.spawn_item(pos, item)
return obj
end
-minetest.register_entity("__builtin:item", {
+minetest.register_entity(":__builtin:item", {
initial_properties = {
hp_max = 1,
physical = true,
diff --git a/builtin/misc.lua b/builtin/game/misc.lua
index 82cc527cd..82cc527cd 100644
--- a/builtin/misc.lua
+++ b/builtin/game/misc.lua
diff --git a/builtin/privileges.lua b/builtin/game/privileges.lua
index 244aa453c..244aa453c 100644
--- a/builtin/privileges.lua
+++ b/builtin/game/privileges.lua
diff --git a/builtin/misc_register.lua b/builtin/game/register.lua
index 99c5115c4..99c5115c4 100644
--- a/builtin/misc_register.lua
+++ b/builtin/game/register.lua
diff --git a/builtin/statbars.lua b/builtin/game/statbars.lua
index ca656a974..ca656a974 100644
--- a/builtin/statbars.lua
+++ b/builtin/game/statbars.lua
diff --git a/builtin/static_spawn.lua b/builtin/game/static_spawn.lua
index e8c107d86..e8c107d86 100644
--- a/builtin/static_spawn.lua
+++ b/builtin/game/static_spawn.lua
diff --git a/builtin/voxelarea.lua b/builtin/game/voxelarea.lua
index 93bbf73a8..93bbf73a8 100644
--- a/builtin/voxelarea.lua
+++ b/builtin/game/voxelarea.lua
diff --git a/builtin/init.lua b/builtin/init.lua
new file mode 100644
index 000000000..9969111b8
--- /dev/null
+++ b/builtin/init.lua
@@ -0,0 +1,34 @@
+--
+-- This file contains built-in stuff in Minetest implemented in Lua.
+--
+-- It is always loaded and executed after registration of the C API,
+-- before loading and running any mods.
+--
+
+local core = minetest or engine
+minetest = core
+
+-- Initialize some very basic things
+print = core.debug
+math.randomseed(os.time())
+os.setlocale("C", "numeric")
+
+-- Load other files
+local scriptdir = core.get_builtin_path()..DIR_DELIM
+local gamepath = scriptdir.."game"..DIR_DELIM
+local commonpath = scriptdir.."common"..DIR_DELIM
+local asyncpath = scriptdir.."async"..DIR_DELIM
+
+dofile(commonpath.."serialize.lua")
+dofile(commonpath.."misc_helpers.lua")
+
+if INIT == "game" then
+ dofile(gamepath.."init.lua")
+elseif INIT == "mainmenu" then
+ dofile(core.get_mainmenu_path()..DIR_DELIM.."init.lua")
+elseif INIT == "async" then
+ dofile(asyncpath.."init.lua")
+else
+ error(("Unrecognized builtin initialization type %s!"):format(tostring(INIT)))
+end
+
diff --git a/builtin/filterlist.lua b/builtin/mainmenu/filterlist.lua
index 379a5cea9..379a5cea9 100644
--- a/builtin/filterlist.lua
+++ b/builtin/mainmenu/filterlist.lua
diff --git a/builtin/gamemgr.lua b/builtin/mainmenu/gamemgr.lua
index c99c2de21..c99c2de21 100644
--- a/builtin/gamemgr.lua
+++ b/builtin/mainmenu/gamemgr.lua
diff --git a/builtin/mainmenu.lua b/builtin/mainmenu/init.lua
index 67e0113bc..d78a668c5 100644
--- a/builtin/mainmenu.lua
+++ b/builtin/mainmenu/init.lua
@@ -1,8 +1,14 @@
-print = engine.debug
-math.randomseed(os.time())
-os.setlocale("C", "numeric")
-local scriptpath = engine.get_scriptdir()
+local menupath = engine.get_mainmenu_path()..DIR_DELIM
+local commonpath = engine.get_builtin_path()..DIR_DELIM.."common"..DIR_DELIM
+
+dofile(menupath.."filterlist.lua")
+dofile(menupath.."modmgr.lua")
+dofile(menupath.."modstore.lua")
+dofile(menupath.."gamemgr.lua")
+dofile(menupath.."textures.lua")
+dofile(menupath.."menubar.lua")
+dofile(commonpath.."async_event.lua")
mt_color_grey = "#AAAAAA"
mt_color_blue = "#0000DD"
@@ -11,15 +17,6 @@ mt_color_dark_green = "#003300"
--for all other colors ask sfan5 to complete his worK!
-dofile(scriptpath .. DIR_DELIM .. "misc_helpers.lua")
-dofile(scriptpath .. DIR_DELIM .. "filterlist.lua")
-dofile(scriptpath .. DIR_DELIM .. "modmgr.lua")
-dofile(scriptpath .. DIR_DELIM .. "modstore.lua")
-dofile(scriptpath .. DIR_DELIM .. "gamemgr.lua")
-dofile(scriptpath .. DIR_DELIM .. "mm_textures.lua")
-dofile(scriptpath .. DIR_DELIM .. "mm_menubar.lua")
-dofile(scriptpath .. DIR_DELIM .. "async_event.lua")
-
menu = {}
local tabbuilder = {}
local worldlist = nil
diff --git a/builtin/mm_menubar.lua b/builtin/mainmenu/menubar.lua
index 2e4d5f8b8..2e4d5f8b8 100644
--- a/builtin/mm_menubar.lua
+++ b/builtin/mainmenu/menubar.lua
diff --git a/builtin/modmgr.lua b/builtin/mainmenu/modmgr.lua
index eeb65add1..eeb65add1 100644
--- a/builtin/modmgr.lua
+++ b/builtin/mainmenu/modmgr.lua
diff --git a/builtin/modstore.lua b/builtin/mainmenu/modstore.lua
index ef7fd0165..ef7fd0165 100644
--- a/builtin/modstore.lua
+++ b/builtin/mainmenu/modstore.lua
diff --git a/builtin/mm_textures.lua b/builtin/mainmenu/textures.lua
index 998fc2199..998fc2199 100644
--- a/builtin/mm_textures.lua
+++ b/builtin/mainmenu/textures.lua
diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp
index 3c17e650e..945804ba8 100644
--- a/src/defaultsettings.cpp
+++ b/src/defaultsettings.cpp
@@ -269,9 +269,9 @@ void set_default_settings(Settings *settings)
settings->setDefault("enable_ipv6", "true");
settings->setDefault("ipv6_server", "false");
- settings->setDefault("main_menu_script","");
- settings->setDefault("main_menu_mod_mgr","1");
- settings->setDefault("main_menu_game_mgr","0");
+ settings->setDefault("main_menu_path", "");
+ settings->setDefault("main_menu_mod_mgr", "1");
+ settings->setDefault("main_menu_game_mgr", "0");
settings->setDefault("modstore_download_url", "https://forum.minetest.net/media/");
settings->setDefault("modstore_listmods_url", "https://forum.minetest.net/mmdb/mods/");
settings->setDefault("modstore_details_url", "https://forum.minetest.net/mmdb/mod/*/");
diff --git a/src/guiEngine.cpp b/src/guiEngine.cpp
index e32d629d0..ef018021e 100644
--- a/src/guiEngine.cpp
+++ b/src/guiEngine.cpp
@@ -169,17 +169,16 @@ GUIEngine::GUIEngine( irr::IrrlichtDevice* dev,
m_formspecgui = new FormspecFormSource("");
/* Create menu */
- m_menu =
- new GUIFormSpecMenu( m_device,
- m_parent,
- -1,
- m_menumanager,
- 0 /* &client */,
- 0 /* gamedef */,
- m_texture_source,
- m_formspecgui,
- m_buttonhandler,
- NULL);
+ m_menu = new GUIFormSpecMenu(m_device,
+ m_parent,
+ -1,
+ m_menumanager,
+ NULL /* &client */,
+ NULL /* gamedef */,
+ m_texture_source,
+ m_formspecgui,
+ m_buttonhandler,
+ NULL);
m_menu->allowClose(false);
m_menu->lockSize(true,v2u32(800,600));
@@ -216,43 +215,21 @@ GUIEngine::GUIEngine( irr::IrrlichtDevice* dev,
/******************************************************************************/
bool GUIEngine::loadMainMenuScript()
{
- // Try custom menu script (main_menu_script)
+ // Try custom menu script (main_menu_path)
- std::string menuscript = g_settings->get("main_menu_script");
- if(menuscript != "") {
- m_scriptdir = fs::RemoveLastPathComponent(menuscript);
-
- if(m_script->loadMod(menuscript, "__custommenu")) {
- // custom menu script loaded
- return true;
- }
- else {
- infostream
- << "GUIEngine: execution of custom menu: \""
- << menuscript << "\" failed!"
- << std::endl
- << "\tfalling back to builtin menu"
- << std::endl;
- }
+ m_scriptdir = g_settings->get("main_menu_path");
+ if (m_scriptdir.empty()) {
+ m_scriptdir = porting::path_share + DIR_DELIM "builtin" + DIR_DELIM "mainmenu";
}
- // Try builtin menu script (main_menu_script)
-
- std::string builtin_menuscript =
- porting::path_share + DIR_DELIM + "builtin"
- + DIR_DELIM + "mainmenu.lua";
-
- m_scriptdir = fs::RemoveRelativePathComponents(
- fs::RemoveLastPathComponent(builtin_menuscript));
-
- if(m_script->loadMod(builtin_menuscript, "__builtinmenu")) {
- // builtin menu script loaded
+ std::string script = porting::path_share + DIR_DELIM "builtin" + DIR_DELIM "init.lua";
+ if (m_script->loadScript(script)) {
+ // Menu script loaded
return true;
- }
- else {
- errorstream
- << "GUIEngine: unable to load builtin menu"
- << std::endl;
+ } else {
+ infostream
+ << "GUIEngine: execution of menu script in: \""
+ << m_scriptdir << "\" failed!" << std::endl;
}
return false;
diff --git a/src/script/cpp_api/s_async.cpp b/src/script/cpp_api/s_async.cpp
index 4feed3e56..64260fb3a 100644
--- a/src/script/cpp_api/s_async.cpp
+++ b/src/script/cpp_api/s_async.cpp
@@ -26,6 +26,7 @@ extern "C" {
#include "lualib.h"
}
+#include "server.h"
#include "s_async.h"
#include "log.h"
#include "filesys.h"
@@ -233,9 +234,9 @@ AsyncWorkerThread::AsyncWorkerThread(AsyncEngine* jobDispatcher,
lua_pushstring(L, DIR_DELIM);
lua_setglobal(L, "DIR_DELIM");
- lua_pushstring(L,
- (porting::path_share + DIR_DELIM + "builtin").c_str());
- lua_setglobal(L, "SCRIPTDIR");
+ // Push builtin initialization type
+ lua_pushstring(L, "async");
+ lua_setglobal(L, "INIT");
jobDispatcher->prepareEnvironment(L, top);
}
@@ -258,17 +259,16 @@ void* AsyncWorkerThread::Thread()
porting::setThreadName((std::string("AsyncWorkTh_") + number).c_str());
- std::string asyncscript = porting::path_share + DIR_DELIM + "builtin"
- + DIR_DELIM + "async_env.lua";
+ lua_State *L = getStack();
- if (!loadScript(asyncscript)) {
+ std::string script = getServer()->getBuiltinLuaPath() + DIR_DELIM + "init.lua";
+ if (!loadScript(script)) {
errorstream
<< "AsyncWorkderThread execution of async base environment failed!"
<< std::endl;
abort();
}
- lua_State *L = getStack();
// Main loop
while (!StopRequested()) {
// Wait for job
diff --git a/src/script/cpp_api/s_base.cpp b/src/script/cpp_api/s_base.cpp
index 774b3f51d..1a172fd31 100644
--- a/src/script/cpp_api/s_base.cpp
+++ b/src/script/cpp_api/s_base.cpp
@@ -88,9 +88,9 @@ ScriptApiBase::ScriptApiBase()
lua_pop(m_luastack, 1);
#endif
- m_server = 0;
- m_environment = 0;
- m_guiengine = 0;
+ m_server = NULL;
+ m_environment = NULL;
+ m_guiengine = NULL;
}
ScriptApiBase::~ScriptApiBase()
@@ -103,24 +103,14 @@ bool ScriptApiBase::loadMod(const std::string &scriptpath,
{
ModNameStorer modnamestorer(getStack(), modname);
- if(!string_allowed(modname, MODNAME_ALLOWED_CHARS)){
+ if (!string_allowed(modname, MODNAME_ALLOWED_CHARS)) {
errorstream<<"Error loading mod \""<<modname
<<"\": modname does not follow naming conventions: "
<<"Only chararacters [a-z0-9_] are allowed."<<std::endl;
return false;
}
- bool success = false;
-
- try{
- success = loadScript(scriptpath);
- }
- catch(LuaError &e){
- errorstream<<"Error loading mod \""<<modname
- <<"\": "<<e.what()<<std::endl;
- }
-
- return success;
+ return loadScript(scriptpath);
}
bool ScriptApiBase::loadScript(const std::string &scriptpath)
diff --git a/src/script/lua_api/l_mainmenu.cpp b/src/script/lua_api/l_mainmenu.cpp
index 8ee2069b1..226620fc6 100644
--- a/src/script/lua_api/l_mainmenu.cpp
+++ b/src/script/lua_api/l_mainmenu.cpp
@@ -885,7 +885,7 @@ int ModApiMainMenu::l_extract_zip(lua_State *L)
}
/******************************************************************************/
-int ModApiMainMenu::l_get_scriptdir(lua_State *L)
+int ModApiMainMenu::l_get_mainmenu_path(lua_State *L)
{
GUIEngine* engine = getGuiEngine(L);
assert(engine != 0);
@@ -1077,7 +1077,7 @@ void ModApiMainMenu::Initialize(lua_State *L, int top)
API_FCT(delete_dir);
API_FCT(copy_dir);
API_FCT(extract_zip);
- API_FCT(get_scriptdir);
+ API_FCT(get_mainmenu_path);
API_FCT(show_file_open_dialog);
API_FCT(get_version);
API_FCT(download_file);
diff --git a/src/script/lua_api/l_mainmenu.h b/src/script/lua_api/l_mainmenu.h
index b711f2f86..7a9cafd1f 100644
--- a/src/script/lua_api/l_mainmenu.h
+++ b/src/script/lua_api/l_mainmenu.h
@@ -107,7 +107,7 @@ private:
//filesystem
- static int l_get_scriptdir(lua_State *L);
+ static int l_get_mainmenu_path(lua_State *L);
static int l_get_modpath(lua_State *L);
diff --git a/src/script/lua_api/l_server.cpp b/src/script/lua_api/l_server.cpp
index 531d044ef..7770a5ff4 100644
--- a/src/script/lua_api/l_server.cpp
+++ b/src/script/lua_api/l_server.cpp
@@ -350,14 +350,8 @@ int ModApiServer::l_get_modpath(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
std::string modname = luaL_checkstring(L, 1);
- // Do it
- if(modname == "__builtin"){
- std::string path = getServer(L)->getBuiltinLuaPath();
- lua_pushstring(L, path.c_str());
- return 1;
- }
const ModSpec *mod = getServer(L)->getModSpec(modname);
- if(!mod){
+ if (!mod) {
lua_pushnil(L);
return 1;
}
diff --git a/src/script/lua_api/l_util.cpp b/src/script/lua_api/l_util.cpp
index f26a88a93..b30bab292 100644
--- a/src/script/lua_api/l_util.cpp
+++ b/src/script/lua_api/l_util.cpp
@@ -23,6 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "common/c_content.h"
#include "cpp_api/s_async.h"
#include "debug.h"
+#include "porting.h"
#include "log.h"
#include "tool.h"
#include "settings.h"
@@ -274,6 +275,14 @@ int ModApiUtil::l_is_yes(lua_State *L)
return 1;
}
+int ModApiUtil::l_get_builtin_path(lua_State *L)
+{
+ std::string path = porting::path_share + DIR_DELIM + "builtin";
+ lua_pushstring(L, path.c_str());
+ return 1;
+}
+
+
void ModApiUtil::Initialize(lua_State *L, int top)
{
API_FCT(debug);
@@ -294,6 +303,8 @@ void ModApiUtil::Initialize(lua_State *L, int top)
API_FCT(get_password_hash);
API_FCT(is_yes);
+
+ API_FCT(get_builtin_path);
}
void ModApiUtil::InitializeAsync(AsyncEngine& engine)
@@ -311,4 +322,7 @@ void ModApiUtil::InitializeAsync(AsyncEngine& engine)
ASYNC_API_FCT(write_json);
ASYNC_API_FCT(is_yes);
+
+ ASYNC_API_FCT(get_builtin_path);
}
+
diff --git a/src/script/lua_api/l_util.h b/src/script/lua_api/l_util.h
index 13357587a..d72978dc6 100644
--- a/src/script/lua_api/l_util.h
+++ b/src/script/lua_api/l_util.h
@@ -79,6 +79,9 @@ private:
// is_yes(arg)
static int l_is_yes(lua_State *L);
+ // get_scriptdir()
+ static int l_get_builtin_path(lua_State *L);
+
public:
static void Initialize(lua_State *L, int top);
diff --git a/src/script/scripting_game.cpp b/src/script/scripting_game.cpp
index b2c2150c6..fccd10722 100644
--- a/src/script/scripting_game.cpp
+++ b/src/script/scripting_game.cpp
@@ -18,6 +18,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
*/
#include "scripting_game.h"
+#include "server.h"
+#include "filesys.h"
#include "log.h"
#include "cpp_api/s_internal.h"
#include "lua_api/l_base.h"
@@ -54,6 +56,9 @@ GameScripting::GameScripting(Server* server)
SCRIPTAPI_PRECHECKHEADER
+ lua_pushstring(L, DIR_DELIM);
+ lua_setglobal(L, "DIR_DELIM");
+
// Create the main minetest table
lua_newtable(L);
lua_setglobal(L, "minetest");
@@ -70,6 +75,10 @@ GameScripting::GameScripting(Server* server)
InitializeModApi(L, top);
lua_pop(L, 1);
+ // Push builtin initialization type
+ lua_pushstring(L, "game");
+ lua_setglobal(L, "INIT");
+
infostream << "SCRIPTAPI: Initialized game modules" << std::endl;
}
diff --git a/src/script/scripting_mainmenu.cpp b/src/script/scripting_mainmenu.cpp
index dbf1fc45e..9afddd156 100644
--- a/src/script/scripting_mainmenu.cpp
+++ b/src/script/scripting_mainmenu.cpp
@@ -18,6 +18,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
*/
#include "scripting_mainmenu.h"
+#include "mods.h"
+#include "porting.h"
#include "log.h"
#include "filesys.h"
#include "cpp_api/s_internal.h"
@@ -58,6 +60,10 @@ MainMenuScripting::MainMenuScripting(GUIEngine* guiengine)
initializeModApi(L, top);
lua_pop(L, 1);
+ // Push builtin initialization type
+ lua_pushstring(L, "mainmenu");
+ lua_setglobal(L, "INIT");
+
infostream << "SCRIPTAPI: Initialized main menu modules" << std::endl;
}
diff --git a/src/server.cpp b/src/server.cpp
index ed99a7214..288f254ed 100644
--- a/src/server.cpp
+++ b/src/server.cpp
@@ -294,9 +294,6 @@ Server::Server(
errorstream << std::endl;
}
- // Path to builtin.lua
- std::string builtinpath = getBuiltinLuaPath() + DIR_DELIM + "builtin.lua";
-
// Lock environment
JMutexAutoLock envlock(m_env_mutex);
@@ -305,16 +302,13 @@ Server::Server(
m_script = new GameScripting(this);
+ std::string scriptpath = getBuiltinLuaPath() + DIR_DELIM "init.lua";
- // Load and run builtin.lua
- infostream<<"Server: Loading builtin.lua [\""
- <<builtinpath<<"\"]"<<std::endl;
- bool success = m_script->loadMod(builtinpath, "__builtin");
- if(!success){
- errorstream<<"Server: Failed to load and run "
- <<builtinpath<<std::endl;
- throw ModError("Failed to load and run "+builtinpath);
+ if (!m_script->loadScript(scriptpath)) {
+ throw ModError("Failed to load and run " + scriptpath);
}
+
+
// Print 'em
infostream<<"Server: Loading mods: ";
for(std::vector<ModSpec>::iterator i = m_mods.begin();