diff options
Diffstat (limited to 'archived/projt-launcher/launcher/minecraft/MinecraftInstance.h')
| -rw-r--r-- | archived/projt-launcher/launcher/minecraft/MinecraftInstance.h | 212 |
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>; |
