nimap->set(CONTENT_AIR, "air");
}
-class NewNameGetter
-{
-public:
- NewNameGetter()
- {
- old_to_new["CONTENT_STONE"] = "default:stone";
- old_to_new["CONTENT_WATER"] = "default:water_flowing";
- old_to_new["CONTENT_TORCH"] = "default:torch";
- old_to_new["CONTENT_WATERSOURCE"] = "default:water_source";
- old_to_new["CONTENT_SIGN_WALL"] = "default:sign_wall";
- old_to_new["CONTENT_CHEST"] = "default:chest";
- old_to_new["CONTENT_FURNACE"] = "default:furnace";
- old_to_new["CONTENT_LOCKABLE_CHEST"] = "default:locked_chest";
- old_to_new["CONTENT_FENCE"] = "default:wooden_fence";
- old_to_new["CONTENT_RAIL"] = "default:rail";
- old_to_new["CONTENT_LADDER"] = "default:ladder";
- old_to_new["CONTENT_LAVA"] = "default:lava_flowing";
- old_to_new["CONTENT_LAVASOURCE"] = "default:lava_source";
- old_to_new["CONTENT_GRASS"] = "default:dirt_with_grass";
- old_to_new["CONTENT_TREE"] = "default:tree";
- old_to_new["CONTENT_LEAVES"] = "default:leaves";
- old_to_new["CONTENT_GRASS_FOOTSTEPS"] = "default:dirt_with_grass_footsteps";
- old_to_new["CONTENT_MESE"] = "default:mese";
- old_to_new["CONTENT_MUD"] = "default:dirt";
- old_to_new["CONTENT_CLOUD"] = "default:cloud";
- old_to_new["CONTENT_COALSTONE"] = "default:coalstone";
- old_to_new["CONTENT_WOOD"] = "default:wood";
- old_to_new["CONTENT_SAND"] = "default:sand";
- old_to_new["CONTENT_COBBLE"] = "default:cobble";
- old_to_new["CONTENT_STEEL"] = "default:steel";
- old_to_new["CONTENT_GLASS"] = "default:glass";
- old_to_new["CONTENT_MOSSYCOBBLE"] = "default:mossycobble";
- old_to_new["CONTENT_GRAVEL"] = "default:gravel";
- old_to_new["CONTENT_SANDSTONE"] = "default:sandstone";
- old_to_new["CONTENT_CACTUS"] = "default:cactus";
- old_to_new["CONTENT_BRICK"] = "default:brick";
- old_to_new["CONTENT_CLAY"] = "default:clay";
- old_to_new["CONTENT_PAPYRUS"] = "default:papyrus";
- old_to_new["CONTENT_BOOKSHELF"] = "default:bookshelf";
- old_to_new["CONTENT_JUNGLETREE"] = "default:jungletree";
- old_to_new["CONTENT_JUNGLEGRASS"] = "default:junglegrass";
- old_to_new["CONTENT_NC"] = "default:nyancat";
- old_to_new["CONTENT_NC_RB"] = "default:nyancat_rainbow";
- old_to_new["CONTENT_APPLE"] = "default:apple";
- old_to_new["CONTENT_SAPLING"] = "default:sapling";
- // Just in case
- old_to_new["CONTENT_IGNORE"] = "ignore";
- old_to_new["CONTENT_AIR"] = "air";
- }
- std::string get(const std::string &old)
- {
- StringMap::const_iterator it = old_to_new.find(old);
- if (it == old_to_new.end())
- return "";
- return it->second;
- }
-private:
- StringMap old_to_new;
-};
-
-NewNameGetter newnamegetter;
-
-std::string content_mapnode_get_new_name(const std::string &oldname)
-{
- return newnamegetter.get(oldname);
-}
class NameIdMapping;
void content_mapnode_get_name_id_mapping(NameIdMapping *nimap);
-// Convert "CONTENT_STONE"-style names to dynamic ids
-std::string content_mapnode_get_new_name(const std::string &oldname);
-class INodeDefManager;
-
#endif
inv->getList("0")->setName("main");
}
assert(inv->getList("main") && !inv->getList("0"));
-
+
meta->setString("formspec","size[8,9]"
"list[current_name;main;0,0;8,4;]"
"list[current_player;main;0,5;8,4;]");
inv->getList("0")->setName("main");
}
assert(inv->getList("main") && !inv->getList("0"));
-
+
meta->setString("formspec","size[8,9]"
"list[current_name;main;0,0;8,4;]"
"list[current_player;main;0,5;8,4;]");
void content_nodemeta_deserialize_legacy(std::istream &is,
NodeMetadataList *meta, NodeTimerList *timers,
- IGameDef *gamedef)
+ IItemDefManager *item_def_mgr)
{
meta->clear();
timers->clear();
continue;
}
- NodeMetadata *data = new NodeMetadata(gamedef);
+ NodeMetadata *data = new NodeMetadata(item_def_mgr);
bool need_timer = content_nodemeta_deserialize_legacy_meta(is, data);
meta->set(p, data);
class NodeMetadataList;
class NodeTimerList;
-class IGameDef;
+class IItemDefManager;
/*
Legacy nodemeta definitions
void content_nodemeta_deserialize_legacy(std::istream &is,
NodeMetadataList *meta, NodeTimerList *timers,
- IGameDef *gamedef);
+ IItemDefManager *item_def_mgr);
void content_nodemeta_serialize_legacy(std::ostream &os, NodeMetadataList *meta);
TRACESTREAM(<<"MapBlock::deSerialize "<<PP(getPos())
<<": Node metadata"<<std::endl);
// Ignore errors
- try{
+ try {
std::ostringstream oss(std::ios_base::binary);
decompressZlib(is, oss);
std::istringstream iss(oss.str(), std::ios_base::binary);
- if(version >= 23)
- m_node_metadata.deSerialize(iss, m_gamedef);
+ if (version >= 23)
+ m_node_metadata.deSerialize(iss, m_gamedef->idef());
else
content_nodemeta_deserialize_legacy(iss,
- &m_node_metadata, &m_node_timers,
- m_gamedef);
- }
- catch(SerializationError &e)
- {
+ &m_node_metadata, &m_node_timers,
+ m_gamedef->idef());
+ } catch(SerializationError &e) {
errorstream<<"WARNING: MapBlock::deSerialize(): Ignoring an error"
<<" while deserializing node metadata at ("
<<PP(getPos())<<": "<<e.what()<<std::endl;
SharedBuffer<u8> databuf_nodelist(nodecount * ser_length);
// These have no compression
- if(version <= 3 || version == 5 || version == 6)
- {
+ if (version <= 3 || version == 5 || version == 6) {
char tmp;
is.read(&tmp, 1);
- if(is.gcount() != 1)
- throw SerializationError
- ("MapBlock::deSerialize: no enough input data");
+ if (is.gcount() != 1)
+ throw SerializationError(std::string(__FUNCTION_NAME)
+ + ": no enough input data");
is_underground = tmp;
- is.read((char*)*databuf_nodelist, nodecount * ser_length);
- if((u32)is.gcount() != nodecount * ser_length)
- throw SerializationError
- ("MapBlock::deSerialize: no enough input data");
- }
- else if(version <= 10)
- {
+ is.read((char *)*databuf_nodelist, nodecount * ser_length);
+ if ((u32)is.gcount() != nodecount * ser_length)
+ throw SerializationError(std::string(__FUNCTION_NAME)
+ + ": no enough input data");
+ } else if (version <= 10) {
u8 t8;
- is.read((char*)&t8, 1);
+ is.read((char *)&t8, 1);
is_underground = t8;
{
std::ostringstream os(std::ios_base::binary);
decompress(is, os, version);
std::string s = os.str();
- if(s.size() != nodecount)
- throw SerializationError
- ("MapBlock::deSerialize: invalid format");
- for(u32 i=0; i<s.size(); i++)
- {
+ if (s.size() != nodecount)
+ throw SerializationError(std::string(__FUNCTION_NAME)
+ + ": no enough input data");
+ for (u32 i = 0; i < s.size(); i++) {
databuf_nodelist[i*ser_length] = s[i];
}
}
std::ostringstream os(std::ios_base::binary);
decompress(is, os, version);
std::string s = os.str();
- if(s.size() != nodecount)
- throw SerializationError
- ("MapBlock::deSerialize: invalid format");
- for(u32 i=0; i<s.size(); i++)
- {
+ if (s.size() != nodecount)
+ throw SerializationError(std::string(__FUNCTION_NAME)
+ + ": no enough input data");
+ for (u32 i = 0; i < s.size(); i++) {
databuf_nodelist[i*ser_length + 1] = s[i];
}
}
- if(version >= 10)
- {
+ if (version >= 10) {
// Uncompress and set param2 data
std::ostringstream os(std::ios_base::binary);
decompress(is, os, version);
std::string s = os.str();
- if(s.size() != nodecount)
- throw SerializationError
- ("MapBlock::deSerialize: invalid format");
- for(u32 i=0; i<s.size(); i++)
- {
+ if (s.size() != nodecount)
+ throw SerializationError(std::string(__FUNCTION_NAME)
+ + ": no enough input data");
+ for (u32 i = 0; i < s.size(); i++) {
databuf_nodelist[i*ser_length + 2] = s[i];
}
}
- }
- // All other versions (newest)
- else
- {
+ } else { // All other versions (10 to 21)
u8 flags;
is.read((char*)&flags, 1);
is_underground = (flags & 0x01) ? true : false;
std::ostringstream os(std::ios_base::binary);
decompress(is, os, version);
std::string s = os.str();
- if(s.size() != nodecount*3)
- throw SerializationError
- ("MapBlock::deSerialize: decompress resulted in size"
- " other than nodecount*3");
+ if (s.size() != nodecount * 3)
+ throw SerializationError(std::string(__FUNCTION_NAME)
+ + ": decompress resulted in size other than nodecount*3");
// deserialize nodes from buffer
- for(u32 i=0; i<nodecount; i++)
- {
+ for (u32 i = 0; i < nodecount; i++) {
databuf_nodelist[i*ser_length] = s[i];
databuf_nodelist[i*ser_length + 1] = s[i+nodecount];
databuf_nodelist[i*ser_length + 2] = s[i+nodecount*2];
/*
NodeMetadata
*/
- if(version >= 14)
- {
+ if (version >= 14) {
// Ignore errors
- try{
- if(version <= 15)
- {
+ try {
+ if (version <= 15) {
std::string data = deSerializeString(is);
std::istringstream iss(data, std::ios_base::binary);
content_nodemeta_deserialize_legacy(iss,
- &m_node_metadata, &m_node_timers,
- m_gamedef);
- }
- else
- {
+ &m_node_metadata, &m_node_timers,
+ m_gamedef->idef());
+ } else {
//std::string data = deSerializeLongString(is);
std::ostringstream oss(std::ios_base::binary);
decompressZlib(is, oss);
std::istringstream iss(oss.str(), std::ios_base::binary);
content_nodemeta_deserialize_legacy(iss,
- &m_node_metadata, &m_node_timers,
- m_gamedef);
+ &m_node_metadata, &m_node_timers,
+ m_gamedef->idef());
}
- }
- catch(SerializationError &e)
- {
+ } catch(SerializationError &e) {
errorstream<<"WARNING: MapBlock::deSerialize(): Ignoring an error"
<<" while deserializing node metadata"<<std::endl;
}
}
// Deserialize node data
- for(u32 i=0; i<nodecount; i++)
- {
- data[i].deSerialize(&databuf_nodelist[i*ser_length], version);
+ for (u32 i = 0; i < nodecount; i++) {
+ data[i].deSerialize(&databuf_nodelist[i * ser_length], version);
}
- if(disk)
- {
+ if (disk) {
/*
Versions up from 9 have block objects. (DEPRECATED)
*/
- if(version >= 9){
+ if (version >= 9) {
u16 count = readU16(is);
// Not supported and length not known if count is not 0
if(count != 0){
/*
Versions up from 15 have static objects.
*/
- if(version >= 15)
+ if (version >= 15)
m_static_objects.deSerialize(is);
// Timestamp
- if(version >= 17){
+ if (version >= 17) {
setTimestamp(readU32(is));
m_disk_timestamp = m_timestamp;
} else {
// Dynamically re-set ids based on node names
NameIdMapping nimap;
// If supported, read node definition id mapping
- if(version >= 21){
+ if (version >= 21) {
nimap.deSerialize(is);
// Else set the legacy mapping
} else {
#include "content_sao.h"
#include "nodedef.h"
#include "emerge.h"
-#include "content_mapnode.h" // For content_mapnode_get_new_name
#include "voxelalgorithms.h"
#include "porting.h"
#include "profiler.h"
//#include "serverobject.h"
#include "content_sao.h"
#include "nodedef.h"
-#include "content_mapnode.h" // For content_mapnode_get_new_name
#include "voxelalgorithms.h"
//#include "profiler.h" // For TimeTaker
#include "settings.h" // For g_settings
NodeMetadata
*/
-NodeMetadata::NodeMetadata(IGameDef *gamedef):
+NodeMetadata::NodeMetadata(IItemDefManager *item_def_mgr):
m_stringvars(),
- m_inventory(new Inventory(gamedef->idef()))
+ m_inventory(new Inventory(item_def_mgr))
{
}
v3s16 p = i->first;
NodeMetadata *data = i->second;
- u16 p16 = p.Z*MAP_BLOCKSIZE*MAP_BLOCKSIZE + p.Y*MAP_BLOCKSIZE + p.X;
+ u16 p16 = p.Z * MAP_BLOCKSIZE * MAP_BLOCKSIZE + p.Y * MAP_BLOCKSIZE + p.X;
writeU16(os, p16);
data->serialize(os);
}
}
-void NodeMetadataList::deSerialize(std::istream &is, IGameDef *gamedef)
+void NodeMetadataList::deSerialize(std::istream &is, IItemDefManager *item_def_mgr)
{
clear();
u8 version = readU8(is);
- if(version == 0){
+ if (version == 0) {
// Nothing
return;
}
- if(version != 1){
- infostream<<__FUNCTION_NAME<<": version "<<version<<" not supported"
- <<std::endl;
- throw SerializationError("NodeMetadataList::deSerialize");
+ if (version != 1) {
+ std::string err_str = std::string(__FUNCTION_NAME)
+ + ": version " + itos(version) + " not supported";
+ infostream << err_str << std::endl;
+ throw SerializationError(err_str);
}
u16 count = readU16(is);
- for(u16 i=0; i<count; i++)
- {
+ for (u16 i=0; i < count; i++) {
u16 p16 = readU16(is);
v3s16 p;
p16 &= MAP_BLOCKSIZE - 1;
p.X = p16;
- if(m_data.find(p) != m_data.end())
- {
+ if (m_data.find(p) != m_data.end()) {
infostream<<"WARNING: NodeMetadataList::deSerialize(): "
<<"already set data at position"
<<"("<<p.X<<","<<p.Y<<","<<p.Z<<"): Ignoring."
continue;
}
- NodeMetadata *data = new NodeMetadata(gamedef);
+ NodeMetadata *data = new NodeMetadata(item_def_mgr);
data->deSerialize(is);
m_data[p] = data;
}
*/
class Inventory;
-class IGameDef;
+class IItemDefManager;
class NodeMetadata
{
public:
- NodeMetadata(IGameDef *gamedef);
+ NodeMetadata(IItemDefManager *item_def_mgr);
~NodeMetadata();
void serialize(std::ostream &os) const;
~NodeMetadataList();
void serialize(std::ostream &os) const;
- void deSerialize(std::istream &is, IGameDef *gamedef);
+ void deSerialize(std::istream &is, IItemDefManager *item_def_mgr);
// Add all keys in this list to the vector keys
std::vector<v3s16> getAllKeys();
} else {
NodeMetadata *meta = map->getNodeMetadata(p);
if (!meta) {
- meta = new NodeMetadata(gamedef);
+ meta = new NodeMetadata(gamedef->idef());
if (!map->setNodeMetadata(p, meta)) {
delete meta;
infostream << "RollbackAction::applyRevert(): "
#include "common/c_content.h"
#include "environment.h"
#include "map.h"
+#include "gamedef.h"
#include "nodemetadata.h"
{
NodeMetadata *meta = ref->m_env->getMap().getNodeMetadata(ref->m_p);
if(meta == NULL && auto_create) {
- meta = new NodeMetadata(ref->m_env->getGameDef());
+ meta = new NodeMetadata(ref->m_env->getGameDef()->idef());
if(!ref->m_env->getMap().setNodeMetadata(ref->m_p, meta)) {
delete meta;
return NULL;