Skip to content

Commit

Permalink
[CSM] Add get_node and get_node_or_nil
Browse files Browse the repository at this point in the history
  • Loading branch information
red-001 authored and nerzhul committed Mar 13, 2017
1 parent 073f5cf commit 37df9cb
Show file tree
Hide file tree
Showing 6 changed files with 67 additions and 2 deletions.
10 changes: 9 additions & 1 deletion clientmods/preview/init.lua
Expand Up @@ -39,6 +39,14 @@ core.register_chatcommand("dump", {
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()
print("[PREVIEW] loaded " .. modname .. " mod")
end)
Expand All @@ -47,4 +55,4 @@ core.register_on_dignode(function(pos, node)
print("pos:" .. dump(pos))
print("node:" .. dump(node))
return false
end)
end)
8 changes: 7 additions & 1 deletion doc/client_lua_api.txt
Expand Up @@ -717,7 +717,13 @@ Call these functions only at load time!
* `minetest.after(time, func, ...)`
* Call the function `func` after `time` seconds, may be fractional
* 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.
* `minetest.parse_json(string[, nullvalue])`: returns something
* Convert a string containing JSON data into the Lua equivalent
Expand Down
5 changes: 5 additions & 0 deletions src/client.cpp
Expand Up @@ -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)
{
//TimeTaker timer1("Client::addNode()");
Expand Down
1 change: 1 addition & 0 deletions src/client.h
Expand Up @@ -441,6 +441,7 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef

// Causes urgent mesh updates (unlike Map::add/removeNodeWithEvent)
void removeNode(v3s16 p);
MapNode getNode(v3s16 p, bool *is_valid_position);
void addNode(v3s16 p, MapNode n, bool remove_metadata = true);

void setPlayerControl(PlayerControl &control);
Expand Down
37 changes: 37 additions & 0 deletions src/script/lua_api/l_client.cpp
Expand Up @@ -23,6 +23,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "util/string.h"
#include "cpp_api/s_base.h"
#include "gettext.h"
#include "common/c_converter.h"
#include "common/c_content.h"

int ModApiClient::l_get_current_modname(lua_State *L)
{
Expand Down Expand Up @@ -97,6 +99,39 @@ int ModApiClient::l_gettext(lua_State *L)
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)
{
API_FCT(get_current_modname);
Expand All @@ -106,4 +141,6 @@ void ModApiClient::Initialize(lua_State *L, int top)
API_FCT(show_formspec);
API_FCT(send_respawn);
API_FCT(gettext);
API_FCT(get_node);
API_FCT(get_node_or_nil);
}
8 changes: 8 additions & 0 deletions src/script/lua_api/l_client.h
Expand Up @@ -47,6 +47,14 @@ class ModApiClient: public ModApiBase
// set_last_run_mod(modname)
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:
static void Initialize(lua_State *L, int top);
};
Expand Down

0 comments on commit 37df9cb

Please sign in to comment.