summaryrefslogtreecommitdiffstats
path: root/logic/minecraft/VersionFile.h
blob: 6c0225b089ad28385f74dfb96cc286bf9a598a59 (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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
#pragma once

#include <QString>
#include <QStringList>
#include <QDateTime>
#include <QSet>

#include <memory>
#include "minecraft/OpSys.h"
#include "minecraft/Rule.h"
#include "ProfilePatch.h"
#include "Library.h"
#include "JarMod.h"

class MinecraftProfile;
class VersionFile;
struct MojangDownloadInfo;
struct MojangAssetIndexInfo;

typedef std::shared_ptr<VersionFile> VersionFilePtr;
class VersionFile : public ProfilePatch
{
public: /* methods */
	virtual void applyTo(MinecraftProfile *version) override;
	virtual bool isMinecraftVersion() override;
	virtual bool hasJarMods() override;
	virtual int getOrder() override
	{
		return order;
	}
	virtual void setOrder(int order) override
	{
		this->order = order;
	}
	virtual QList<JarmodPtr> getJarMods() override
	{
		return jarMods;
	}
	virtual QString getPatchID() override
	{
		return fileId;
	}
	virtual QString getPatchName() override
	{
		return name;
	}
	virtual QString getPatchVersion() override
	{
		return version;
	}
	virtual QString getPatchFilename() override
	{
		return filename;
	}
	virtual bool isCustom() override
	{
		return !m_isVanilla;
	};
	virtual bool isCustomizable() override
	{
		return m_isCustomizable;
	}
	virtual bool isRemovable() override
	{
		return m_isRemovable;
	}
	virtual bool isRevertible() override
	{
		return m_isRevertible;
	}
    virtual bool isMoveable() override
	{
		return m_isMovable;
	}
    virtual bool isEditable() override
	{
		return isCustom();
	}
	virtual bool isVersionChangeable() override
	{
		return false;
	}

	void setVanilla (bool state)
	{
		m_isVanilla = state;
	}
	void setRemovable (bool state)
	{
		m_isRemovable = state;
	}
	void setRevertible (bool state)
	{
		m_isRevertible = state;
	}
	void setCustomizable (bool state)
	{
		m_isCustomizable = state;
	}
	void setMovable (bool state)
	{
		m_isMovable = state;
	}


public: /* data */
	/// MultiMC: order hint for this version file if no explicit order is set
	int order = 0;

	// Flags for UI and version file manipulation in general
	bool m_isVanilla = false;
	bool m_isRemovable = false;
	bool m_isRevertible = false;
	bool m_isCustomizable = false;
	bool m_isMovable = false;

	/// MultiMC: filename of the file this was loaded from
	QString filename;

	/// MultiMC: human readable name of this package
	QString name;

	/// MultiMC: package ID of this package
	QString fileId;

	/// MultiMC: version of this package
	QString version;

	/// MultiMC: dependency on a Minecraft version
	QString mcVersion;

	/// Mojang: used to version the Mojang version format
	int minimumLauncherVersion = -1;

	/// Mojang: version of Minecraft this is
	QString id;

	/// Mojang: class to launch Minecraft with
	QString mainClass;

	/// MultiMC: class to launch legacy Minecraft with (ambed in a custom window)
	QString appletClass;

	/// Mojang: Minecraft launch arguments (may contain placeholders for variable substitution)
	QString overwriteMinecraftArguments;

	/// MultiMC: Minecraft launch arguments, additive variant
	QString addMinecraftArguments;

	/// Mojang: DEPRECATED variant of the Minecraft arguments, hardcoded, do not use!
	QString processArguments;

	/// Mojang: type of the Minecraft version
	QString type;

	/// Mojang: the time this version was actually released by Mojang
	QDateTime m_releaseTime;

	/// Mojang: the time this version was last updated by Mojang
	QDateTime m_updateTime;

	/// Mojang: DEPRECATED asset group to be used with Minecraft
	QString assets;

	/// MultiMC: override list of tweaker mod arguments for launchwrapper (replaces the previously assembled lists)
	bool shouldOverwriteTweakers = false;
	QStringList overwriteTweakers;

	/// MultiMC: list of tweaker mod arguments for launchwrapper
	QStringList addTweakers;

	/// MultiMC: override list of libraries (replaces the previously assembled lists)
	bool shouldOverwriteLibs = false;
	QList<LibraryPtr> overwriteLibs;

	/// Mojang: list of libraries to add to the version
	QList<LibraryPtr> addLibs;

	/// MultiMC: list of attached traits of this version file - used to enable features
	QSet<QString> traits;

	/// MultiMC: list of jar mods added to this version
	QList<JarmodPtr> jarMods;

	// Mojang: list of 'downloads' - client jar, server jar, windows server exe, maybe more.
	QMap <QString, std::shared_ptr<MojangDownloadInfo>> mojangDownloads;

	// Mojang: extended asset index download information
	std::shared_ptr<MojangAssetIndexInfo> mojangAssetIndex;
};