Luanti 5.15.0-dev
 
Loading...
Searching...
No Matches
mod_configuration.h
Go to the documentation of this file.
1// Luanti
2// SPDX-License-Identifier: LGPL-2.1-or-later
3// Copyright (C) 2013-22 celeron55, Perttu Ahola <celeron55@gmail.com>
4
5#pragma once
6
7#include "mods.h"
8
9struct SubgameSpec;
10
19{
20public:
24 inline bool isConsistent() const { return m_unsatisfied_mods.empty(); }
25
26 inline const std::vector<ModSpec> &getUnsatisfiedMods() const
27 {
28 return m_unsatisfied_mods;
29 }
30
38 const std::vector<ModSpec> &getMods() const { return m_sorted_mods; }
39
40 std::string getUnsatisfiedModsError() const;
41
49 void addModsInPath(const std::string &path, const std::string &virtual_path);
50
54 void addMods(const std::vector<ModSpec> &new_mods);
55
59 void addGameMods(const SubgameSpec &gamespec);
60
67 void addModsFromConfig(const std::string &settings_path,
68 const std::unordered_map<std::string, std::string> &modPaths);
69
74
75private:
76 std::string m_first_mod; // "" <=> no mod
77 std::string m_last_mod; // "" <=> no mod
78
79 std::vector<ModSpec> m_sorted_mods;
80
86
87 // mods with unmet dependencies. Before dependencies are resolved,
88 // this is where all mods are stored. Afterwards this contains
89 // only the ones with really unsatisfied dependencies.
90 std::vector<ModSpec> m_unsatisfied_mods;
91
92 // set of mod names for which an unresolved name conflict
93 // exists. A name conflict happens when two or more mods
94 // at the same level have the same name but different paths.
95 // Levels (mods in higher levels override mods in lower levels):
96 // 1. game mod in modpack; 2. game mod;
97 // 3. world mod in modpack; 4. world mod;
98 // 5. addon mod in modpack; 6. addon mod.
99 std::unordered_set<std::string> m_name_conflicts;
100};
ModConfiguration is a subset of installed mods.
Definition mod_configuration.h:19
const std::vector< ModSpec > & getUnsatisfiedMods() const
Definition mod_configuration.h:26
void addModsInPath(const std::string &path, const std::string &virtual_path)
Adds all mods in the given path.
Definition mod_configuration.cpp:37
void resolveDependencies()
move mods from m_unsatisfied_mods to m_sorted_mods in an order that satisfies dependencies
Definition mod_configuration.cpp:216
std::vector< ModSpec > m_sorted_mods
Definition mod_configuration.h:79
std::string m_first_mod
Definition mod_configuration.h:76
void checkConflictsAndDeps()
Call this function once all mods have been added.
Definition mod_configuration.cpp:194
std::vector< ModSpec > m_unsatisfied_mods
Definition mod_configuration.h:90
const std::vector< ModSpec > & getMods() const
List of mods sorted such that they can be loaded in the given order with all dependencies being fulfi...
Definition mod_configuration.h:38
std::unordered_set< std::string > m_name_conflicts
Definition mod_configuration.h:99
std::string m_last_mod
Definition mod_configuration.h:77
std::string getUnsatisfiedModsError() const
Definition mod_configuration.cpp:17
void addModsFromConfig(const std::string &settings_path, const std::unordered_map< std::string, std::string > &modPaths)
Adds mods specified by a world.mt config.
Definition mod_configuration.cpp:117
bool isConsistent() const
Definition mod_configuration.h:24
void addMods(const std::vector< ModSpec > &new_mods)
Adds all mods in new_mods
Definition mod_configuration.cpp:44
void addGameMods(const SubgameSpec &gamespec)
Adds game mods.
Definition mod_configuration.cpp:107
Definition subgames.h:14