]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/server.h
Add ModStorageAPI to client side modding (#5396)
[dragonfireclient.git] / src / server.h
index 9a8d22b2eb4cc42e309e6be44ef52db436486ad2..e1e8f84dc658d035c131d6b80f03b0a7a9f32b00 100644 (file)
@@ -26,13 +26,14 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "hud.h"
 #include "gamedef.h"
 #include "serialization.h" // For SER_FMT_VER_INVALID
-#include "nodedef.h" // AnimationType
 #include "mods.h"
 #include "inventorymanager.h"
 #include "subgame.h"
+#include "tileanimation.h" // struct TileAnimationParams
 #include "util/numeric.h"
 #include "util/thread.h"
-#include "environment.h"
+#include "util/basic_macros.h"
+#include "serverenvironment.h"
 #include "chat_interface.h"
 #include "clientiface.h"
 #include "remoteplayer.h"
@@ -42,8 +43,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include <map>
 #include <vector>
 
-#define PP(x) "("<<(x).X<<","<<(x).Y<<","<<(x).Z<<")"
-
 class IWritableItemDefManager;
 class IWritableNodeDefManager;
 class IWritableCraftDefManager;
@@ -54,7 +53,7 @@ class PlayerSAO;
 class IRollbackManager;
 struct RollbackAction;
 class EmergeManager;
-class GameScripting;
+class ServerScripting;
 class ServerEnvironment;
 struct SimpleSoundSpec;
 class ServerThread;
@@ -182,7 +181,6 @@ class Server : public con::PeerHandler, public MapEventReceiver,
        void handleCommand_InventoryAction(NetworkPacket* pkt);
        void handleCommand_ChatMessage(NetworkPacket* pkt);
        void handleCommand_Damage(NetworkPacket* pkt);
-       void handleCommand_Breath(NetworkPacket* pkt);
        void handleCommand_Password(NetworkPacket* pkt);
        void handleCommand_PlayerItem(NetworkPacket* pkt);
        void handleCommand_Respawn(NetworkPacket* pkt);
@@ -256,10 +254,7 @@ class Server : public con::PeerHandler, public MapEventReceiver,
                float expirationtime, float size,
                bool collisiondetection, bool collision_removal,
                bool vertical, const std::string &texture,
-               u32 material_type_param,  AnimationType animation_type, 
-               u16 vertical_frame_num, u16 horizontal_frame_num, u16 first_frame,
-               float frame_length, bool loop_animation,
-               u8 glow);
+               const struct TileAnimationParams &animation, u8 glow);
 
        u32 addParticleSpawner(u16 amount, float spawntime,
                v3f minpos, v3f maxpos,
@@ -270,20 +265,16 @@ class Server : public con::PeerHandler, public MapEventReceiver,
                bool collisiondetection, bool collision_removal,
                ServerActiveObject *attached,
                bool vertical, const std::string &texture,
-               const std::string &playername,
-               u32 material_type_param,  AnimationType animation_type, 
-               u16 vertical_frame_num, u16 horizontal_frame_num, 
-               u16 min_first_frame, u16 max_first_frame, 
-               float frame_length, bool loop_animation,
+               const std::string &playername, const struct TileAnimationParams &animation,
                u8 glow);
 
        void deleteParticleSpawner(const std::string &playername, u32 id);
 
        // Creates or resets inventory
-       Inventory* createDetachedInventory(const std::string &name);
+       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,23 +286,21 @@ class Server : public con::PeerHandler, public MapEventReceiver,
        virtual IItemDefManager* getItemDefManager();
        virtual INodeDefManager* getNodeDefManager();
        virtual ICraftDefManager* getCraftDefManager();
-       virtual ITextureSource* getTextureSource();
-       virtual IShaderSource* getShaderSource();
        virtual u16 allocateUnknownNodeId(const std::string &name);
-       virtual ISoundManager* getSoundManager();
        virtual MtEventManager* getEventManager();
-       virtual scene::ISceneManager* getSceneManager();
-       virtual IRollbackManager *getRollbackManager() { return m_rollback; }
+       IRollbackManager *getRollbackManager() { return m_rollback; }
        virtual EmergeManager *getEmergeManager() { return m_emerge; }
 
        IWritableItemDefManager* getWritableItemDefManager();
        IWritableNodeDefManager* getWritableNodeDefManager();
        IWritableCraftDefManager* getWritableCraftDefManager();
 
-       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; }
@@ -368,10 +357,13 @@ class Server : public con::PeerHandler, public MapEventReceiver,
        void printToConsoleOnly(const std::string &text);
 
        void SendPlayerHPOrDie(PlayerSAO *player);
-       void SendPlayerBreath(u16 peer_id);
+       void SendPlayerBreath(PlayerSAO *sao);
        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;
 
@@ -443,7 +435,8 @@ class Server : public con::PeerHandler, public MapEventReceiver,
        void sendDetachedInventories(u16 peer_id);
 
        // Adds a ParticleSpawner on peer with peer_id (PEER_ID_INEXISTENT == all)
-       void SendAddParticleSpawner(u16 peer_id, u16 amount, float spawntime,
+       void SendAddParticleSpawner(u16 peer_id, u16 protocol_version,
+               u16 amount, float spawntime,
                v3f minpos, v3f maxpos,
                v3f minvel, v3f maxvel,
                v3f minacc, v3f maxacc,
@@ -452,24 +445,17 @@ class Server : public con::PeerHandler, public MapEventReceiver,
                bool collisiondetection, bool collision_removal,
                u16 attached_id,
                bool vertical, const std::string &texture, u32 id,
-               u32 material_type_param,  AnimationType animation_type, 
-               u16 vertical_frame_num, u16 horizontal_frame_num, 
-               u16 min_first_frame, u16 max_first_frame, 
-               float frame_length, bool loop_animation,
-               u8 glow);
+               const struct TileAnimationParams &animation, u8 glow);
 
        void SendDeleteParticleSpawner(u16 peer_id, u32 id);
 
        // Spawns particle on peer with peer_id (PEER_ID_INEXISTENT == all)
-       void SendSpawnParticle(u16 peer_id,
+       void SendSpawnParticle(u16 peer_id, u16 protocol_version,
                v3f pos, v3f velocity, v3f acceleration,
                float expirationtime, float size,
                bool collisiondetection, bool collision_removal,
                bool vertical, const std::string &texture,
-               u32 material_type_param,  AnimationType animation_type, 
-               u16 vertical_frame_num, u16 horizontal_frame_num, u16 first_frame,
-               float frame_length, bool loop_animation,
-               u8 glow);
+               const struct TileAnimationParams &animation, u8 glow);
 
        u32 SendActiveObjectRemoveAdd(u16 peer_id, const std::string &datas);
        void SendActiveObjectMessages(u16 peer_id, const std::string &datas, bool reliable = true);
@@ -554,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;
@@ -594,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
         */
@@ -666,6 +651,11 @@ class Server : public con::PeerHandler, public MapEventReceiver,
        */
        // key = name
        std::map<std::string, Inventory*> m_detached_inventories;
+       // 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);
 };