Fix chest not working after walked away and came back

This commit is contained in:
Perttu Ahola 2011-10-17 01:04:22 +03:00
parent 5f39885975
commit b0481b9db1
2 changed files with 19 additions and 3 deletions

@ -35,6 +35,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "settings.h" #include "settings.h"
#include "log.h" #include "log.h"
#define PP(x) "("<<(x).X<<","<<(x).Y<<","<<(x).Z<<")"
/* /*
SQLite format specification: SQLite format specification:
- Initially only replaces sectors/ and sectors2/ - Initially only replaces sectors/ and sectors2/
@ -1819,9 +1821,14 @@ NodeMetadata* Map::getNodeMetadata(v3s16 p)
v3s16 blockpos = getNodeBlockPos(p); v3s16 blockpos = getNodeBlockPos(p);
v3s16 p_rel = p - blockpos*MAP_BLOCKSIZE; v3s16 p_rel = p - blockpos*MAP_BLOCKSIZE;
MapBlock *block = getBlockNoCreateNoEx(blockpos); MapBlock *block = getBlockNoCreateNoEx(blockpos);
if(block == NULL) if(!block){
infostream<<"Map::getNodeMetadata(): Need to emerge "
<<PP(blockpos)<<std::endl;
block = emergeBlock(blockpos, false);
}
if(!block)
{ {
infostream<<"WARNING: Map::setNodeMetadata(): Block not found" infostream<<"WARNING: Map::getNodeMetadata(): Block not found"
<<std::endl; <<std::endl;
return NULL; return NULL;
} }
@ -1834,7 +1841,12 @@ void Map::setNodeMetadata(v3s16 p, NodeMetadata *meta)
v3s16 blockpos = getNodeBlockPos(p); v3s16 blockpos = getNodeBlockPos(p);
v3s16 p_rel = p - blockpos*MAP_BLOCKSIZE; v3s16 p_rel = p - blockpos*MAP_BLOCKSIZE;
MapBlock *block = getBlockNoCreateNoEx(blockpos); MapBlock *block = getBlockNoCreateNoEx(blockpos);
if(block == NULL) if(!block){
infostream<<"Map::setNodeMetadata(): Need to emerge "
<<PP(blockpos)<<std::endl;
block = emergeBlock(blockpos, false);
}
if(!block)
{ {
infostream<<"WARNING: Map::setNodeMetadata(): Block not found" infostream<<"WARNING: Map::setNodeMetadata(): Block not found"
<<std::endl; <<std::endl;

@ -157,6 +157,10 @@ public:
// Returns NULL if not found // Returns NULL if not found
MapBlock * getBlockNoCreateNoEx(v3s16 p); MapBlock * getBlockNoCreateNoEx(v3s16 p);
/* Server overrides */
virtual MapBlock * emergeBlock(v3s16 p, bool allow_generate=true)
{ return getBlockNoCreateNoEx(p); }
// Returns InvalidPositionException if not found // Returns InvalidPositionException if not found
bool isNodeUnderground(v3s16 p); bool isNodeUnderground(v3s16 p);