mirror of
https://github.com/luanti-org/luanti.git
synced 2025-06-27 16:36:03 +00:00
Add API for mods to hook liquid transformation events (#11405)
Add API for mods to hook liquid transformation events Without this API, there is no reliable way for mods to be notified when liquid transform modifies nodes and mods are forced to poll for changes. This allows mods to detect changes to flowing liquid nodes and liquid renewal using event-driven logic.
This commit is contained in:
parent
e9bc59e376
commit
52128ae11e
5 changed files with 47 additions and 1 deletions
|
@ -25,6 +25,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
#include "mapgen/mapgen.h"
|
||||
#include "lua_api/l_env.h"
|
||||
#include "server.h"
|
||||
#include "script/common/c_content.h"
|
||||
|
||||
|
||||
void ScriptApiEnv::environment_OnGenerated(v3s16 minp, v3s16 maxp,
|
||||
u32 blockseed)
|
||||
|
@ -267,3 +269,35 @@ void ScriptApiEnv::on_emerge_area_completion(
|
|||
luaL_unref(L, LUA_REGISTRYINDEX, state->args_ref);
|
||||
}
|
||||
}
|
||||
|
||||
void ScriptApiEnv::on_liquid_transformed(
|
||||
const std::vector<std::pair<v3s16, MapNode>> &list)
|
||||
{
|
||||
SCRIPTAPI_PRECHECKHEADER
|
||||
|
||||
// Get core.registered_on_liquid_transformed
|
||||
lua_getglobal(L, "core");
|
||||
lua_getfield(L, -1, "registered_on_liquid_transformed");
|
||||
luaL_checktype(L, -1, LUA_TTABLE);
|
||||
lua_remove(L, -2);
|
||||
|
||||
// Skip converting list and calling hook if there are
|
||||
// no registered callbacks.
|
||||
if(lua_objlen(L, -1) < 1) return;
|
||||
|
||||
// Convert the list to a pos array and a node array for lua
|
||||
int index = 1;
|
||||
const NodeDefManager *ndef = getEnv()->getGameDef()->ndef();
|
||||
lua_createtable(L, list.size(), 0);
|
||||
lua_createtable(L, list.size(), 0);
|
||||
for(std::pair<v3s16, MapNode> p : list) {
|
||||
lua_pushnumber(L, index);
|
||||
push_v3s16(L, p.first);
|
||||
lua_rawset(L, -4);
|
||||
lua_pushnumber(L, index++);
|
||||
pushnode(L, p.second, ndef);
|
||||
lua_rawset(L, -3);
|
||||
}
|
||||
|
||||
runCallbacks(2, RUN_CALLBACKS_MODE_FIRST);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue