Luanti 5.17.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 <set>
10#include <unordered_set>
11#include "metadata.h"
12
14struct ModSpec;
15
16#define MODNAME_ALLOWED_CHARS "abcdefghijklmnopqrstuvwxyz0123456789_"
17
19 bool operator()(const ModSpec &a, const ModSpec &b) const;
20};
21using ModSpecList = std::set<ModSpec, ModSpecCompare>;
22
23struct ModSpec
24{
25 bool is_name_explicit = false; //< 'Specified in a .conf file?'
26 std::string name;
27 std::string author;
28 std::string path; // absolute path on disk
29 std::string desc;
30 int release = 0;
31
32 // if normal mod:
33 std::unordered_set<std::string> depends;
34 std::unordered_set<std::string> optdepends;
35 std::unordered_set<std::string> unsatisfied_depends;
36
37 int modpack_depth = 0; //< Modpack depth, 0 = no parent modpack
38 bool is_modpack = false;
39
56 std::string virtual_path;
57
58 // For logging purposes
59 std::vector<const char *> deprecation_msgs;
60
61 // if modpack:
63
65 {
66 }
67
68 ModSpec(const std::string &name, const std::string &path, int modpack_depth, const std::string &virtual_path) :
70 {
71 }
72
73 void checkAndLog() const;
74};
75
81[[nodiscard]] bool parseModContents(ModSpec &mod);
82
91ModSpecList getModsInPath(const std::string &path,
92 const std::string &virtual_path, int modpack_depth = 0);
93
94// replaces modpack Modspecs with their content
95std::vector<ModSpec> flattenMods(const ModSpecList &mods,
96 bool discard_modpacks);
97
98
99class ModStorage : public IMetadata
100{
101public:
102 ModStorage() = delete;
103 ModStorage(const std::string &mod_name, ModStorageDatabase *database);
104 ~ModStorage() = default;
105
106 const std::string &getModName() const { return m_mod_name; }
107
108 void clear() override;
109
110 bool contains(const std::string &name) const override;
111
112 bool setString(const std::string &name, std::string_view var) override;
113
114 const StringMap &getStrings(StringMap *place) const override;
115
116 const std::vector<std::string> &getKeys(std::vector<std::string> *place) const override;
117
118protected:
119 const std::string *getStringRaw(const std::string &name,
120 std::string *place) const override;
121
122private:
123 std::string m_mod_name;
125};
Definition metadata.h:12
Definition database.h:79
const std::string * getStringRaw(const std::string &name, std::string *place) const override
Definition mods.cpp:262
ModStorage()=delete
bool contains(const std::string &name) const override
Definition mods.cpp:235
ModStorageDatabase * m_database
Definition mods.h:124
const std::string & getModName() const
Definition mods.h:106
const StringMap & getStrings(StringMap *place) const override
Definition mods.cpp:248
bool setString(const std::string &name, std::string_view var) override
Definition mods.cpp:240
std::string m_mod_name
Definition mods.h:123
~ModStorage()=default
void clear() override
Definition mods.cpp:230
const std::vector< std::string > & getKeys(std::vector< std::string > *place) const override
Definition mods.cpp:255
std::set< ModSpec, ModSpecCompare > ModSpecList
Definition mods.h:21
std::vector< ModSpec > flattenMods(const ModSpecList &mods, bool discard_modpacks)
Definition mods.cpp:215
bool parseModContents(ModSpec &mod)
Retrieves depends, optdepends, is_modpack and modpack_content.
Definition mods.cpp:60
ModSpecList 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:167
std::unordered_map< std::string, std::string > StringMap
Definition string.h:66
Definition mods.h:18
bool operator()(const ModSpec &a, const ModSpec &b) const
Definition mods.cpp:17
Definition mods.h:24
std::string path
Definition mods.h:28
bool is_modpack
Definition mods.h:38
int modpack_depth
Definition mods.h:37
std::unordered_set< std::string > unsatisfied_depends
Definition mods.h:35
ModSpec(const std::string &name, const std::string &path, int modpack_depth, const std::string &virtual_path)
Definition mods.h:68
bool is_name_explicit
Definition mods.h:25
std::vector< const char * > deprecation_msgs
Definition mods.h:59
std::string desc
Definition mods.h:29
ModSpec()
Definition mods.h:64
int release
Definition mods.h:30
std::string virtual_path
A constructed canonical path to represent this mod's location.
Definition mods.h:56
void checkAndLog() const
Definition mods.cpp:22
std::string author
Definition mods.h:27
ModSpecList modpack_content
Definition mods.h:62
std::unordered_set< std::string > optdepends
Definition mods.h:34
std::string name
Definition mods.h:26
std::unordered_set< std::string > depends
Definition mods.h:33