-#include "content_mapnode.h"
-
-/*
- SignNodeMetadata
-*/
-
-// Prototype
-SignNodeMetadata proto_SignNodeMetadata("");
-
-SignNodeMetadata::SignNodeMetadata(std::string text):
- m_text(text)
-{
- NodeMetadata::registerType(typeId(), create);
-}
-u16 SignNodeMetadata::typeId() const
-{
- return CONTENT_SIGN_WALL;
-}
-NodeMetadata* SignNodeMetadata::create(std::istream &is)
-{
- std::string text = deSerializeString(is);
- return new SignNodeMetadata(text);
-}
-NodeMetadata* SignNodeMetadata::clone()
-{
- return new SignNodeMetadata(m_text);
-}
-void SignNodeMetadata::serializeBody(std::ostream &os)
-{
- os<<serializeString(m_text);
-}
-std::string SignNodeMetadata::infoText()
-{
- return std::string("\"")+m_text+"\"";
-}
-
-/*
- ChestNodeMetadata
-*/
-
-// Prototype
-ChestNodeMetadata proto_ChestNodeMetadata;
-
-ChestNodeMetadata::ChestNodeMetadata()
-{
- NodeMetadata::registerType(typeId(), create);
-
- m_inventory = new Inventory();
- m_inventory->addList("0", 8*4);
-}
-ChestNodeMetadata::~ChestNodeMetadata()
-{
- delete m_inventory;
-}
-u16 ChestNodeMetadata::typeId() const
-{
- return CONTENT_CHEST;
-}
-NodeMetadata* ChestNodeMetadata::create(std::istream &is)
-{
- ChestNodeMetadata *d = new ChestNodeMetadata();
- d->m_inventory->deSerialize(is);
- return d;
-}
-NodeMetadata* ChestNodeMetadata::clone()
-{
- ChestNodeMetadata *d = new ChestNodeMetadata();
- *d->m_inventory = *m_inventory;
- return d;
-}
-void ChestNodeMetadata::serializeBody(std::ostream &os)
-{
- m_inventory->serialize(os);
-}
-std::string ChestNodeMetadata::infoText()
-{
- return "Chest";
-}
-bool ChestNodeMetadata::nodeRemovalDisabled()
-{
- /*
- Disable removal if chest contains something
- */
- InventoryList *list = m_inventory->getList("0");
- if(list == NULL)
- return false;
- if(list->getUsedSlots() == 0)
- return false;
- return true;
-}
-std::string ChestNodeMetadata::getInventoryDrawSpecString()
-{
- return
- "invsize[8,9;]"
- "list[current_name;0;0,0;8,4;]"
- "list[current_player;main;0,5;8,4;]";
-}
-
-/*
- LockingChestNodeMetadata
-*/
-
-// Prototype
-LockingChestNodeMetadata proto_LockingChestNodeMetadata;
-
-LockingChestNodeMetadata::LockingChestNodeMetadata()
-{
- NodeMetadata::registerType(typeId(), create);
-
- m_inventory = new Inventory();
- m_inventory->addList("0", 8*4);
-}
-LockingChestNodeMetadata::~LockingChestNodeMetadata()
-{
- delete m_inventory;
-}
-u16 LockingChestNodeMetadata::typeId() const
-{
- return CONTENT_LOCKABLE_CHEST;
-}
-NodeMetadata* LockingChestNodeMetadata::create(std::istream &is)
-{
- LockingChestNodeMetadata *d = new LockingChestNodeMetadata();
- d->setOwner(deSerializeString(is));
- d->m_inventory->deSerialize(is);
- return d;
-}
-NodeMetadata* LockingChestNodeMetadata::clone()
-{
- LockingChestNodeMetadata *d = new LockingChestNodeMetadata();
- *d->m_inventory = *m_inventory;
- return d;
-}
-void LockingChestNodeMetadata::serializeBody(std::ostream &os)
-{
- os<<serializeString(m_text);
- m_inventory->serialize(os);
-}
-std::string LockingChestNodeMetadata::infoText()
-{
- return "Locking Chest";
-}
-bool LockingChestNodeMetadata::nodeRemovalDisabled()
-{
- /*
- Disable removal if chest contains something
- */
- InventoryList *list = m_inventory->getList("0");
- if(list == NULL)
+#include "log.h"
+#include "serialization.h"
+#include "util/serialize.h"
+#include "util/string.h"
+#include "constants.h" // MAP_BLOCKSIZE
+#include <sstream>
+
+#define NODEMETA_GENERIC 1
+#define NODEMETA_SIGN 14
+#define NODEMETA_CHEST 15
+#define NODEMETA_FURNACE 16
+#define NODEMETA_LOCKABLE_CHEST 17
+
+// Returns true if node timer must be set
+static bool content_nodemeta_deserialize_legacy_body(
+ std::istream &is, s16 id, NodeMetadata *meta)
+{
+ meta->clear();
+
+ if(id == NODEMETA_GENERIC) // GenericNodeMetadata (0.4-dev)
+ {
+ meta->getInventory()->deSerialize(is);
+ deSerializeLongString(is); // m_text
+ deSerializeString(is); // m_owner
+
+ meta->setString("infotext",deSerializeString(is));
+ meta->setString("formspec",deSerializeString(is));
+ readU8(is); // m_allow_text_input
+ readU8(is); // m_allow_removal
+ readU8(is); // m_enforce_owner
+
+ int num_vars = readU32(is);
+ for(int i=0; i<num_vars; i++){
+ std::string name = deSerializeString(is);
+ std::string var = deSerializeLongString(is);
+ meta->setString(name, var);
+ }