forked from Mirrorlandia_minetest/minetest
Fix media overriding regression (#12602)
This commit is contained in:
parent
6611d7e1ee
commit
99c8295e71
@ -94,7 +94,11 @@ void ServerModManager::getModNames(std::vector<std::string> &modlist) const
|
|||||||
|
|
||||||
void ServerModManager::getModsMediaPaths(std::vector<std::string> &paths) const
|
void ServerModManager::getModsMediaPaths(std::vector<std::string> &paths) const
|
||||||
{
|
{
|
||||||
for (const auto &spec : configuration.getMods()) {
|
// Iterate mods in reverse load order: Media loading expects higher priority media files first
|
||||||
|
// and mods loading later should be able to override media of already loaded mods
|
||||||
|
const auto mods = configuration.getMods();
|
||||||
|
for (auto it = mods.crbegin(); it != mods.crend(); it++) {
|
||||||
|
const ModSpec &spec = *it;
|
||||||
fs::GetRecursiveDirs(paths, spec.path + DIR_DELIM + "textures");
|
fs::GetRecursiveDirs(paths, spec.path + DIR_DELIM + "textures");
|
||||||
fs::GetRecursiveDirs(paths, spec.path + DIR_DELIM + "sounds");
|
fs::GetRecursiveDirs(paths, spec.path + DIR_DELIM + "sounds");
|
||||||
fs::GetRecursiveDirs(paths, spec.path + DIR_DELIM + "media");
|
fs::GetRecursiveDirs(paths, spec.path + DIR_DELIM + "media");
|
||||||
|
@ -22,6 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||||||
#include "server/mods.h"
|
#include "server/mods.h"
|
||||||
#include "settings.h"
|
#include "settings.h"
|
||||||
#include "test_config.h"
|
#include "test_config.h"
|
||||||
|
#include "util/string.h"
|
||||||
|
|
||||||
class TestServerModManager : public TestBase
|
class TestServerModManager : public TestBase
|
||||||
{
|
{
|
||||||
@ -190,4 +191,11 @@ void TestServerModManager::testGetModMediaPaths()
|
|||||||
std::vector<std::string> result;
|
std::vector<std::string> result;
|
||||||
sm.getModsMediaPaths(result);
|
sm.getModsMediaPaths(result);
|
||||||
UASSERTEQ(bool, result.empty(), false);
|
UASSERTEQ(bool, result.empty(), false);
|
||||||
|
|
||||||
|
// Test media overriding:
|
||||||
|
// unittests depends on basenodes to override default_dirt.png,
|
||||||
|
// thus the unittests texture path must come first in the returned media paths to take priority
|
||||||
|
auto it = std::find(result.begin(), result.end(), sm.getModSpec("unittests")->path + DIR_DELIM + "textures");
|
||||||
|
UASSERT(it != result.end());
|
||||||
|
UASSERT(std::find(++it, result.end(), sm.getModSpec("basenodes")->path + DIR_DELIM + "textures") != result.end());
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user