]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/server.h
Add ModStorageAPI to client side modding (#5396)
[dragonfireclient.git] / src / server.h
index e5121bdc30c2a0f7dd0f432f45c5daed0e043351..e1e8f84dc658d035c131d6b80f03b0a7a9f32b00 100644 (file)
@@ -53,7 +53,7 @@ class PlayerSAO;
 class IRollbackManager;
 struct RollbackAction;
 class EmergeManager;
-class GameScripting;
+class ServerScripting;
 class ServerEnvironment;
 struct SimpleSoundSpec;
 class ServerThread;
@@ -274,7 +274,7 @@ class Server : public con::PeerHandler, public MapEventReceiver,
        Inventory* createDetachedInventory(const std::string &name, const std::string &player="");
 
        // Envlock and conlock should be locked when using scriptapi
-       GameScripting *getScriptIface(){ return m_script; }
+       ServerScripting *getScriptIface(){ return m_script; }
 
        // actions: time-reversed list
        // Return value: success/failure
@@ -295,11 +295,12 @@ class Server : public con::PeerHandler, public MapEventReceiver,
        IWritableNodeDefManager* getWritableNodeDefManager();
        IWritableCraftDefManager* getWritableCraftDefManager();
 
-       const std::vector<ModSpec> &getMods() const { return m_mods; }
-       const ModSpec* getModSpec(const std::string &modname) const;
+       virtual const std::vector<ModSpec> &getMods() const { return m_mods; }
+       virtual const ModSpec* getModSpec(const std::string &modname) const;
        void getModNames(std::vector<std::string> &modlist);
        std::string getBuiltinLuaPath();
-       inline std::string getWorldPath() const { return m_path_world; }
+       virtual std::string getWorldPath() const { return m_path_world; }
+       virtual std::string getModStoragePath() const;
 
        inline bool isSingleplayer()
                        { return m_simple_singleplayer_mode; }
@@ -360,6 +361,9 @@ class Server : public con::PeerHandler, public MapEventReceiver,
        void SendInventory(PlayerSAO* playerSAO);
        void SendMovePlayer(u16 peer_id);
 
+       virtual bool registerModStorage(ModMetadata *storage);
+       virtual void unregisterModStorage(const std::string &name);
+
        // Bind address
        Address m_bind_addr;
 
@@ -536,7 +540,7 @@ class Server : public con::PeerHandler, public MapEventReceiver,
 
        // Scripting
        // Envlock and conlock should be locked when using Lua
-       GameScripting *m_script;
+       ServerScripting *m_script;
 
        // Item definition manager
        IWritableItemDefManager *m_itemdef;
@@ -576,7 +580,6 @@ class Server : public con::PeerHandler, public MapEventReceiver,
        float m_time_of_day_send_timer;
        // Uptime of server in seconds
        MutexedVariable<double> m_uptime;
-
        /*
         Client interface
         */
@@ -651,6 +654,9 @@ class Server : public con::PeerHandler, public MapEventReceiver,
        // value = "" (visible to all players) or player name
        std::map<std::string, std::string> m_detached_inventories_player;
 
+       UNORDERED_MAP<std::string, ModMetadata *> m_mod_storages;
+       float m_mod_storage_save_timer;
+
        DISABLE_CLASS_COPY(Server);
 };