Abort when trying to set a not registered node (#7011)
I removed the MapNode constructor which takes a nodename and gives the node's id or CONTENT_IGNORE The code which used this constructor (two places) now handles the situation of not registered nodes correctly: * minetest.set_node and similar functions make minetest crash when a not registered node is passed * reverting a node with rollback aborts if the node is not registered
This commit is contained in:
parent
3066d76e33
commit
431d8a9b83
@ -44,18 +44,6 @@ static const u8 rot_to_wallmounted[] = {
|
|||||||
MapNode
|
MapNode
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Create directly from a nodename
|
|
||||||
// If name is unknown, sets CONTENT_IGNORE
|
|
||||||
MapNode::MapNode(const NodeDefManager *ndef, const std::string &name,
|
|
||||||
u8 a_param1, u8 a_param2)
|
|
||||||
{
|
|
||||||
content_t id = CONTENT_IGNORE;
|
|
||||||
ndef->getId(name, id);
|
|
||||||
param0 = id;
|
|
||||||
param1 = a_param1;
|
|
||||||
param2 = a_param2;
|
|
||||||
}
|
|
||||||
|
|
||||||
void MapNode::getColor(const ContentFeatures &f, video::SColor *color) const
|
void MapNode::getColor(const ContentFeatures &f, video::SColor *color) const
|
||||||
{
|
{
|
||||||
if (f.palette) {
|
if (f.palette) {
|
||||||
|
@ -145,11 +145,6 @@ struct MapNode
|
|||||||
param2(a_param2)
|
param2(a_param2)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
// Create directly from a nodename
|
|
||||||
// If name is unknown, sets CONTENT_IGNORE
|
|
||||||
MapNode(const NodeDefManager *ndef, const std::string &name,
|
|
||||||
u8 a_param1=0, u8 a_param2=0);
|
|
||||||
|
|
||||||
bool operator==(const MapNode &other) const noexcept
|
bool operator==(const MapNode &other) const noexcept
|
||||||
{
|
{
|
||||||
return (param0 == other.param0
|
return (param0 == other.param0
|
||||||
|
@ -139,7 +139,12 @@ bool RollbackAction::applyRevert(Map *map, InventoryManager *imgr, IGameDef *gam
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// Create rollback node
|
// 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
|
// Set rollback node
|
||||||
try {
|
try {
|
||||||
if (!map->addNodeWithEvent(p, n)) {
|
if (!map->addNodeWithEvent(p, n)) {
|
||||||
@ -203,7 +208,7 @@ bool RollbackAction::applyRevert(Map *map, InventoryManager *imgr, IGameDef *gam
|
|||||||
<< inventory_location << std::endl;
|
<< inventory_location << std::endl;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If item was added, take away item, otherwise add removed item
|
// If item was added, take away item, otherwise add removed item
|
||||||
if (inventory_add) {
|
if (inventory_add) {
|
||||||
// Silently ignore different current item
|
// Silently ignore different current item
|
||||||
|
@ -1093,7 +1093,7 @@ MapNode readnode(lua_State *L, int index, const NodeDefManager *ndef)
|
|||||||
lua_getfield(L, index, "name");
|
lua_getfield(L, index, "name");
|
||||||
if (!lua_isstring(L, -1))
|
if (!lua_isstring(L, -1))
|
||||||
throw LuaError("Node name is not set or is not a string!");
|
throw LuaError("Node name is not set or is not a string!");
|
||||||
const char *name = lua_tostring(L, -1);
|
std::string name = lua_tostring(L, -1);
|
||||||
lua_pop(L, 1);
|
lua_pop(L, 1);
|
||||||
|
|
||||||
u8 param1 = 0;
|
u8 param1 = 0;
|
||||||
@ -1108,7 +1108,11 @@ MapNode readnode(lua_State *L, int index, const NodeDefManager *ndef)
|
|||||||
param2 = lua_tonumber(L, -1);
|
param2 = lua_tonumber(L, -1);
|
||||||
lua_pop(L, 1);
|
lua_pop(L, 1);
|
||||||
|
|
||||||
return {ndef, name, param1, param2};
|
content_t id = CONTENT_IGNORE;
|
||||||
|
if (!ndef->getId(name, id))
|
||||||
|
throw LuaError("\"" + name + "\" is not a registered node!");
|
||||||
|
|
||||||
|
return {id, param1, param2};
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user