1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-06-27 16:36:03 +00:00

Add ServerEnvironment::setNode()/removeNode() to allow setting nodes from the C++ side with proper script-defined initialization/destruction

This commit is contained in:
Perttu Ahola 2013-01-02 23:17:52 +02:00
parent 69bd803a32
commit 2c472a66d1
3 changed files with 45 additions and 27 deletions

View file

@ -3540,20 +3540,7 @@ private:
v3s16 pos = read_v3s16(L, 2);
MapNode n = readnode(L, 3, ndef);
// Do it
MapNode n_old = env->getMap().getNodeNoEx(pos);
// Call destructor
if(ndef->get(n_old).has_on_destruct)
scriptapi_node_on_destruct(L, pos, n_old);
// Replace node
bool succeeded = env->getMap().addNodeWithEvent(pos, n);
if(succeeded){
// Call post-destructor
if(ndef->get(n_old).has_after_destruct)
scriptapi_node_after_destruct(L, pos, n_old);
// Call constructor
if(ndef->get(n).has_on_construct)
scriptapi_node_on_construct(L, pos, n);
}
bool succeeded = env->setNode(pos, n);
lua_pushboolean(L, succeeded);
return 1;
}
@ -3574,20 +3561,8 @@ private:
// parameters
v3s16 pos = read_v3s16(L, 2);
// Do it
MapNode n_old = env->getMap().getNodeNoEx(pos);
// Call destructor
if(ndef->get(n_old).has_on_destruct)
scriptapi_node_on_destruct(L, pos, n_old);
// Replace with air
// This is slightly optimized compared to addNodeWithEvent(air)
bool succeeded = env->getMap().removeNodeWithEvent(pos);
if(succeeded){
// Call post-destructor
if(ndef->get(n_old).has_after_destruct)
scriptapi_node_after_destruct(L, pos, n_old);
}
bool succeeded = env->removeNode(pos);
lua_pushboolean(L, succeeded);
// Air doesn't require constructor
return 1;
}