mirror of
https://github.com/luanti-org/luanti.git
synced 2025-06-27 16:36:03 +00:00
In 99% of the cases, this behaviour is identical to before. With this commit, it is again possible to have 'builtin' a symlink that e.g. points to the engine source directory, which is helpful for development purposes.
70 lines
1.9 KiB
C++
70 lines
1.9 KiB
C++
// Luanti
|
|
// SPDX-License-Identifier: LGPL-2.1-or-later
|
|
// Copyright (C) 2025 grorp
|
|
|
|
#include "scripting_pause_menu.h"
|
|
#include "client/client.h"
|
|
#include "cpp_api/s_internal.h"
|
|
#include "filesys.h"
|
|
#include "lua_api/l_client_common.h"
|
|
#include "lua_api/l_menu_common.h"
|
|
#include "lua_api/l_pause_menu.h"
|
|
#include "lua_api/l_settings.h"
|
|
#include "lua_api/l_util.h"
|
|
#include "porting.h"
|
|
|
|
PauseMenuScripting::PauseMenuScripting(Client *client):
|
|
ScriptApiBase(ScriptingType::PauseMenu)
|
|
{
|
|
setGameDef(client);
|
|
|
|
SCRIPTAPI_PRECHECKHEADER
|
|
|
|
initializeSecurity();
|
|
|
|
lua_getglobal(L, "core");
|
|
int top = lua_gettop(L);
|
|
|
|
// Initialize our lua_api modules
|
|
initializeModApi(L, top);
|
|
lua_pop(L, 1);
|
|
|
|
// Push builtin initialization type
|
|
lua_pushstring(L, "pause_menu");
|
|
lua_setglobal(L, "INIT");
|
|
|
|
infostream << "SCRIPTAPI: Initialized pause menu modules" << std::endl;
|
|
}
|
|
|
|
void PauseMenuScripting::initializeModApi(lua_State *L, int top)
|
|
{
|
|
// Register reference classes (userdata)
|
|
LuaSettings::Register(L);
|
|
|
|
// Initialize mod API modules
|
|
ModApiPauseMenu::Initialize(L, top);
|
|
ModApiMenuCommon::Initialize(L, top);
|
|
ModApiClientCommon::Initialize(L, top);
|
|
ModApiUtil::Initialize(L, top);
|
|
}
|
|
|
|
void PauseMenuScripting::loadBuiltin()
|
|
{
|
|
loadScript(Client::getBuiltinLuaPath() + DIR_DELIM "init.lua");
|
|
checkSetByBuiltin();
|
|
}
|
|
|
|
bool PauseMenuScripting::checkPathInternal(const std::string &abs_path, bool write_required,
|
|
bool *write_allowed)
|
|
{
|
|
// NOTE: The pause menu env is on the same level of trust as the mainmenu env.
|
|
// However, since it doesn't need anything else at the moment, there's no
|
|
// reason to give it access to anything else.
|
|
// See also: `MainMenuScripting::mayModifyPath` for similar, but less restricted checks.
|
|
|
|
if (write_required)
|
|
return false;
|
|
|
|
std::string path_builtin = fs::AbsolutePath(Client::getBuiltinLuaPath());
|
|
return !path_builtin.empty() && fs::PathStartsWith(abs_path, path_builtin);
|
|
}
|