From 2b0adaea879c359d34693399a542e899ff58e0c6 Mon Sep 17 00:00:00 2001 From: Jude Melton-Houghton Date: Fri, 22 Jul 2022 11:50:23 -0400 Subject: [PATCH] Remove (un)registerModStorage It is no longer necessary to keep just one object per mod, since data is no longer stored in these objects. Now one can obtain multiple distinct references with core.get_mod_storage, but this will be changed by PR #12572. One can test like so: local a = core.get_mod_storage() local b = core.get_mod_storage() a:set_string("!", "?") assert(b:get("!") == "?") --- src/client/client.cpp | 20 -------------------- src/client/client.h | 4 ---- src/gamedef.h | 2 -- src/script/lua_api/l_storage.cpp | 22 ++++------------------ src/server.cpp | 19 ------------------- src/server.h | 4 ---- src/unittest/test.cpp | 2 -- 7 files changed, 4 insertions(+), 69 deletions(-) diff --git a/src/client/client.cpp b/src/client/client.cpp index 31bbf24635d8a..18a18d9ef6b5a 100644 --- a/src/client/client.cpp +++ b/src/client/client.cpp @@ -1989,26 +1989,6 @@ const std::string* Client::getModFile(std::string filename) return &it->second; } -bool Client::registerModStorage(ModMetadata *storage) -{ - if (m_mod_storages.find(storage->getModName()) != m_mod_storages.end()) { - errorstream << "Unable to register same mod storage twice. Storage name: " - << storage->getModName() << std::endl; - return false; - } - - m_mod_storages[storage->getModName()] = storage; - return true; -} - -void Client::unregisterModStorage(const std::string &name) -{ - std::unordered_map::const_iterator it = - m_mod_storages.find(name); - if (it != m_mod_storages.end()) - m_mod_storages.erase(name); -} - /* * Mod channels */ diff --git a/src/client/client.h b/src/client/client.h index bdcc2a3dda0bc..4342a0087462e 100644 --- a/src/client/client.h +++ b/src/client/client.h @@ -383,9 +383,6 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef const std::string* getModFile(std::string filename); ModMetadataDatabase *getModStorageDatabase() override { return m_mod_storage_database; } - bool registerModStorage(ModMetadata *meta) override; - void unregisterModStorage(const std::string &name) override; - // Migrates away old files-based mod storage if necessary void migrateModStorage(); @@ -593,7 +590,6 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef // Client modding ClientScripting *m_script = nullptr; - std::unordered_map m_mod_storages; ModMetadataDatabase *m_mod_storage_database = nullptr; float m_mod_storage_save_timer = 10.0f; std::vector m_mods; diff --git a/src/gamedef.h b/src/gamedef.h index 45b9c475011d4..690ff12573a3c 100644 --- a/src/gamedef.h +++ b/src/gamedef.h @@ -73,8 +73,6 @@ class IGameDef virtual const std::vector &getMods() const = 0; virtual const ModSpec* getModSpec(const std::string &modname) const = 0; virtual std::string getWorldPath() const { return ""; } - virtual bool registerModStorage(ModMetadata *storage) = 0; - virtual void unregisterModStorage(const std::string &name) = 0; virtual ModMetadataDatabase *getModStorageDatabase() = 0; virtual bool joinModChannel(const std::string &channel) = 0; diff --git a/src/script/lua_api/l_storage.cpp b/src/script/lua_api/l_storage.cpp index 923e6c2963d22..ee5ca18a92707 100644 --- a/src/script/lua_api/l_storage.cpp +++ b/src/script/lua_api/l_storage.cpp @@ -28,23 +28,12 @@ int ModApiStorage::l_get_mod_storage(lua_State *L) // Note that this is wrapped in Lua, see builtin/common/mod_storage.lua std::string mod_name = readParam(L, 1); - ModMetadata *store = nullptr; - - if (IGameDef *gamedef = getGameDef(L)) { - store = new ModMetadata(mod_name, gamedef->getModStorageDatabase()); - if (gamedef->registerModStorage(store)) { - StorageRef::create(L, store); - int object = lua_gettop(L); - lua_pushvalue(L, object); - return 1; - } - } else { + if (IGameDef *gamedef = getGameDef(L)) + StorageRef::create(L, new ModMetadata(mod_name, gamedef->getModStorageDatabase())); + else { assert(false); // this should not happen + lua_pushnil(L); } - - delete store; - - lua_pushnil(L); return 1; } @@ -74,9 +63,6 @@ void StorageRef::create(lua_State *L, ModMetadata *object) int StorageRef::gc_object(lua_State *L) { StorageRef *o = *(StorageRef **)(lua_touserdata(L, 1)); - // Server side - if (IGameDef *gamedef = getGameDef(L)) - gamedef->unregisterModStorage(getobject(o)->getModName()); delete o; return 0; } diff --git a/src/server.cpp b/src/server.cpp index 93767da9d1ff1..178d1c7ae32c9 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -3888,25 +3888,6 @@ PlayerSAO* Server::emergePlayer(const char *name, session_t peer_id, u16 proto_v return playersao; } -bool Server::registerModStorage(ModMetadata *storage) -{ - if (m_mod_storages.find(storage->getModName()) != m_mod_storages.end()) { - errorstream << "Unable to register same mod storage twice. Storage name: " - << storage->getModName() << std::endl; - return false; - } - - m_mod_storages[storage->getModName()] = storage; - return true; -} - -void Server::unregisterModStorage(const std::string &name) -{ - std::unordered_map::const_iterator it = m_mod_storages.find(name); - if (it != m_mod_storages.end()) - m_mod_storages.erase(name); -} - void dedicated_server_loop(Server &server, bool &kill) { verbosestream<<"dedicated_server_loop()"< m_mod_storages; ModMetadataDatabase *m_mod_storage_database = nullptr; float m_mod_storage_save_timer = 10.0f; diff --git a/src/unittest/test.cpp b/src/unittest/test.cpp index af30c209dba10..1867f9d64d125 100644 --- a/src/unittest/test.cpp +++ b/src/unittest/test.cpp @@ -70,8 +70,6 @@ class TestGameDef : public IGameDef { return testmodspec; } virtual const ModSpec* getModSpec(const std::string &modname) const { return NULL; } - virtual bool registerModStorage(ModMetadata *meta) { return true; } - virtual void unregisterModStorage(const std::string &name) {} bool joinModChannel(const std::string &channel); bool leaveModChannel(const std::string &channel); bool sendModChannelMessage(const std::string &channel, const std::string &message);