summaryrefslogtreecommitdiff
path: root/archived/projt-launcher/launcher/minecraft/MinecraftInstance.h
diff options
context:
space:
mode:
Diffstat (limited to 'archived/projt-launcher/launcher/minecraft/MinecraftInstance.h')
-rw-r--r--archived/projt-launcher/launcher/minecraft/MinecraftInstance.h212
1 files changed, 212 insertions, 0 deletions
diff --git a/archived/projt-launcher/launcher/minecraft/MinecraftInstance.h b/archived/projt-launcher/launcher/minecraft/MinecraftInstance.h
new file mode 100644
index 0000000000..49242bee5b
--- /dev/null
+++ b/archived/projt-launcher/launcher/minecraft/MinecraftInstance.h
@@ -0,0 +1,212 @@
+// SPDX-License-Identifier: GPL-3.0-only
+// SPDX-FileCopyrightText: 2026 Project Tick
+// SPDX-FileContributor: Project Tick Team
+/*
+ * ProjT Launcher - Minecraft Launcher
+ * Copyright (C) 2026 Project Tick
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * === Upstream License Block (Do Not Modify) ==============================
+ *
+ *
+ *
+ * Prism Launcher - Minecraft Launcher
+ * Copyright (C) 2022 Sefa Eyeoglu <contact@scrumplex.net>
+ * Copyright (C) 2023 TheKodeToad <TheKodeToad@proton.me>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright 2013-2021 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 <java/core/RuntimeVersion.hpp>
+#include <minecraft/mod/DataPackFolderModel.hpp>
+#include <QDir>
+#include <QProcess>
+#include "BaseInstance.h"
+#include "minecraft/launch/MinecraftTarget.hpp"
+#include "minecraft/mod/Mod.hpp"
+
+class ModFolderModel;
+class ResourceFolderModel;
+class ResourcePackFolderModel;
+class ShaderPackFolderModel;
+class TexturePackFolderModel;
+class WorldList;
+namespace projt::launch
+{
+ class LaunchPipeline;
+}
+class PackProfile;
+
+class MinecraftInstance : public BaseInstance
+{
+ Q_OBJECT
+ public:
+ MinecraftInstance(SettingsObjectPtr globalSettings, SettingsObjectPtr settings, const QString& rootDir);
+ virtual ~MinecraftInstance() = default;
+ virtual void saveNow() override;
+
+ void loadSpecificSettings() override;
+
+ /// @deprecated Legacy method - consider moving to PackProfile
+ QString typeName() const override;
+ /// @deprecated Legacy method - traits should come from PackProfile components
+ QSet<QString> traits() const override;
+
+ bool canEdit() const override
+ {
+ return true;
+ }
+
+ bool canExport() const override
+ {
+ return true;
+ }
+
+ ////// Directories and files //////
+
+ ////// Directories and files //////
+ QString jarModsDir() const;
+ QString resourcePacksDir() const;
+ QString texturePacksDir() const;
+ QString shaderPacksDir() const;
+ QString modsRoot() const override;
+ QString coreModsDir() const;
+ QString nilModsDir() const;
+ QString dataPacksDir();
+ QString modsCacheLocation() const;
+ QString libDir() const;
+ QString worldDir() const;
+ QString resourcesDir() const;
+ QDir jarmodsPath() const;
+ QDir librariesPath() const;
+ QDir versionsPath() const;
+ QString instanceConfigFolder() const override;
+
+ // Path to the instance's minecraft directory.
+ QString gameRoot() const override;
+
+ // Path to the instance's minecraft bin directory.
+ QString binRoot() const;
+
+ // where to put the natives during/before launch
+ QString getNativePath() const;
+
+ // where the instance-local libraries should be
+ QString getLocalLibraryPath() const;
+
+ /** Returns whether the instance, with its version, has support for demo mode. */
+ bool supportsDemo() const;
+
+ void updateRuntimeContext() override;
+
+ ////// Profile management //////
+ std::shared_ptr<PackProfile> getPackProfile() const;
+
+ ////// Mod Lists //////
+ std::shared_ptr<ModFolderModel> loaderModList();
+ std::shared_ptr<ModFolderModel> coreModList();
+ std::shared_ptr<ModFolderModel> nilModList();
+ std::shared_ptr<ResourcePackFolderModel> resourcePackList();
+ std::shared_ptr<TexturePackFolderModel> texturePackList();
+ std::shared_ptr<ShaderPackFolderModel> shaderPackList();
+ std::shared_ptr<DataPackFolderModel> dataPackList();
+ QList<std::shared_ptr<ResourceFolderModel>> resourceLists();
+ std::shared_ptr<WorldList> worldList();
+
+ ////// Launch stuff //////
+ QList<Task::Ptr> createUpdateTask() override;
+ shared_qobject_ptr<projt::launch::LaunchPipeline> createLaunchPipeline(AuthSessionPtr account,
+ MinecraftTarget::Ptr targetToJoin) override;
+ QStringList extraArguments();
+ QStringList verboseDescription(AuthSessionPtr session, MinecraftTarget::Ptr targetToJoin) override;
+ QList<Mod*> getJarMods() const;
+ QString createLaunchScript(AuthSessionPtr session, MinecraftTarget::Ptr targetToJoin);
+ /// get arguments passed to java
+ QStringList javaArguments();
+ QString getLauncher();
+ bool shouldApplyOnlineFixes();
+
+ /// get variables for launch command variable substitution/environment
+ QMap<QString, QString> getVariables() override;
+
+ /// create an environment for launching processes
+ QProcessEnvironment createEnvironment() override;
+ QProcessEnvironment createLaunchEnvironment() override;
+
+ QStringList getLogFileSearchPaths() override;
+
+ QString getStatusbarDescription() override;
+
+ /// @deprecated These methods expose internal launch profile data. Use LaunchProfile directly.
+ virtual QStringList getClassPath();
+ /// @deprecated Use LaunchProfile::getNativeLibraries() instead
+ virtual QStringList getNativeJars();
+ /// @deprecated Use LaunchProfile::getMainClass() instead
+ virtual QString getMainClass() const;
+
+ /// @deprecated Argument processing should be in launch steps, not instance
+ virtual QStringList processMinecraftArgs(AuthSessionPtr account, MinecraftTarget::Ptr targetToJoin) const;
+
+ virtual projt::java::RuntimeVersion getRuntimeVersion();
+
+ signals:
+ void profilerChanged();
+
+ protected:
+ QMap<QString, QString> createCensorFilterFromSession(AuthSessionPtr session);
+
+ protected: // data
+ std::shared_ptr<PackProfile> m_components;
+ mutable std::shared_ptr<ModFolderModel> m_loader_mod_list;
+ mutable std::shared_ptr<ModFolderModel> m_core_mod_list;
+ mutable std::shared_ptr<ModFolderModel> m_nil_mod_list;
+ mutable std::shared_ptr<ResourcePackFolderModel> m_resource_pack_list;
+ mutable std::shared_ptr<ShaderPackFolderModel> m_shader_pack_list;
+ mutable std::shared_ptr<TexturePackFolderModel> m_texture_pack_list;
+ mutable std::shared_ptr<DataPackFolderModel> m_data_pack_list;
+ mutable std::shared_ptr<WorldList> m_world_list;
+};
+
+using MinecraftInstancePtr = std::shared_ptr<MinecraftInstance>;