diff options
Diffstat (limited to 'src/rollback_interface.cpp')
-rw-r--r-- | src/rollback_interface.cpp | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/src/rollback_interface.cpp b/src/rollback_interface.cpp index 3ac15544c..c00206e98 100644 --- a/src/rollback_interface.cpp +++ b/src/rollback_interface.cpp @@ -37,7 +37,7 @@ with this program; if not, write to the Free Software Foundation, Inc., RollbackNode::RollbackNode(Map *map, v3s16 p, IGameDef *gamedef) { const NodeDefManager *ndef = gamedef->ndef(); - MapNode n = map->getNodeNoEx(p); + MapNode n = map->getNode(p); name = ndef->get(n).name; param1 = n.param1; param2 = n.param2; @@ -132,14 +132,19 @@ bool RollbackAction::applyRevert(Map *map, InventoryManager *imgr, IGameDef *gam // Make sure position is loaded from disk map->emergeBlock(getContainerPos(p, MAP_BLOCKSIZE), false); // Check current node - MapNode current_node = map->getNodeNoEx(p); + MapNode current_node = map->getNode(p); std::string current_name = ndef->get(current_node).name; // If current node not the new node, it's bad if (current_name != n_new.name) { return false; } // Create rollback node - MapNode n(ndef, n_old.name, n_old.param1, n_old.param2); + content_t id = CONTENT_IGNORE; + if (!ndef->getId(n_old.name, id)) { + // The old node is not registered + return false; + } + MapNode n(id, n_old.param1, n_old.param2); // Set rollback node try { if (!map->addNodeWithEvent(p, n)) { @@ -171,7 +176,7 @@ bool RollbackAction::applyRevert(Map *map, InventoryManager *imgr, IGameDef *gam MapEditEvent event; event.type = MEET_BLOCK_NODE_METADATA_CHANGED; event.p = p; - map->dispatchEvent(&event); + map->dispatchEvent(event); } catch (InvalidPositionException &e) { infostream << "RollbackAction::applyRevert(): " << "InvalidPositionException: " << e.what() @@ -203,7 +208,7 @@ bool RollbackAction::applyRevert(Map *map, InventoryManager *imgr, IGameDef *gam << inventory_location << std::endl; return false; } - + // If item was added, take away item, otherwise add removed item if (inventory_add) { // Silently ignore different current item |