/*
-Minetest-c55
-Copyright (C) 2012 celeron55, Perttu Ahola <celeron55@gmail.com>
+Minetest
+Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
}
}
+bool RollbackAction::getPosition(v3s16 *dst) const
+{
+ switch(type){
+ case RollbackAction::TYPE_SET_NODE:
+ if(dst) *dst = p;
+ return true;
+ case RollbackAction::TYPE_MODIFY_INVENTORY_STACK: {
+ InventoryLocation loc;
+ loc.deSerialize(inventory_location);
+ if(loc.type != InventoryLocation::NODEMETA)
+ return false;
+ if(dst) *dst = loc.p;
+ return true; }
+ default:
+ return false;
+ }
+}
+
bool RollbackAction::applyRevert(Map *map, InventoryManager *imgr, IGameDef *gamedef) const
{
try{
if(n_old.meta != ""){
if(!meta){
meta = new NodeMetadata(gamedef);
- map->setNodeMetadata(p, meta);
+ if(!map->setNodeMetadata(p, meta)){
+ delete meta;
+ infostream<<"RollbackAction::applyRevert(): "
+ <<"setNodeMetadata failed at "
+ <<PP(p)<<" for "<<n_old.name<<std::endl;
+ return false;
+ }
}
std::istringstream is(n_old.meta, std::ios::binary);
meta->deSerialize(is);