forked from Mirrorlandia_minetest/minetest
Add function to get server info.
This commit is contained in:
parent
468eeb618e
commit
ae0d8f74d7
@ -8,6 +8,11 @@ end)
|
|||||||
|
|
||||||
core.register_on_connect(function()
|
core.register_on_connect(function()
|
||||||
print("[PREVIEW] Player connection completed")
|
print("[PREVIEW] Player connection completed")
|
||||||
|
local server_info = core.get_server_info()
|
||||||
|
print("Server version: " .. server_info.protocol_version)
|
||||||
|
print("Server ip: " .. server_info.ip)
|
||||||
|
print("Server address: " .. server_info.address)
|
||||||
|
print("Server port: " .. server_info.port)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
core.register_on_placenode(function(pointed_thing, node)
|
core.register_on_placenode(function(pointed_thing, node)
|
||||||
@ -80,7 +85,6 @@ core.after(2, function()
|
|||||||
print("[PREVIEW] loaded " .. modname .. " mod")
|
print("[PREVIEW] loaded " .. modname .. " mod")
|
||||||
modstorage:set_string("current_mod", modname)
|
modstorage:set_string("current_mod", modname)
|
||||||
print(modstorage:get_string("current_mod"))
|
print(modstorage:get_string("current_mod"))
|
||||||
print("Server version:" .. core.get_protocol_version())
|
|
||||||
preview_minimap()
|
preview_minimap()
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
@ -702,11 +702,10 @@ Call these functions only at load time!
|
|||||||
* `minetest.disconnect()`
|
* `minetest.disconnect()`
|
||||||
* Disconnect from the server and exit to main menu.
|
* Disconnect from the server and exit to main menu.
|
||||||
* Returns `false` if the client is already disconnecting otherwise returns `true`.
|
* Returns `false` if the client is already disconnecting otherwise returns `true`.
|
||||||
* `minetest.get_protocol_version()`
|
|
||||||
* Returns the protocol version of the server.
|
|
||||||
* Might not be accurate at start up as the client might not be connected to the server yet, in that case it will return 0.
|
|
||||||
* `minetest.take_screenshot()`
|
* `minetest.take_screenshot()`
|
||||||
* Take a screenshot.
|
* Take a screenshot.
|
||||||
|
* `minetest.get_server_info()`
|
||||||
|
* Returns [server info](#server-info).
|
||||||
|
|
||||||
### Misc.
|
### Misc.
|
||||||
* `minetest.parse_json(string[, nullvalue])`: returns something
|
* `minetest.parse_json(string[, nullvalue])`: returns something
|
||||||
@ -932,9 +931,18 @@ Can be obtained via `minetest.get_meta(pos)`.
|
|||||||
{
|
{
|
||||||
params = "<name> <privilege>", -- Short parameter description
|
params = "<name> <privilege>", -- Short parameter description
|
||||||
description = "Remove privilege from player", -- Full description
|
description = "Remove privilege from player", -- Full description
|
||||||
func = function(param), -- Called when command is run.
|
func = function(param), -- Called when command is run.
|
||||||
-- Returns boolean success and text output.
|
-- Returns boolean success and text output.
|
||||||
}
|
}
|
||||||
|
### Server info
|
||||||
|
```lua
|
||||||
|
{
|
||||||
|
address = "minetest.example.org", -- The domain name/IP address of a remote server or "" for a local server.
|
||||||
|
ip = "203.0.113.156", -- The IP address of the server.
|
||||||
|
port = 30000, -- The port the client is connected to.
|
||||||
|
protocol_version = 30 -- Will not be accurate at start up as the client might not be connected to the server yet, in that case it will be 0.
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
Escape sequences
|
Escape sequences
|
||||||
----------------
|
----------------
|
||||||
|
@ -58,6 +58,7 @@ Client::Client(
|
|||||||
IrrlichtDevice *device,
|
IrrlichtDevice *device,
|
||||||
const char *playername,
|
const char *playername,
|
||||||
const std::string &password,
|
const std::string &password,
|
||||||
|
const std::string &address_name,
|
||||||
MapDrawControl &control,
|
MapDrawControl &control,
|
||||||
IWritableTextureSource *tsrc,
|
IWritableTextureSource *tsrc,
|
||||||
IWritableShaderSource *shsrc,
|
IWritableShaderSource *shsrc,
|
||||||
@ -89,6 +90,7 @@ Client::Client(
|
|||||||
),
|
),
|
||||||
m_particle_manager(&m_env),
|
m_particle_manager(&m_env),
|
||||||
m_con(PROTOCOL_ID, 512, CONNECTION_TIMEOUT, ipv6, this),
|
m_con(PROTOCOL_ID, 512, CONNECTION_TIMEOUT, ipv6, this),
|
||||||
|
m_address_name(address_name),
|
||||||
m_device(device),
|
m_device(device),
|
||||||
m_camera(NULL),
|
m_camera(NULL),
|
||||||
m_minimap_disabled_by_server(false),
|
m_minimap_disabled_by_server(false),
|
||||||
@ -253,13 +255,11 @@ Client::~Client()
|
|||||||
delete m_minimap;
|
delete m_minimap;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Client::connect(Address address,
|
void Client::connect(Address address, bool is_local_server)
|
||||||
const std::string &address_name,
|
|
||||||
bool is_local_server)
|
|
||||||
{
|
{
|
||||||
DSTACK(FUNCTION_NAME);
|
DSTACK(FUNCTION_NAME);
|
||||||
|
|
||||||
initLocalMapSaving(address, address_name, is_local_server);
|
initLocalMapSaving(address, m_address_name, is_local_server);
|
||||||
|
|
||||||
m_con.SetTimeoutMs(0);
|
m_con.SetTimeoutMs(0);
|
||||||
m_con.Connect(address);
|
m_con.Connect(address);
|
||||||
|
16
src/client.h
16
src/client.h
@ -257,6 +257,7 @@ public:
|
|||||||
IrrlichtDevice *device,
|
IrrlichtDevice *device,
|
||||||
const char *playername,
|
const char *playername,
|
||||||
const std::string &password,
|
const std::string &password,
|
||||||
|
const std::string &address_name,
|
||||||
MapDrawControl &control,
|
MapDrawControl &control,
|
||||||
IWritableTextureSource *tsrc,
|
IWritableTextureSource *tsrc,
|
||||||
IWritableShaderSource *shsrc,
|
IWritableShaderSource *shsrc,
|
||||||
@ -284,9 +285,7 @@ public:
|
|||||||
The name of the local player should already be set when
|
The name of the local player should already be set when
|
||||||
calling this, as it is sent in the initialization.
|
calling this, as it is sent in the initialization.
|
||||||
*/
|
*/
|
||||||
void connect(Address address,
|
void connect(Address address, bool is_local_server);
|
||||||
const std::string &address_name,
|
|
||||||
bool is_local_server);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Stuff that references the environment is valid only as
|
Stuff that references the environment is valid only as
|
||||||
@ -525,6 +524,16 @@ public:
|
|||||||
|
|
||||||
IrrlichtDevice *getDevice() const { return m_device; }
|
IrrlichtDevice *getDevice() const { return m_device; }
|
||||||
|
|
||||||
|
const Address getServerAddress()
|
||||||
|
{
|
||||||
|
return m_con.GetPeerAddress(PEER_ID_SERVER);
|
||||||
|
}
|
||||||
|
|
||||||
|
const std::string &getAddressName() const
|
||||||
|
{
|
||||||
|
return m_address_name;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
// Virtual methods from con::PeerHandler
|
// Virtual methods from con::PeerHandler
|
||||||
@ -576,6 +585,7 @@ private:
|
|||||||
ClientEnvironment m_env;
|
ClientEnvironment m_env;
|
||||||
ParticleManager m_particle_manager;
|
ParticleManager m_particle_manager;
|
||||||
con::Connection m_con;
|
con::Connection m_con;
|
||||||
|
std::string m_address_name;
|
||||||
IrrlichtDevice *m_device;
|
IrrlichtDevice *m_device;
|
||||||
Camera *m_camera;
|
Camera *m_camera;
|
||||||
Minimap *m_minimap;
|
Minimap *m_minimap;
|
||||||
|
@ -2044,7 +2044,7 @@ bool Game::connectToServer(const std::string &playername,
|
|||||||
}
|
}
|
||||||
|
|
||||||
client = new Client(device,
|
client = new Client(device,
|
||||||
playername.c_str(), password,
|
playername.c_str(), password, *address,
|
||||||
*draw_control, texture_src, shader_src,
|
*draw_control, texture_src, shader_src,
|
||||||
itemdef_manager, nodedef_manager, sound, eventmgr,
|
itemdef_manager, nodedef_manager, sound, eventmgr,
|
||||||
connect_address.isIPv6(), &flags);
|
connect_address.isIPv6(), &flags);
|
||||||
@ -2056,7 +2056,7 @@ bool Game::connectToServer(const std::string &playername,
|
|||||||
connect_address.print(&infostream);
|
connect_address.print(&infostream);
|
||||||
infostream << std::endl;
|
infostream << std::endl;
|
||||||
|
|
||||||
client->connect(connect_address, *address,
|
client->connect(connect_address,
|
||||||
simple_singleplayer_mode || local_server_mode);
|
simple_singleplayer_mode || local_server_mode);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -234,10 +234,20 @@ int ModApiClient::l_sound_stop(lua_State *L)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// get_protocol_version()
|
// get_server_info()
|
||||||
int ModApiClient::l_get_protocol_version(lua_State *L)
|
int ModApiClient::l_get_server_info(lua_State *L)
|
||||||
{
|
{
|
||||||
lua_pushinteger(L, getClient(L)->getProtoVersion());
|
Client *client = getClient(L);
|
||||||
|
Address serverAddress = client->getServerAddress();
|
||||||
|
lua_newtable(L);
|
||||||
|
lua_pushstring(L, client->getAddressName().c_str());
|
||||||
|
lua_setfield(L, -2, "address");
|
||||||
|
lua_pushstring(L, serverAddress.serializeString().c_str());
|
||||||
|
lua_setfield(L, -2, "ip");
|
||||||
|
lua_pushinteger(L, serverAddress.getPort());
|
||||||
|
lua_setfield(L, -2, "port");
|
||||||
|
lua_pushinteger(L, client->getProtoVersion());
|
||||||
|
lua_setfield(L, -2, "protocol_version");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -265,6 +275,6 @@ void ModApiClient::Initialize(lua_State *L, int top)
|
|||||||
API_FCT(get_meta);
|
API_FCT(get_meta);
|
||||||
API_FCT(sound_play);
|
API_FCT(sound_play);
|
||||||
API_FCT(sound_stop);
|
API_FCT(sound_stop);
|
||||||
API_FCT(get_protocol_version);
|
API_FCT(get_server_info);
|
||||||
API_FCT(take_screenshot);
|
API_FCT(take_screenshot);
|
||||||
}
|
}
|
||||||
|
@ -69,8 +69,8 @@ private:
|
|||||||
|
|
||||||
static int l_sound_stop(lua_State *L);
|
static int l_sound_stop(lua_State *L);
|
||||||
|
|
||||||
// get_protocol_version()
|
// get_server_info()
|
||||||
static int l_get_protocol_version(lua_State *L);
|
static int l_get_server_info(lua_State *L);
|
||||||
|
|
||||||
static int l_take_screenshot(lua_State *L);
|
static int l_take_screenshot(lua_State *L);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user