summaryrefslogtreecommitdiffstats
path: root/api/logic/minecraft/Mod.h
blob: 63bf5ab44f9975d432d956ee0ce625a6e3d32696 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
/* Copyright 2013-2019 MultiMC Contributors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#pragma once
#include <QFileInfo>
#include <QDateTime>

class Mod
{
public:
    enum ModType
    {
        MOD_UNKNOWN,    //!< Indicates an unspecified mod type.
        MOD_ZIPFILE,    //!< The mod is a zip file containing the mod's class files.
        MOD_SINGLEFILE, //!< The mod is a single file (not a zip file).
        MOD_FOLDER,     //!< The mod is in a folder on the filesystem.
        MOD_LITEMOD, //!< The mod is a litemod
    };

    Mod(const QFileInfo &file);

    QFileInfo filename() const
    {
        return m_file;
    }
    QString mmc_id() const
    {
        return m_mmc_id;
    }
    QString mod_id() const
    {
        return m_mod_id;
    }
    ModType type() const
    {
        return m_type;
    }
    QString mcversion() const
    {
        return m_mcversion;
    }
    ;
    bool valid()
    {
        return m_type != MOD_UNKNOWN;
    }
    QString name() const
    {
        QString name = m_name.trimmed();
        if(name.isEmpty() || name == "Example Mod")
        {
            return m_mmc_id;
        }
        return m_name;
    }

    QString version() const;

    QString homeurl() const
    {
        return m_homeurl;
    }

    QString description() const
    {
        return m_description;
    }

    QString authors() const
    {
        return m_authors;
    }

    QString credits() const
    {
        return m_credits;
    }

    QDateTime dateTimeChanged() const
    {
        return m_changedDateTime;
    }

    bool enabled() const
    {
        return m_enabled;
    }

    bool enable(bool value);

    // delete all the files of this mod
    bool destroy();
    // replace this mod with a copy of the other
    bool replace(Mod &with);
    // change the mod's filesystem path (used by mod lists for *MAGIC* purposes)
    void repath(const QFileInfo &file);

    // WEAK compare operator - used for replacing mods
    bool operator==(const Mod &other) const;
    bool strongCompare(const Mod &other) const;

private:
    void ReadMCModInfo(QByteArray contents);
    void ReadFabricModInfo(QByteArray contents);
    void ReadForgeInfo(QByteArray contents);
    void ReadLiteModInfo(QByteArray contents);

protected:

    // FIXME: what do do with those? HMM...
    /*
    void ReadModInfoData(QString info);
    void ReadForgeInfoData(QString infoFileData);
    */

    QFileInfo m_file;
    QDateTime m_changedDateTime;
    QString m_mmc_id;
    QString m_mod_id;
    bool m_enabled = true;
    QString m_name;
    QString m_version;
    QString m_mcversion;
    QString m_homeurl;
    QString m_updateurl;
    QString m_description;
    QString m_authors;
    QString m_credits;

    ModType m_type;
};