Luanti 5.15.0-dev
 
Loading...
Searching...
No Matches
mods.h
Go to the documentation of this file.
1// Luanti
2// SPDX-License-Identifier: LGPL-2.1-or-later
3// Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
4
5#pragma once
6
7#include <vector>
8#include <string>
9#include <map>
10#include <unordered_set>
11#include "metadata.h"
12
14
15#define MODNAME_ALLOWED_CHARS "abcdefghijklmnopqrstuvwxyz0123456789_"
16
17struct ModSpec
18{
19 bool is_name_explicit = false; //< 'Specified in a .conf file?'
20 std::string name;
21 std::string author;
22 std::string path; // absolute path on disk
23 std::string desc;
24 int release = 0;
25
26 // if normal mod:
27 std::unordered_set<std::string> depends;
28 std::unordered_set<std::string> optdepends;
29 std::unordered_set<std::string> unsatisfied_depends;
30
31 int modpack_depth = 0; //< Modpack depth, 0 = no parent modpack
32 bool is_modpack = false;
33
50 std::string virtual_path;
51
52 // For logging purposes
53 std::vector<const char *> deprecation_msgs;
54
55 // if modpack:
56 std::map<std::string, ModSpec> modpack_content;
57
59 {
60 }
61
62 ModSpec(const std::string &name, const std::string &path, int modpack_depth, const std::string &virtual_path) :
64 {
65 }
66
67 void checkAndLog() const;
68};
69
75[[nodiscard]] bool parseModContents(ModSpec &mod);
76
85std::map<std::string, ModSpec> getModsInPath(const std::string &path,
86 const std::string &virtual_path, int modpack_depth = 0);
87
88// replaces modpack Modspecs with their content
89std::vector<ModSpec> flattenMods(const std::map<std::string, ModSpec> &mods,
90 bool discard_modpacks = true);
91
92
93class ModStorage : public IMetadata
94{
95public:
96 ModStorage() = delete;
97 ModStorage(const std::string &mod_name, ModStorageDatabase *database);
98 ~ModStorage() = default;
99
100 const std::string &getModName() const { return m_mod_name; }
101
102 void clear() override;
103
104 bool contains(const std::string &name) const override;
105
106 bool setString(const std::string &name, std::string_view var) override;
107
108 const StringMap &getStrings(StringMap *place) const override;
109
110 const std::vector<std::string> &getKeys(std::vector<std::string> *place) const override;
111
112protected:
113 const std::string *getStringRaw(const std::string &name,
114 std::string *place) const override;
115
116private:
117 std::string m_mod_name;
119};
Definition metadata.h:12
Definition database.h:79
Definition mods.h:94
const std::string * getStringRaw(const std::string &name, std::string *place) const override
Definition mods.cpp:254
ModStorage()=delete
bool contains(const std::string &name) const override
Definition mods.cpp:227
ModStorageDatabase * m_database
Definition mods.h:118
const std::string & getModName() const
Definition mods.h:100
const StringMap & getStrings(StringMap *place) const override
Definition mods.cpp:240
bool setString(const std::string &name, std::string_view var) override
Definition mods.cpp:232
std::string m_mod_name
Definition mods.h:117
~ModStorage()=default
void clear() override
Definition mods.cpp:222
const std::vector< std::string > & getKeys(std::vector< std::string > *place) const override
Definition mods.cpp:247
std::vector< ModSpec > flattenMods(const std::map< std::string, ModSpec > &mods, bool discard_modpacks=true)
Definition mods.cpp:198
std::map< std::string, ModSpec > getModsInPath(const std::string &path, const std::string &virtual_path, int modpack_depth=0)
Gets a list of all mods and modpacks in path.
Definition mods.cpp:162
bool parseModContents(ModSpec &mod)
Retrieves depends, optdepends, is_modpack and modpack_content.
Definition mods.cpp:55
std::unordered_map< std::string, std::string > StringMap
Definition string.h:66
Definition mods.h:18
std::string path
Definition mods.h:22
bool is_modpack
Definition mods.h:32
int modpack_depth
Definition mods.h:31
std::unordered_set< std::string > unsatisfied_depends
Definition mods.h:29
ModSpec(const std::string &name, const std::string &path, int modpack_depth, const std::string &virtual_path)
Definition mods.h:62
bool is_name_explicit
Definition mods.h:19
std::vector< const char * > deprecation_msgs
Definition mods.h:53
std::string desc
Definition mods.h:23
std::map< std::string, ModSpec > modpack_content
Definition mods.h:56
ModSpec()
Definition mods.h:58
int release
Definition mods.h:24
std::string virtual_path
A constructed canonical path to represent this mod's location.
Definition mods.h:50
void checkAndLog() const
Definition mods.cpp:17
std::string author
Definition mods.h:21
std::unordered_set< std::string > optdepends
Definition mods.h:28
std::string name
Definition mods.h:20
std::unordered_set< std::string > depends
Definition mods.h:27