]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/map.cpp
Modified windows build parameters a bit to make it build
[dragonfireclient.git] / src / map.cpp
index 39742a892fcb5a8cb47510f1c818e20ed7683896..d644215be78911de0d56af9825eb684e98d94d3d 100644 (file)
@@ -954,6 +954,17 @@ void Map::addNodeAndUpdate(v3s16 p, MapNode n,
        */
        
        setNode(p, n);
+
+       /*
+               Add intial metadata
+       */
+
+       NodeMetadata *meta_proto = content_features(n.d).initial_metadata;
+       if(meta_proto)
+       {
+               NodeMetadata *meta = meta_proto->clone();
+               setNodeMetadata(p, meta);
+       }
        
        /*
                If node is under sunlight and doesn't let sunlight through,
@@ -1093,6 +1104,12 @@ void Map::removeNodeAndUpdate(v3s16 p,
                                light_sources, modified_blocks);
        }
 
+       /*
+               Remove node metadata
+       */
+
+       removeNodeMetadata(p);
+
        /*
                Remove the node.
                This also clears the lighting.
@@ -1696,17 +1713,49 @@ void Map::transformLiquids(core::map<v3s16, MapBlock*> & modified_blocks)
        //dstream<<"Map::transformLiquids(): loopcount="<<loopcount<<std::endl;
 }
 
-NodeMetadata* Map::getNodeMetadataClone(v3s16 p)
+NodeMetadata* Map::getNodeMetadata(v3s16 p)
 {
        v3s16 blockpos = getNodeBlockPos(p);
        v3s16 p_rel = p - blockpos*MAP_BLOCKSIZE;
        MapBlock *block = getBlockNoCreateNoEx(blockpos);
        if(block == NULL)
+       {
+               dstream<<"WARNING: Map::setNodeMetadata(): Block not found"
+                               <<std::endl;
                return NULL;
-       NodeMetadata *meta = block->m_node_metadata.getClone(p_rel);
+       }
+       NodeMetadata *meta = block->m_node_metadata.get(p_rel);
        return meta;
 }
 
+void Map::setNodeMetadata(v3s16 p, NodeMetadata *meta)
+{
+       v3s16 blockpos = getNodeBlockPos(p);
+       v3s16 p_rel = p - blockpos*MAP_BLOCKSIZE;
+       MapBlock *block = getBlockNoCreateNoEx(blockpos);
+       if(block == NULL)
+       {
+               dstream<<"WARNING: Map::setNodeMetadata(): Block not found"
+                               <<std::endl;
+               return;
+       }
+       block->m_node_metadata.set(p_rel, meta);
+}
+
+void Map::removeNodeMetadata(v3s16 p)
+{
+       v3s16 blockpos = getNodeBlockPos(p);
+       v3s16 p_rel = p - blockpos*MAP_BLOCKSIZE;
+       MapBlock *block = getBlockNoCreateNoEx(blockpos);
+       if(block == NULL)
+       {
+               dstream<<"WARNING: Map::removeNodeMetadata(): Block not found"
+                               <<std::endl;
+               return;
+       }
+       block->m_node_metadata.remove(p_rel);
+}
+
 /*
        ServerMap
 */