From c5834d14c0e81a29968d25c4b1d41f858703f529 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Sat, 20 Apr 2024 19:11:50 +0200 Subject: [PATCH] Clean up some getServer() unsafety --- src/script/cpp_api/s_base.cpp | 4 ++-- src/script/scripting_emerge.cpp | 13 +++++++++---- src/script/scripting_server.cpp | 6 ++++-- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/script/cpp_api/s_base.cpp b/src/script/cpp_api/s_base.cpp index 7731de7a7..fd1501ddf 100644 --- a/src/script/cpp_api/s_base.cpp +++ b/src/script/cpp_api/s_base.cpp @@ -541,8 +541,8 @@ Server* ScriptApiBase::getServer() { // Since the gamedef is the server it's still possible to retrieve it in // e.g. the async environment, but this isn't meant to happen. - // TODO: still needs work - //assert(getType() == ScriptingType::Server); + if (getType() != ScriptingType::Server) + return nullptr; return dynamic_cast(m_gamedef); } diff --git a/src/script/scripting_emerge.cpp b/src/script/scripting_emerge.cpp index 3467b1495..3405c350c 100644 --- a/src/script/scripting_emerge.cpp +++ b/src/script/scripting_emerge.cpp @@ -56,10 +56,15 @@ EmergeScripting::EmergeScripting(EmergeThread *parent): InitializeModApi(L, top); - auto *data = ModApiBase::getServer(L)->m_lua_globals_data.get(); - assert(data); - script_unpack(L, data); - lua_setfield(L, top, "transferred_globals"); + // pull the globals data from the server + { + auto *server = dynamic_cast(ModApiBase::getGameDef(L)); + assert(server); + auto *data = server->m_lua_globals_data.get(); + assert(data); + script_unpack(L, data); + lua_setfield(L, top, "transferred_globals"); + } lua_pop(L, 1); diff --git a/src/script/scripting_server.cpp b/src/script/scripting_server.cpp index 324850011..95ff8439e 100644 --- a/src/script/scripting_server.cpp +++ b/src/script/scripting_server.cpp @@ -192,8 +192,10 @@ void ServerScripting::InitializeAsync(lua_State *L, int top) LuaVoxelManip::Register(L); LuaSettings::Register(L); - // globals data - auto *data = ModApiBase::getServer(L)->m_lua_globals_data.get(); + // pull the globals data from the server + auto *server = dynamic_cast(ModApiBase::getGameDef(L)); + assert(server); + auto *data = server->m_lua_globals_data.get(); assert(data); script_unpack(L, data); lua_setfield(L, top, "transferred_globals");