diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index 433315add..e710db685 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -36,6 +36,7 @@ void set_default_settings(Settings *settings) settings->setDefault("name", ""); settings->setDefault("bind_address", ""); settings->setDefault("serverlist_url", "servers.minetest.net"); + settings->setDefault("serverlist_url_2", ""); // Client settings->setDefault("address", ""); diff --git a/src/script/lua_api/l_mainmenu.cpp b/src/script/lua_api/l_mainmenu.cpp index 15fdf47e9..992cc5328 100644 --- a/src/script/lua_api/l_mainmenu.cpp +++ b/src/script/lua_api/l_mainmenu.cpp @@ -463,7 +463,12 @@ int ModApiMainMenu::l_get_favorites(lua_State *L) std::vector servers; if(listtype == "online") { - servers = ServerList::getOnline(); + servers = ServerList::getOnline(g_settings->get("serverlist_url")); + std::string aux_list = g_settings->get("serverlist_url_2"); + if (!aux_list.empty()) { + std::vector aux = ServerList::getOnline(aux_list); + servers.insert(servers.end(), aux.begin(), aux.end()); + } } else { servers = ServerList::getLocal(); } @@ -474,6 +479,12 @@ int ModApiMainMenu::l_get_favorites(lua_State *L) for (unsigned int i = 0; i < servers.size(); i++) { + // only list compatible servers + if (!servers[i]["proto_min"].asString().size() || + !servers[i]["proto_max"].asString().size() || + servers[i]["proto_min"].asInt() > CLIENT_PROTOCOL_VERSION_MAX || + servers[i]["proto_max"].asInt() < CLIENT_PROTOCOL_VERSION_MIN) + continue; lua_pushnumber(L,index); @@ -606,7 +617,7 @@ int ModApiMainMenu::l_delete_favorite(lua_State *L) if(listtype == "online") { - servers = ServerList::getOnline(); + servers = ServerList::getOnline(g_settings->get("serverlist_url")); } else { servers = ServerList::getLocal(); } diff --git a/src/serverlist.cpp b/src/serverlist.cpp index e13493971..12160692a 100644 --- a/src/serverlist.cpp +++ b/src/serverlist.cpp @@ -66,14 +66,14 @@ std::vector getLocal() } -std::vector getOnline() +std::vector getOnline(const std::string &url) { std::ostringstream geturl; u16 proto_version_min = g_settings->getFlag("send_pre_v25_init") ? CLIENT_PROTOCOL_VERSION_MIN_LEGACY : CLIENT_PROTOCOL_VERSION_MIN; - geturl << g_settings->get("serverlist_url") << + geturl << url << "/list?proto_version_min=" << proto_version_min << "&proto_version_max=" << CLIENT_PROTOCOL_VERSION_MAX; Json::Value root = fetchJsonValue(geturl.str(), NULL); diff --git a/src/serverlist.h b/src/serverlist.h index c7e21cfc5..15dccca09 100644 --- a/src/serverlist.h +++ b/src/serverlist.h @@ -30,7 +30,7 @@ typedef Json::Value ServerListSpec; namespace ServerList { std::vector getLocal(); -std::vector getOnline(); +std::vector getOnline(const std::string &url); bool deleteEntry(const ServerListSpec &server); bool insert(const ServerListSpec &server);