summaryrefslogtreecommitdiffstats
path: root/api/logic/minecraft/legacy/LegacyInstance.h
blob: 7ab89509225987b79e734a98df11768b8dd2756a (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-2018 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 "BaseInstance.h"
#include "minecraft/Mod.h"

#include "multimc_logic_export.h"

class ModList;
class LegacyModList;
class WorldList;
class Task;
/*
 * WHY: Legacy instances - from MultiMC 3 and 4 - are here only to provide a way to upgrade them to the current format.
 */
class MULTIMC_LOGIC_EXPORT LegacyInstance : public BaseInstance
{
	Q_OBJECT
public:

	explicit LegacyInstance(SettingsObjectPtr globalSettings, SettingsObjectPtr settings, const QString &rootDir);

	virtual void init() override {}
	virtual void saveNow() override {}

	/// Path to the instance's minecraft.jar
	QString runnableJar() const;

	//! Path to the instance's modlist file.
	QString modListFile() const;

	////// Directories //////
	QString libDir() const;
	QString savesDir() const;
	QString texturePacksDir() const;
	QString jarModsDir() const;
	QString loaderModsDir() const;
	QString coreModsDir() const;
	QString resourceDir() const;
	virtual QString instanceConfigFolder() const override;
	QString minecraftRoot() const; // Path to the instance's minecraft directory.
	QString binRoot() const; // Path to the instance's minecraft bin directory.

	/// Get the curent base jar of this instance. By default, it's the
	/// versions/$version/$version.jar
	QString baseJar() const;

	/// the default base jar of this instance
	QString defaultBaseJar() const;
	/// the default custom base jar of this instance
	QString defaultCustomBaseJar() const;

	// the main jar that we actually want to keep when migrating the instance
	QString mainJarToPreserve() const;

	/*!
	 * Whether or not custom base jar is used
	 */
	bool shouldUseCustomBaseJar() const;

	/*!
	 * The value of the custom base jar
	 */
	QString customBaseJar() const;

	std::shared_ptr<LegacyModList> jarModList() const;
	QList<Mod> getJarMods() const;
	std::shared_ptr<WorldList> worldList() const;

	/*!
	 * Whether or not the instance's minecraft.jar needs to be rebuilt.
	 * If this is true, when the instance launches, its jar mods will be
	 * re-added to a fresh minecraft.jar file.
	 */
	bool shouldRebuild() const;

	QString currentVersionId() const;
	QString intendedVersionId() const;

	QSet<QString> traits() const override
	{
		return {"legacy-instance", "texturepacks"};
	};

	virtual bool shouldUpdate() const;
	virtual shared_qobject_ptr<Task> createUpdateTask(Net::Mode mode) override;

	virtual QString typeName() const override;

	bool canLaunch() const override
	{
		return false;
	}
	bool canEdit() const override
	{
		return true;
	}
	bool canExport() const override
	{
		return false;
	}
	std::shared_ptr<LaunchTask> createLaunchTask(AuthSessionPtr account) override
	{
		return nullptr;
	}
	IPathMatcher::Ptr getLogFileMatcher() override
	{
		return nullptr;
	}
	QString getLogFileRoot() override
	{
		return minecraftRoot();
	}

	QString getStatusbarDescription() override;
	QStringList verboseDescription(AuthSessionPtr session) override;

	QProcessEnvironment createEnvironment() override
	{
		return QProcessEnvironment();
	}
	QMap<QString, QString> getVariables() const override
	{
		return {};
	}
protected:
	mutable std::shared_ptr<LegacyModList> jar_mod_list;
	mutable std::shared_ptr<WorldList> m_world_list;
};