InventoryItem* InventoryItem::deSerialize(std::istream &is) { DSTACK(__FUNCTION_NAME); //is.imbue(std::locale("C")); // Read name std::string name; std::getline(is, name, ' '); if(name == "MaterialItem") { // u16 reads directly as a number (u8 doesn't) u16 material; is>>material; u16 count; is>>count; // Convert old materials if(material <= 0xff) { material = content_translate_from_19_to_internal(material); } if(material > MAX_CONTENT) throw SerializationError("Too large material number"); return new MaterialItem(material, count); }
void ItemStack::deSerialize(std::istream &is, IItemDefManager *itemdef) { DSTACK(__FUNCTION_NAME); clear(); // Read name name = deSerializeJsonStringIfNeeded(is); // Skip space std::string tmp; std::getline(is, tmp, ' '); if(!tmp.empty()) throw SerializationError("Unexpected text after item name"); if(name == "MaterialItem") { // Obsoleted on 2011-07-30 u16 material; is>>material; u16 materialcount; is>>materialcount; // Convert old materials if(material <= 0xff) material = content_translate_from_19_to_internal(material); if(material > 0xfff) throw SerializationError("Too large material number"); // Convert old id to name NameIdMapping legacy_nimap; content_mapnode_get_name_id_mapping(&legacy_nimap); legacy_nimap.getName(material, name); if(name == "") name = "unknown_block"; if (itemdef) name = itemdef->getAlias(name); count = materialcount; }