]> git.lizzy.rs Git - minetest.git/blobdiff - src/nodemetadata.h
Random Lua tweaks/fixes
[minetest.git] / src / nodemetadata.h
index de682f9b61561374a92ef80769e33f47ab335295..9eb08678ad381be42d2655b3d6b1160278200607 100644 (file)
@@ -25,34 +25,31 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include <iostream>
 
 /*
-       Used for storing:
+       NodeMetadata stores arbitary amounts of data for special blocks.
+       Used for furnaces, chests and signs.
 
-       Oven:
-               - Item that is being burned
-               - Burning time
-               - Item stack that is being heated
-               - Result item stack
-       
-       Sign:
-               - Text
+       There are two interaction methods: inventory menu and text input.
+       Only one can be used for a single metadata, thus only inventory OR
+       text input should exist in a metadata.
 */
 
 class Inventory;
+class IGameDef;
 
 class NodeMetadata
 {
 public:
-       typedef NodeMetadata* (*Factory)(std::istream&);
+       typedef NodeMetadata* (*Factory)(std::istream&, IGameDef *gamedef);
 
-       NodeMetadata();
+       NodeMetadata(IGameDef *gamedef);
        virtual ~NodeMetadata();
        
-       static NodeMetadata* deSerialize(std::istream &is);
+       static NodeMetadata* deSerialize(std::istream &is, IGameDef *gamedef);
        void serialize(std::ostream &os);
        
        // This usually is the CONTENT_ value
        virtual u16 typeId() const = 0;
-       virtual NodeMetadata* clone() = 0;
+       virtual NodeMetadata* clone(IGameDef *gamedef) = 0;
        virtual void serializeBody(std::ostream &os) = 0;
        virtual std::string infoText() {return "";}
        virtual Inventory* getInventory() {return NULL;}
@@ -65,9 +62,15 @@ class NodeMetadata
        // Used to make custom inventory menus.
        // See format in guiInventoryMenu.cpp.
        virtual std::string getInventoryDrawSpecString(){return "";}
-
+       // primarily used for locking chests, but others can play too
+       virtual std::string getOwner(){ return std::string(""); }
+       virtual void setOwner(std::string t){}
+       virtual bool allowsTextInput(){ return false; }
+       virtual std::string getText(){ return ""; }
+       virtual void setText(const std::string &t){}
 protected:
        static void registerType(u16 id, Factory f);
+       IGameDef *m_gamedef;
 private:
        static core::map<u16, Factory> m_types;
 };
@@ -82,7 +85,7 @@ class NodeMetadataList
        ~NodeMetadataList();
 
        void serialize(std::ostream &os);
-       void deSerialize(std::istream &is);
+       void deSerialize(std::istream &is, IGameDef *gamedef);
        
        // Get pointer to data
        NodeMetadata* get(v3s16 p);