forked from Mirrorlandia_minetest/minetest
[CSM] Add get_node
and get_node_or_nil
This commit is contained in:
parent
073f5cf03d
commit
37df9cb7d7
@ -39,6 +39,14 @@ core.register_chatcommand("dump", {
|
|||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
core.register_chatcommand("test_node", {
|
||||||
|
func = function(param)
|
||||||
|
core.display_chat_message(dump(core.get_node({x=0, y=0, z=0})))
|
||||||
|
core.display_chat_message(dump(core.get_node_or_nil({x=0, y=0, z=0})))
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
core.after(2, function()
|
core.after(2, function()
|
||||||
print("[PREVIEW] loaded " .. modname .. " mod")
|
print("[PREVIEW] loaded " .. modname .. " mod")
|
||||||
end)
|
end)
|
||||||
|
@ -717,7 +717,13 @@ Call these functions only at load time!
|
|||||||
* `minetest.after(time, func, ...)`
|
* `minetest.after(time, func, ...)`
|
||||||
* Call the function `func` after `time` seconds, may be fractional
|
* Call the function `func` after `time` seconds, may be fractional
|
||||||
* Optional: Variable number of arguments that are passed to `func`
|
* Optional: Variable number of arguments that are passed to `func`
|
||||||
|
### Map
|
||||||
|
* `minetest.get_node(pos)`
|
||||||
|
* Returns the node at the given position as table in the format
|
||||||
|
`{name="node_name", param1=0, param2=0}`, returns `{name="ignore", param1=0, param2=0}`
|
||||||
|
for unloaded areas.
|
||||||
|
* `minetest.get_node_or_nil(pos)`
|
||||||
|
* Same as `get_node` but returns `nil` for unloaded areas.
|
||||||
### Misc.
|
### Misc.
|
||||||
* `minetest.parse_json(string[, nullvalue])`: returns something
|
* `minetest.parse_json(string[, nullvalue])`: returns something
|
||||||
* Convert a string containing JSON data into the Lua equivalent
|
* Convert a string containing JSON data into the Lua equivalent
|
||||||
|
@ -1447,6 +1447,11 @@ void Client::removeNode(v3s16 p)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MapNode Client::getNode(v3s16 p, bool *is_valid_position)
|
||||||
|
{
|
||||||
|
return m_env.getMap().getNodeNoEx(p, is_valid_position);
|
||||||
|
}
|
||||||
|
|
||||||
void Client::addNode(v3s16 p, MapNode n, bool remove_metadata)
|
void Client::addNode(v3s16 p, MapNode n, bool remove_metadata)
|
||||||
{
|
{
|
||||||
//TimeTaker timer1("Client::addNode()");
|
//TimeTaker timer1("Client::addNode()");
|
||||||
|
@ -441,6 +441,7 @@ public:
|
|||||||
|
|
||||||
// Causes urgent mesh updates (unlike Map::add/removeNodeWithEvent)
|
// Causes urgent mesh updates (unlike Map::add/removeNodeWithEvent)
|
||||||
void removeNode(v3s16 p);
|
void removeNode(v3s16 p);
|
||||||
|
MapNode getNode(v3s16 p, bool *is_valid_position);
|
||||||
void addNode(v3s16 p, MapNode n, bool remove_metadata = true);
|
void addNode(v3s16 p, MapNode n, bool remove_metadata = true);
|
||||||
|
|
||||||
void setPlayerControl(PlayerControl &control);
|
void setPlayerControl(PlayerControl &control);
|
||||||
|
@ -23,6 +23,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||||||
#include "util/string.h"
|
#include "util/string.h"
|
||||||
#include "cpp_api/s_base.h"
|
#include "cpp_api/s_base.h"
|
||||||
#include "gettext.h"
|
#include "gettext.h"
|
||||||
|
#include "common/c_converter.h"
|
||||||
|
#include "common/c_content.h"
|
||||||
|
|
||||||
int ModApiClient::l_get_current_modname(lua_State *L)
|
int ModApiClient::l_get_current_modname(lua_State *L)
|
||||||
{
|
{
|
||||||
@ -97,6 +99,39 @@ int ModApiClient::l_gettext(lua_State *L)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// get_node(pos)
|
||||||
|
// pos = {x=num, y=num, z=num}
|
||||||
|
int ModApiClient::l_get_node(lua_State *L)
|
||||||
|
{
|
||||||
|
// pos
|
||||||
|
v3s16 pos = read_v3s16(L, 1);
|
||||||
|
// Do it
|
||||||
|
bool pos_ok;
|
||||||
|
MapNode n = getClient(L)->getNode(pos, &pos_ok);
|
||||||
|
// Return node
|
||||||
|
pushnode(L, n, getClient(L)->ndef());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// get_node_or_nil(pos)
|
||||||
|
// pos = {x=num, y=num, z=num}
|
||||||
|
int ModApiClient::l_get_node_or_nil(lua_State *L)
|
||||||
|
{
|
||||||
|
// pos
|
||||||
|
v3s16 pos = read_v3s16(L, 1);
|
||||||
|
// Do it
|
||||||
|
bool pos_ok;
|
||||||
|
MapNode n = getClient(L)->getNode(pos, &pos_ok);
|
||||||
|
if (pos_ok) {
|
||||||
|
// Return node
|
||||||
|
pushnode(L, n, getClient(L)->ndef());
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
lua_pushnil(L);
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
void ModApiClient::Initialize(lua_State *L, int top)
|
void ModApiClient::Initialize(lua_State *L, int top)
|
||||||
{
|
{
|
||||||
API_FCT(get_current_modname);
|
API_FCT(get_current_modname);
|
||||||
@ -106,4 +141,6 @@ void ModApiClient::Initialize(lua_State *L, int top)
|
|||||||
API_FCT(show_formspec);
|
API_FCT(show_formspec);
|
||||||
API_FCT(send_respawn);
|
API_FCT(send_respawn);
|
||||||
API_FCT(gettext);
|
API_FCT(gettext);
|
||||||
|
API_FCT(get_node);
|
||||||
|
API_FCT(get_node_or_nil);
|
||||||
}
|
}
|
||||||
|
@ -47,6 +47,14 @@ private:
|
|||||||
// set_last_run_mod(modname)
|
// set_last_run_mod(modname)
|
||||||
static int l_set_last_run_mod(lua_State *L);
|
static int l_set_last_run_mod(lua_State *L);
|
||||||
|
|
||||||
|
// get_node(pos)
|
||||||
|
static int l_get_node(lua_State *L);
|
||||||
|
|
||||||
|
// get_node_or_nil(pos)
|
||||||
|
static int l_get_node_or_nil(lua_State *L);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static void Initialize(lua_State *L, int top);
|
static void Initialize(lua_State *L, int top);
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user