-// Prototype
-ChestNodeMetadata proto_ChestNodeMetadata(NULL);
-
-ChestNodeMetadata::ChestNodeMetadata(IGameDef *gamedef):
- NodeMetadata(gamedef)
-{
- 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, IGameDef *gamedef)
-{
- ChestNodeMetadata *d = new ChestNodeMetadata(gamedef);
- d->m_inventory->deSerialize(is, gamedef);
- return d;
-}
-NodeMetadata* ChestNodeMetadata::clone(IGameDef *gamedef)
-{
- ChestNodeMetadata *d = new ChestNodeMetadata(gamedef);
- *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(NULL);
-
-LockingChestNodeMetadata::LockingChestNodeMetadata(IGameDef *gamedef):
- NodeMetadata(gamedef)
-{
- 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, IGameDef *gamedef)
-{
- LockingChestNodeMetadata *d = new LockingChestNodeMetadata(gamedef);
- d->setOwner(deSerializeString(is));
- d->m_inventory->deSerialize(is, gamedef);
- return d;
-}
-NodeMetadata* LockingChestNodeMetadata::clone(IGameDef *gamedef)
-{
- LockingChestNodeMetadata *d = new LockingChestNodeMetadata(gamedef);
- *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)
+ 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);
+ }