diff options
124 files changed, 2658 insertions, 767 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 20fe66dd..c0e5b50a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -487,6 +487,7 @@ jobs: runs-on: ubuntu-20.04 steps: - name: Checkout + if: inputs.build_type == 'Debug' uses: actions/checkout@v3 with: submodules: 'true' @@ -524,3 +525,4 @@ jobs: with: bundle: "Prism Launcher.flatpak" manifest-path: flatpak/org.prismlauncher.PrismLauncher.yml + cache-key: flatpak-${{ github.sha }}-x86_64 @@ -398,3 +398,20 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +## Breeze icons + + Copyright (C) 2014 Uri Herrera <uri_herrera@nitrux.in> and others + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library. If not, see <http://www.gnu.org/licenses/>. diff --git a/launcher/Application.cpp b/launcher/Application.cpp index c5594b21..4ba9eb9b 100644 --- a/launcher/Application.cpp +++ b/launcher/Application.cpp @@ -1,4 +1,7 @@ -// SPDX-License-Identifier: GPL-3.0-only +// SPDX-FileCopyrightText: 2022 Sefa Eyeoglu <contact@scrumplex.net> +// +// SPDX-License-Identifier: GPL-3.0-only AND Apache-2.0 + /* * Prism Launcher - Minecraft Launcher * Copyright (C) 2022 Sefa Eyeoglu <contact@scrumplex.net> @@ -38,10 +41,14 @@ #include "Application.h" #include "BuildConfig.h" +#include "DataMigrationTask.h" #include "net/PasteUpload.h" +#include "pathmatcher/MultiMatcher.h" +#include "pathmatcher/SimplePrefixMatcher.h" #include "ui/MainWindow.h" #include "ui/InstanceWindow.h" +#include "ui/dialogs/ProgressDialog.h" #include "ui/instanceview/AccessibleInstanceView.h" #include "ui/pages/BasePageProvider.h" @@ -301,22 +308,6 @@ Application::Application(int &argc, char **argv) : QApplication(argc, argv) dataPath = foo.absolutePath(); adjustedBy = "Persistent data path"; - QDir polymcData(FS::PathCombine(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation), "PolyMC")); - if (polymcData.exists()) { - dataPath = polymcData.absolutePath(); - adjustedBy = "PolyMC data path"; - } - -#ifdef Q_OS_LINUX - // TODO: this should be removed in a future version - // TODO: provide a migration path similar to macOS migration - QDir bar(FS::PathCombine(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation), "polymc")); - if (bar.exists()) { - dataPath = bar.absolutePath(); - adjustedBy = "Legacy data path"; - } -#endif - #ifndef Q_OS_MACOS if (QFile::exists(FS::PathCombine(m_rootPath, "portable.txt"))) { dataPath = m_rootPath; @@ -440,6 +431,15 @@ Application::Application(int &argc, char **argv) : QApplication(argc, argv) } { + bool migrated = false; + + if (!migrated) + migrated = handleDataMigration(dataPath, FS::PathCombine(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation), "../../PolyMC"), "PolyMC", "polymc.cfg"); + if (!migrated) + migrated = handleDataMigration(dataPath, FS::PathCombine(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation), "../../multimc"), "MultiMC", "multimc.cfg"); + } + + { qDebug() << BuildConfig.LAUNCHER_DISPLAYNAME << ", (c) 2013-2021 " << BuildConfig.LAUNCHER_COPYRIGHT; qDebug() << "Version : " << BuildConfig.printableVersionString(); @@ -1605,3 +1605,88 @@ int Application::suitableMaxMem() return maxMemoryAlloc; } + +bool Application::handleDataMigration(const QString& currentData, + const QString& oldData, + const QString& name, + const QString& configFile) const +{ + QString nomigratePath = FS::PathCombine(currentData, name + "_nomigrate.txt"); + QStringList configPaths = { FS::PathCombine(oldData, configFile), FS::PathCombine(oldData, BuildConfig.LAUNCHER_CONFIGFILE) }; + + QLocale locale; + + // Is there a valid config at the old location? + bool configExists = false; + for (QString configPath : configPaths) { + configExists |= QFileInfo::exists(configPath); + } + + if (!configExists || QFileInfo::exists(nomigratePath)) { + qDebug() << "<> No migration needed from" << name; + return false; + } + + QString message; + bool currentExists = QFileInfo::exists(FS::PathCombine(currentData, BuildConfig.LAUNCHER_CONFIGFILE)); + + if (currentExists) { + message = tr("Old data from %1 was found, but you already have existing data for %2. Sadly you will need to migrate yourself. Do " + "you want to be reminded of the pending data migration next time you start %2?") + .arg(name, BuildConfig.LAUNCHER_DISPLAYNAME); + } else { + message = tr("It looks like you used %1 before. Do you want to migrate your data to the new location of %2?") + .arg(name, BuildConfig.LAUNCHER_DISPLAYNAME); + + QFileInfo logInfo(FS::PathCombine(oldData, name + "-0.log")); + if (logInfo.exists()) { + QString lastModified = logInfo.lastModified().toString(locale.dateFormat()); + message = tr("It looks like you used %1 on %2 before. Do you want to migrate your data to the new location of %3?") + .arg(name, lastModified, BuildConfig.LAUNCHER_DISPLAYNAME); + } + } + + QMessageBox::StandardButton askMoveDialogue = + QMessageBox::question(nullptr, BuildConfig.LAUNCHER_DISPLAYNAME, message, QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes); + + auto setDoNotMigrate = [&nomigratePath] { + QFile file(nomigratePath); + file.open(QIODevice::WriteOnly); + }; + + // create no-migrate file if user doesn't want to migrate + if (askMoveDialogue != QMessageBox::Yes) { + qDebug() << "<> Migration declined for" << name; + setDoNotMigrate(); + return currentExists; // cancel further migrations, if we already have a data directory + } + + if (!currentExists) { + // Migrate! + auto matcher = std::make_shared<MultiMatcher>(); + matcher->add(std::make_shared<SimplePrefixMatcher>(configFile)); + matcher->add(std::make_shared<SimplePrefixMatcher>( + BuildConfig.LAUNCHER_CONFIGFILE)); // it's possible that we already used that directory before + matcher->add(std::make_shared<SimplePrefixMatcher>("accounts.json")); + matcher->add(std::make_shared<SimplePrefixMatcher>("accounts/")); + matcher->add(std::make_shared<SimplePrefixMatcher>("assets/")); + matcher->add(std::make_shared<SimplePrefixMatcher>("icons/")); + matcher->add(std::make_shared<SimplePrefixMatcher>("instances/")); + matcher->add(std::make_shared<SimplePrefixMatcher>("libraries/")); + matcher->add(std::make_shared<SimplePrefixMatcher>("mods/")); + matcher->add(std::make_shared<SimplePrefixMatcher>("themes/")); + + ProgressDialog diag; + DataMigrationTask task(nullptr, oldData, currentData, matcher); + if (diag.execWithTask(&task)) { + qDebug() << "<> Migration succeeded"; + setDoNotMigrate(); + } else { + QString reason = task.failReason(); + QMessageBox::critical(nullptr, BuildConfig.LAUNCHER_DISPLAYNAME, tr("Migration failed! Reason: %1").arg(reason)); + } + } else { + qWarning() << "<> Migration was skipped, due to existing data"; + } + return true; +} diff --git a/launcher/Application.h b/launcher/Application.h index 4c2f62d4..7884227a 100644 --- a/launcher/Application.h +++ b/launcher/Application.h @@ -231,6 +231,7 @@ private slots: void setupWizardFinished(int status); private: + bool handleDataMigration(const QString & currentData, const QString & oldData, const QString & name, const QString & configFile) const; bool createSetupWizard(); void performMainStartupAction(); diff --git a/launcher/CMakeLists.txt b/launcher/CMakeLists.txt index 58d5d964..3eb765dc 100644 --- a/launcher/CMakeLists.txt +++ b/launcher/CMakeLists.txt @@ -97,6 +97,7 @@ set(PATHMATCHER_SOURCES pathmatcher/IPathMatcher.h pathmatcher/MultiMatcher.h pathmatcher/RegexpMatcher.h + pathmatcher/SimplePrefixMatcher.h ) set(NET_SOURCES @@ -575,6 +576,8 @@ SET(LAUNCHER_SOURCES # Application base Application.h Application.cpp + DataMigrationTask.h + DataMigrationTask.cpp UpdateController.cpp UpdateController.h ApplicationMessage.h @@ -598,6 +601,8 @@ SET(LAUNCHER_SOURCES resources/pe_light/pe_light.qrc resources/pe_colored/pe_colored.qrc resources/pe_blue/pe_blue.qrc + resources/breeze_dark/breeze_dark.qrc + resources/breeze_light/breeze_light.qrc resources/OSX/OSX.qrc resources/iOS/iOS.qrc resources/flat/flat.qrc @@ -960,6 +965,8 @@ qt_add_resources(LAUNCHER_RESOURCES resources/pe_light/pe_light.qrc resources/pe_colored/pe_colored.qrc resources/pe_blue/pe_blue.qrc + resources/breeze_dark/breeze_dark.qrc + resources/breeze_light/breeze_light.qrc resources/OSX/OSX.qrc resources/iOS/iOS.qrc resources/flat/flat.qrc diff --git a/launcher/DataMigrationTask.cpp b/launcher/DataMigrationTask.cpp new file mode 100644 index 00000000..27ce5f01 --- /dev/null +++ b/launcher/DataMigrationTask.cpp @@ -0,0 +1,96 @@ +// SPDX-FileCopyrightText: 2022 Sefa Eyeoglu <contact@scrumplex.net> +// +// SPDX-License-Identifier: GPL-3.0-only + +#include "DataMigrationTask.h" + +#include "FileSystem.h" + +#include <QDirIterator> +#include <QFileInfo> +#include <QMap> + +#include <QtConcurrent> + +DataMigrationTask::DataMigrationTask(QObject* parent, + const QString& sourcePath, + const QString& targetPath, + const IPathMatcher::Ptr pathMatcher) + : Task(parent), m_sourcePath(sourcePath), m_targetPath(targetPath), m_pathMatcher(pathMatcher), m_copy(sourcePath, targetPath) +{ + m_copy.matcher(m_pathMatcher.get()).whitelist(true); +} + +void DataMigrationTask::executeTask() +{ + setStatus(tr("Scanning files...")); + + // 1. Scan + // Check how many files we gotta copy + m_copyFuture = QtConcurrent::run(QThreadPool::globalInstance(), [&] { + return m_copy(true); // dry run to collect amount of files + }); + connect(&m_copyFutureWatcher, &QFutureWatcher<bool>::finished, this, &DataMigrationTask::dryRunFinished); + connect(&m_copyFutureWatcher, &QFutureWatcher<bool>::canceled, this, &DataMigrationTask::dryRunAborted); + m_copyFutureWatcher.setFuture(m_copyFuture); +} + +void DataMigrationTask::dryRunFinished() +{ + disconnect(&m_copyFutureWatcher, &QFutureWatcher<bool>::finished, this, &DataMigrationTask::dryRunFinished); + disconnect(&m_copyFutureWatcher, &QFutureWatcher<bool>::canceled, this, &DataMigrationTask::dryRunAborted); + +#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) + if (!m_copyFuture.isValid() || !m_copyFuture.result()) { +#else + if (!m_copyFuture.result()) { +#endif + emitFailed(tr("Failed to scan source path.")); + return; + } + + // 2. Copy + // Actually copy all files now. + m_toCopy = m_copy.totalCopied(); + connect(&m_copy, &FS::copy::fileCopied, [&, this](const QString& relativeName) { + QString shortenedName = relativeName; + // shorten the filename to hopefully fit into one line + if (shortenedName.length() > 50) + shortenedName = relativeName.left(20) + "…" + relativeName.right(29); + setProgress(m_copy.totalCopied(), m_toCopy); + setStatus(tr("Copying %1…").arg(shortenedName)); + }); + m_copyFuture = QtConcurrent::run(QThreadPool::globalInstance(), [&] { + return m_copy(false); // actually copy now + }); + connect(&m_copyFutureWatcher, &QFutureWatcher<bool>::finished, this, &DataMigrationTask::copyFinished); + connect(&m_copyFutureWatcher, &QFutureWatcher<bool>::canceled, this, &DataMigrationTask::copyAborted); + m_copyFutureWatcher.setFuture(m_copyFuture); +} + +void DataMigrationTask::dryRunAborted() +{ + emitFailed(tr("Aborted")); +} + +void DataMigrationTask::copyFinished() +{ + disconnect(&m_copyFutureWatcher, &QFutureWatcher<bool>::finished, this, &DataMigrationTask::copyFinished); + disconnect(&m_copyFutureWatcher, &QFutureWatcher<bool>::canceled, this, &DataMigrationTask::copyAborted); + +#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) + if (!m_copyFuture.isValid() || !m_copyFuture.result()) { +#else + if (!m_copyFuture.result()) { +#endif + emitFailed(tr("Some paths could not be copied!")); + return; + } + + emitSucceeded(); +} + +void DataMigrationTask::copyAborted() +{ + emitFailed(tr("Aborted")); +} diff --git a/launcher/DataMigrationTask.h b/launcher/DataMigrationTask.h new file mode 100644 index 00000000..6cc23b1a --- /dev/null +++ b/launcher/DataMigrationTask.h @@ -0,0 +1,42 @@ +// SPDX-FileCopyrightText: 2022 Sefa Eyeoglu <contact@scrumplex.net> +// +// SPDX-License-Identifier: GPL-3.0-only + +#pragma once + +#include "FileSystem.h" +#include "pathmatcher/IPathMatcher.h" +#include "tasks/Task.h" + +#include <QFuture> +#include <QFutureWatcher> + +/* + * Migrate existing data from other MMC-like launchers. + */ + +class DataMigrationTask : public Task { + Q_OBJECT + public: + explicit DataMigrationTask(QObject* parent, const QString& sourcePath, const QString& targetPath, const IPathMatcher::Ptr pathmatcher); + ~DataMigrationTask() override = default; + + protected: + virtual void executeTask() override; + + protected slots: + void dryRunFinished(); + void dryRunAborted(); + void copyFinished(); + void copyAborted(); + + private: + const QString& m_sourcePath; + const QString& m_targetPath; + const IPathMatcher::Ptr m_pathMatcher; + + FS::copy m_copy; + int m_toCopy = 0; + QFuture<bool> m_copyFuture; + QFutureWatcher<bool> m_copyFutureWatcher; +}; diff --git a/launcher/FileSystem.cpp b/launcher/FileSystem.cpp index 4a8f4bd3..0c6527b1 100644 --- a/launcher/FileSystem.cpp +++ b/launcher/FileSystem.cpp @@ -152,9 +152,10 @@ bool ensureFolderPathExists(QString foldernamepath) /// @brief Copies a directory and it's contents from src to dest /// @param offset subdirectory form src to copy to dest /// @return if there was an error during the filecopy -bool copy::operator()(const QString& offset) +bool copy::operator()(const QString& offset, bool dryRun) { using copy_opts = fs::copy_options; + m_copied = 0; // reset counter // NOTE always deep copy on windows. the alternatives are too messy. #if defined Q_OS_WIN32 @@ -174,13 +175,14 @@ bool copy::operator()(const QString& offset) // Function that'll do the actual copying auto copy_file = [&](QString src_path, QString relative_dst_path) { - if (m_blacklist && m_blacklist->matches(relative_dst_path)) + if (m_matcher && (m_matcher->matches(relative_dst_path) != m_whitelist)) return; auto dst_path = PathCombine(dst, relative_dst_path); - ensureFilePathExists(dst_path); - - fs::copy(StringUtils::toStdString(src_path), StringUtils::toStdString(dst_path), opt, err); + if (!dryRun) { + ensureFilePathExists(dst_path); + fs::copy(StringUtils::toStdString(src_path), StringUtils::toStdString(dst_path), opt, err); + } if (err) { qWarning() << "Failed to copy files:" << QString::fromStdString(err.message()); qDebug() << "Source file:" << src_path; diff --git a/launcher/FileSystem.h b/launcher/FileSystem.h index b7e175fd..a9a81123 100644 --- a/launcher/FileSystem.h +++ b/launcher/FileSystem.h @@ -40,6 +40,7 @@ #include <QDir> #include <QFlags> +#include <QObject> namespace FS { @@ -76,9 +77,10 @@ bool ensureFilePathExists(QString filenamepath); bool ensureFolderPathExists(QString filenamepath); /// @brief Copies a directory and it's contents from src to dest -class copy { +class copy : public QObject { + Q_OBJECT public: - copy(const QString& src, const QString& dst) + copy(const QString& src, const QString& dst, QObject* parent = nullptr) : QObject(parent) { m_src.setPath(src); m_dst.setPath(dst); @@ -88,21 +90,35 @@ class copy { m_followSymlinks = follow; return *this; } - copy& blacklist(const IPathMatcher* filter) + copy& matcher(const IPathMatcher* filter) { - m_blacklist = filter; + m_matcher = filter; return *this; } - bool operator()() { return operator()(QString()); } + copy& whitelist(bool whitelist) + { + m_whitelist = whitelist; + return *this; + } + + bool operator()(bool dryRun = false) { return operator()(QString(), dryRun); } + + int totalCopied() { return m_copied; } + + signals: + void fileCopied(const QString& relativeName); + // TODO: maybe add a "shouldCopy" signal in the future? private: - bool operator()(const QString& offset); + bool operator()(const QString& offset, bool dryRun = false); private: bool m_followSymlinks = true; - const IPathMatcher* m_blacklist = nullptr; + const IPathMatcher* m_matcher = nullptr; + bool m_whitelist = false; QDir m_src; QDir m_dst; + int m_copied; }; /** diff --git a/launcher/InstanceCopyTask.cpp b/launcher/InstanceCopyTask.cpp index a4ea947d..0a83ed9c 100644 --- a/launcher/InstanceCopyTask.cpp +++ b/launcher/InstanceCopyTask.cpp @@ -26,9 +26,11 @@ void InstanceCopyTask::executeTask() setStatus(tr("Copying instance %1").arg(m_origInstance->name())); FS::copy folderCopy(m_origInstance->instanceRoot(), m_stagingPath); - folderCopy.followSymlinks(false).blacklist(m_matcher.get()); + folderCopy.followSymlinks(false).matcher(m_matcher.get()); - m_copyFuture = QtConcurrent::run(QThreadPool::globalInstance(), folderCopy); + m_copyFuture = QtConcurrent::run(QThreadPool::globalInstance(), [&folderCopy]{ + return folderCopy(); + }); connect(&m_copyFutureWatcher, &QFutureWatcher<bool>::finished, this, &InstanceCopyTask::copyFinished); connect(&m_copyFutureWatcher, &QFutureWatcher<bool>::canceled, this, &InstanceCopyTask::copyAborted); m_copyFutureWatcher.setFuture(m_copyFuture); diff --git a/launcher/main.cpp b/launcher/main.cpp index df596449..b63f8bfd 100644 --- a/launcher/main.cpp +++ b/launcher/main.cpp @@ -81,6 +81,8 @@ int main(int argc, char *argv[]) Q_INIT_RESOURCE(pe_light); Q_INIT_RESOURCE(pe_blue); Q_INIT_RESOURCE(pe_colored); + Q_INIT_RESOURCE(breeze_dark); + Q_INIT_RESOURCE(breeze_light); Q_INIT_RESOURCE(OSX); Q_INIT_RESOURCE(iOS); Q_INIT_RESOURCE(flat); diff --git a/launcher/minecraft/MinecraftInstance.cpp b/launcher/minecraft/MinecraftInstance.cpp index de22b365..70d0b949 100644 --- a/launcher/minecraft/MinecraftInstance.cpp +++ b/launcher/minecraft/MinecraftInstance.cpp @@ -1,8 +1,9 @@ // SPDX-License-Identifier: GPL-3.0-only /* - * PolyMC - Minecraft Launcher + * Prism Launcher - Minecraft Launcher * Copyright (C) 2022 Sefa Eyeoglu <contact@scrumplex.net> * Copyright (C) 2022 Jamie Mansfield <jmansfield@cadixdev.org> + * Copyright (C) 2022 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 @@ -436,6 +437,17 @@ QStringList MinecraftInstance::javaArguments() return args; } +QString MinecraftInstance::getLauncher() +{ + auto profile = m_components->getProfile(); + + // use legacy launcher if the traits are set + if (profile->getTraits().contains("legacyLaunch") || profile->getTraits().contains("alphaLaunch")) + return "legacy"; + + return "standard"; +} + QMap<QString, QString> MinecraftInstance::getVariables() { QMap<QString, QString> out; @@ -627,26 +639,13 @@ QString MinecraftInstance::createLaunchScript(AuthSessionPtr session, MinecraftS launchScript += "sessionId " + session->session + "\n"; } - // libraries and class path. - { - QStringList jars, nativeJars; - profile->getLibraryFiles(runtimeContext(), jars, nativeJars, getLocalLibraryPath(), binRoot()); - for(auto file: jars) - { - launchScript += "cp " + file + "\n"; - } - for(auto file: nativeJars) - { - launchScript += "ext " + file + "\n"; - } - launchScript += "natives " + getNativePath() + "\n"; - } - for (auto trait : profile->getTraits()) { launchScript += "traits " + trait + "\n"; } - launchScript += "launcher onesix\n"; + + launchScript += "launcher " + getLauncher() + "\n"; + // qDebug() << "Generated launch script:" << launchScript; return launchScript; } @@ -782,6 +781,8 @@ QStringList MinecraftInstance::verboseDescription(AuthSessionPtr session, Minecr out << "Window size: " + QString::number(width) + " x " + QString::number(height); } out << ""; + out << "Launcher: " + getLauncher(); + out << ""; return out; } diff --git a/launcher/minecraft/MinecraftInstance.h b/launcher/minecraft/MinecraftInstance.h index 1895d187..1bbd7b83 100644 --- a/launcher/minecraft/MinecraftInstance.h +++ b/launcher/minecraft/MinecraftInstance.h @@ -1,7 +1,8 @@ // SPDX-License-Identifier: GPL-3.0-only /* - * PolyMC - Minecraft Launcher + * Prism Launcher - Minecraft Launcher * Copyright (C) 2022 Sefa Eyeoglu <contact@scrumplex.net> + * Copyright (C) 2022 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 @@ -130,6 +131,7 @@ public: QString createLaunchScript(AuthSessionPtr session, MinecraftServerTargetPtr serverToJoin); /// get arguments passed to java QStringList javaArguments(); + QString getLauncher(); /// get variables for launch command variable substitution/environment QMap<QString, QString> getVariables() override; diff --git a/launcher/pathmatcher/SimplePrefixMatcher.h b/launcher/pathmatcher/SimplePrefixMatcher.h new file mode 100644 index 00000000..fc1f5ced --- /dev/null +++ b/launcher/pathmatcher/SimplePrefixMatcher.h @@ -0,0 +1,25 @@ +// SPDX-FileCopyrightText: 2022 Sefa Eyeoglu <contact@scrumplex.net> +// +// SPDX-License-Identifier: GPL-3.0-only + +#include <QRegularExpression> +#include "IPathMatcher.h" + +class SimplePrefixMatcher : public IPathMatcher { + public: + virtual ~SimplePrefixMatcher(){}; + SimplePrefixMatcher(const QString& prefix) + { + m_prefix = prefix; + m_isPrefix = prefix.endsWith('/'); + } + + virtual bool matches(const QString& string) const override + { + if (m_isPrefix) + return string.startsWith(m_prefix); + return string == m_prefix; + } + QString m_prefix; + bool m_isPrefix = false; +}; diff --git a/launcher/resources/breeze_dark/breeze_dark.qrc b/launcher/resources/breeze_dark/breeze_dark.qrc new file mode 100644 index 00000000..4d7a69b2 --- /dev/null +++ b/launcher/resources/breeze_dark/breeze_dark.qrc @@ -0,0 +1,43 @@ +<RCC> + <qresource prefix="/icons/breeze_dark"> + <file>index.theme</file> + <file>scalable/about.svg</file> + <file>scalable/accounts.svg</file> + <file>scalable/bug.svg</file> + <file>scalable/centralmods.svg</file> + <file>scalable/checkupdate.svg</file> + <file>scalable/copy.svg</file> + <file>scalable/coremods.svg</file> + <file>scalable/custom-commands.svg</file> + <file>scalable/discord.svg</file> + <file>scalable/externaltools.svg</file> + <file>scalable/help.svg</file> + <file>scalable/instance-settings.svg</file> + <file>scalable/jarmods.svg</file> + <file>scalable/java.svg</file> + <file>scalable/language.svg</file> + <file>scalable/loadermods.svg</file> + <file>scalable/log.svg</file> + <file>scalable/minecraft.svg</file> + <file>scalable/new.svg</file> + <file>scalable/news.svg</file> + <file>scalable/notes.svg</file> + <file>scalable/proxy.svg</file> + <file>scalable/reddit-alien.svg</file> + <file>scalable/refresh.svg</file> + <file>scalable/resourcepacks.svg</file> + <file>scalable/shaderpacks.svg</file> + <file>scalable/screenshots.svg</file> + <file>scalable/settings.svg</file> + <file>scalable/status-bad.svg</file> + <file>scalable/status-good.svg</file> + <file>scalable/status-yellow.svg</file> + <file>scalable/viewfolder.svg</file> + <file>scalable/worlds.svg</file> + <file>scalable/delete.svg</file> + <file>scalable/tag.svg</file> + <file>scalable/export.svg</file> + <file>scalable/rename.svg</file> + <file>scalable/launch.svg</file> + </qresource> +</RCC> diff --git a/launcher/resources/breeze_dark/index.theme b/launcher/resources/breeze_dark/index.theme new file mode 100644 index 00000000..f9f6f4dc --- /dev/null +++ b/launcher/resources/breeze_dark/index.theme @@ -0,0 +1,11 @@ +[Icon Theme] +Name=Breeze Dark +Comment=Breeze Dark Icons +Inherits=multimc +Directories=scalable + +[scalable] +Size=48 +Type=Scalable +MinSize=16 +MaxSize=256 diff --git a/launcher/resources/breeze_dark/scalable/about.svg b/launcher/resources/breeze_dark/scalable/about.svg new file mode 100644 index 00000000..856d1b2b --- /dev/null +++ b/launcher/resources/breeze_dark/scalable/about.svg @@ -0,0 +1,12 @@ +<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#eff0f1; + } + </style> + <g class="ColorScheme-Text" fill="currentColor" fill-rule="evenodd"> + <path d="m8 2a6 6 0 0 0 -6 6 6 6 0 0 0 6 6 6 6 0 0 0 6-6 6 6 0 0 0 -6-6zm0 1a5 5 0 0 1 5 5 5 5 0 0 1 -5 5 5 5 0 0 1 -5-5 5 5 0 0 1 5-5z"/> + <path d="m7 4h2v2h-2z"/> + <path d="m7 7h2v5h-2z"/> + </g> +</svg> diff --git a/launcher/resources/breeze_dark/scalable/accounts.svg b/launcher/resources/breeze_dark/scalable/accounts.svg new file mode 100644 index 00000000..fbb51959 --- /dev/null +++ b/launcher/resources/breeze_dark/scalable/accounts.svg @@ -0,0 +1,17 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"> + <defs + id="defs3051"> + <style + type="text/css" + id="current-color-scheme"> + .ColorScheme-Text { + color:#eff0f1; + } + </style> + </defs> + <path + style="fill:currentColor;fill-opacity:1;stroke:none" + d="M 20.5,4 A 4.5,4.5 0 0 0 16,8.5 4.5,4.5 0 0 0 20.5,13 4.5,4.5 0 0 0 25,8.5 4.5,4.5 0 0 0 20.5,4 Z m 0,1 A 3.5,3.5 0 0 1 24,8.5 3.5,3.5 0 0 1 20.5,12 3.5,3.5 0 0 1 17,8.5 3.5,3.5 0 0 1 20.5,5 Z m -9,4 C 9.014719,9 7,11.01472 7,13.5 7,15.98528 9.014719,18 11.5,18 13.985281,18 16,15.98528 16,13.5 16,11.01472 13.985281,9 11.5,9 Z m 0,1 A 3.5,3.5 0 0 1 15,13.5 3.5,3.5 0 0 1 11.5,17 3.5,3.5 0 0 1 8,13.5 3.5,3.5 0 0 1 11.5,10 Z m 9,4 c -0.88285,0.003 -1.758266,0.17228 -2.585938,0.5 -0.06618,0.42368 -0.174132,0.83977 -0.322265,1.24219 C 18.494507,15.25488 19.490227,15.00077 20.5,15 c 3.589851,0 6.5,3.13401 6.5,7 l -8.341797,0 c 0.170323,0.32329 0.325499,0.65711 0.464844,1 L 28,23 28,22 c 0,-4.41828 -3.357864,-8 -7.5,-8 z m -9,5 C 7.357864,19 4,22.58172 4,27 l 0,1 15,0 0,-1 c 0,-4.41828 -3.357864,-8 -7.5,-8 z m 0,1 c 3.589851,0 6.5,3.13401 6.5,7 L 5,27 c 0,-3.86599 2.910149,-7 6.5,-7 z" + class="ColorScheme-Text" + /> +</svg> diff --git a/launcher/resources/breeze_dark/scalable/bug.svg b/launcher/resources/breeze_dark/scalable/bug.svg new file mode 100644 index 00000000..6ddf482f --- /dev/null +++ b/launcher/resources/breeze_dark/scalable/bug.svg @@ -0,0 +1,13 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"> + <defs id="defs3051"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#eff0f1; + } + </style> + </defs> + <path style="fill:currentColor;fill-opacity:1;stroke:none" + d="m2 2v12h12v-12zm1 1h10v10h-10zm1 2v2h2v-2zm6 0v2h2v-2zm-4 4v1h4v-1zm4 1v1h1v-1zm1 1v1h1v-1zm-5-1h-1v1h1zm-1 1h-1v1h1z" + class="ColorScheme-Text" + /> +</svg> diff --git a/launcher/resources/breeze_dark/scalable/centralmods.svg b/launcher/resources/breeze_dark/scalable/centralmods.svg new file mode 100644 index 00000000..4035e51c --- /dev/null +++ b/launcher/resources/breeze_dark/scalable/centralmods.svg @@ -0,0 +1 @@ +<svg width="8" height="8" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M3 3.5v.25h-.5V6h3V3.75H5V3.5h-.75v.25h-.5V3.5H3Zm-.25.5h2.5v1.75h-2.5V4Z" fill="#EFF0F1"/><path d="M1 1v6h6l-.25-.25h-5.5V3.5H2.5l.75-.75h3.5v4L7 7V1.75H4.5L3.75 1H1Z" fill="#EFF0F1"/></svg>
\ No newline at end of file diff --git a/launcher/resources/breeze_dark/scalable/checkupdate.svg b/launcher/resources/breeze_dark/scalable/checkupdate.svg new file mode 100644 index 00000000..cc5dfc16 --- /dev/null +++ b/launcher/resources/breeze_dark/scalable/checkupdate.svg @@ -0,0 +1,14 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"> + <defs id="defs3051"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#eff0f1; + } + </style> + </defs> + <path + style="fill:currentColor" + d="M 6 2 L 6 3 L 6 6 L 7 6 L 7 3 L 9 3 L 9 6 L 10 6 L 10 3 L 10 2 L 6 2 z M 3.7 6 L 3 6.7 L 6.3 10 L 8 11.7 L 9.7 10 L 13 6.7 L 12.3 6 L 9 9.3 L 8 10.3 L 7 9.3 L 3.7 6 z M 2 12 L 2 14 L 3 14 L 14 14 L 14 13 L 14 12 L 13 12 L 13 13 L 3 13 L 3 12 L 2 12 z " + class="ColorScheme-Text" + /> +</svg> diff --git a/launcher/resources/breeze_dark/scalable/copy.svg b/launcher/resources/breeze_dark/scalable/copy.svg new file mode 100644 index 00000000..fe4a36ac --- /dev/null +++ b/launcher/resources/breeze_dark/scalable/copy.svg @@ -0,0 +1,11 @@ +<!DOCTYPE svg> +<svg viewBox="0 0 22 22" version="1.1" xmlns="http://www.w3.org/2000/svg"> + <defs> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#eff0f1; + } + </style> + </defs> + <path class="ColorScheme-Text" style="fill:currentColor; fill-opacity:1; stroke:none" d="M 3 3 L 3 17 L 7 17 L 7 19 L 17 19 L 17 10 L 13 6 L 12 6 L 9 3 L 3 3 Z M 4 4 L 8 4 L 8 6 L 7 6 L 7 16 L 4 16 L 4 4 Z M 8 7 L 12 7 L 12 11 L 16 11 L 16 18 L 8 18 L 8 7 Z"/> +</svg> diff --git a/launcher/resources/breeze_dark/scalable/coremods.svg b/launcher/resources/breeze_dark/scalable/coremods.svg new file mode 100644 index 00000000..ec4ecea8 --- /dev/null +++ b/launcher/resources/breeze_dark/scalable/coremods.svg @@ -0,0 +1 @@ +<svg width="8" height="8" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M3.167 2.46v.208H2.75v1.875h2.5V2.668h-.417V2.46h-.625v.208h-.416V2.46h-.625Zm-.209.417h2.084v1.458H2.958V2.877Z" fill="#EFF0F1"/><path d="M1.5 1v6h5V1h-5Zm1.5.5h2a1 1 0 0 1 1 1V3a.5.5 0 1 0 0 1v1l-.5.5h-3L2 5V4a.5.5 0 1 0 0-1v-.5a1 1 0 0 1 1-1ZM2 6h2v.5H2V6Zm3 0h1v.5H5V6Z" fill="#EFF0F1"/></svg>
\ No newline at end of file diff --git a/launcher/resources/breeze_dark/scalable/custom-commands.svg b/launcher/resources/breeze_dark/scalable/custom-commands.svg new file mode 100644 index 00000000..44efd39e --- /dev/null +++ b/launcher/resources/breeze_dark/scalable/custom-commands.svg @@ -0,0 +1,13 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"> + <defs id="defs3051"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#eff0f1; + } + </style> + </defs> + <path style="fill:currentColor;fill-opacity:1;stroke:none" + d="M 2 2 L 2 14 L 14 14 L 14 2 L 2 2 z M 3 3 L 13 3 L 13 13 L 3 13 L 3 3 z M 4.71875 4 L 4 4.6875 L 6.625 7.5 L 4.03125 10.3125 L 4.71875 11 L 7.6875 7.84375 L 8 7.5 L 7.6875 7.15625 L 4.71875 4 z M 8 11 L 8 12 L 12 12 L 12 11 L 8 11 z " + class="ColorScheme-Text" + /> +</svg> diff --git a/launcher/resources/breeze_dark/scalable/delete.svg b/launcher/resources/breeze_dark/scalable/delete.svg new file mode 100644 index 00000000..c7074585 --- /dev/null +++ b/launcher/resources/breeze_dark/scalable/delete.svg @@ -0,0 +1,13 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"> + <defs id="defs3051"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#eff0f1; + } + </style> + </defs> + <path + style="fill:currentColor;fill-opacity:1;stroke:none" + d="M 6 2 L 6 3 L 2 3 L 2 4 L 3 4 L 3 14 L 4 14 L 13 14 L 13 13 L 13 4 L 14 4 L 14 3 L 10 3 L 10 2 L 6 2 z M 7 3 L 9 3 L 9 4 L 10 4 L 12 4 L 12 13 L 4 13 L 4 4 L 7 4 L 7 3 z M 6 6 L 6 11 L 7 11 L 7 6 L 6 6 z M 9 6 L 9 11 L 10 11 L 10 6 L 9 6 z " + class="ColorScheme-Text"/> +</svg> diff --git a/launcher/resources/breeze_dark/scalable/discord.svg b/launcher/resources/breeze_dark/scalable/discord.svg new file mode 100644 index 00000000..22ee27ba --- /dev/null +++ b/launcher/resources/breeze_dark/scalable/discord.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 127.14 96.36"><defs><style>.cls-1{fill:#fff;}</style></defs><g id="图层_2" data-name="图层 2"><g id="Discord_Logos" data-name="Discord Logos"><g id="Discord_Logo_-_Large_-_White" data-name="Discord Logo - Large - White"><path class="cls-1" d="M107.7,8.07A105.15,105.15,0,0,0,81.47,0a72.06,72.06,0,0,0-3.36,6.83A97.68,97.68,0,0,0,49,6.83,72.37,72.37,0,0,0,45.64,0,105.89,105.89,0,0,0,19.39,8.09C2.79,32.65-1.71,56.6.54,80.21h0A105.73,105.73,0,0,0,32.71,96.36,77.7,77.7,0,0,0,39.6,85.25a68.42,68.42,0,0,1-10.85-5.18c.91-.66,1.8-1.34,2.66-2a75.57,75.57,0,0,0,64.32,0c.87.71,1.76,1.39,2.66,2a68.68,68.68,0,0,1-10.87,5.19,77,77,0,0,0,6.89,11.1A105.25,105.25,0,0,0,126.6,80.22h0C129.24,52.84,122.09,29.11,107.7,8.07ZM42.45,65.69C36.18,65.69,31,60,31,53s5-12.74,11.43-12.74S54,46,53.89,53,48.84,65.69,42.45,65.69Zm42.24,0C78.41,65.69,73.25,60,73.25,53s5-12.74,11.44-12.74S96.23,46,96.12,53,91.08,65.69,84.69,65.69Z"/></g></g></g></svg>
\ No newline at end of file diff --git a/launcher/resources/breeze_dark/scalable/export.svg b/launcher/resources/breeze_dark/scalable/export.svg new file mode 100644 index 00000000..b1fe39d1 --- /dev/null +++ b/launcher/resources/breeze_dark/scalable/export.svg @@ -0,0 +1,11 @@ +<!DOCTYPE svg> +<svg viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg"> + <defs> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#eff0f1; + } + </style> + </defs> + <path class="ColorScheme-Text" style="fill:currentColor; fill-opacity:1; stroke:none" d="M 7 12 L 11.0859 12 L 9.46484 13.6211 L 10.1719 14.3281 L 13 11.5 L 10.1719 8.67187 L 9.46484 9.37891 L 11.0859 11 L 7 11 L 7 12 Z M 4 13 L 4 3 L 9 3 L 9 6 L 12 6 L 12 9 L 13 9 L 13 5 L 10 2 L 3 2 L 3 14 L 8 14 L 8 13 L 4 13 Z"/> +</svg> diff --git a/launcher/resources/breeze_dark/scalable/externaltools.svg b/launcher/resources/breeze_dark/scalable/externaltools.svg new file mode 100644 index 00000000..dd19fb90 --- /dev/null +++ b/launcher/resources/breeze_dark/scalable/externaltools.svg @@ -0,0 +1,13 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"> + <defs id="defs3051"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#eff0f1; + } + </style> + </defs> + <path style="fill:currentColor;fill-opacity:1;stroke:none" + d="M 4 5 L 4 7 L 2 7 L 2 8 L 4 8 L 4 10 L 5 10 L 7 10 L 7 9 L 5 9 L 5 6 L 7 6 L 7 5 L 5 5 L 4 5 z M 9 5 L 9 6 L 11 6 L 11 9 L 9 9 L 9 10 L 11 10 L 12 10 L 12 9 L 12 8 L 14 8 L 14 7 L 12 7 L 12 6 L 12 5 L 11 5 L 9 5 z M 7 7 L 7 8 L 9 8 L 9 7 L 7 7 z " + class="ColorScheme-Text" + /> +</svg> diff --git a/launcher/resources/breeze_dark/scalable/help.svg b/launcher/resources/breeze_dark/scalable/help.svg new file mode 100644 index 00000000..b273a8bc --- /dev/null +++ b/launcher/resources/breeze_dark/scalable/help.svg @@ -0,0 +1,13 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22"> + <defs id="defs3051"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#eff0f1; + } + </style> + </defs> + <path style="fill:currentColor;fill-opacity:1;stroke:none" + d="M 3 4 L 3 16 L 6 20 L 6 17 L 6 16 L 19 16 L 19 4 L 3 4 z M 4 5 L 18 5 L 18 15 L 4 15 L 4 5 z M 10.5 6 A 2.5 2.5 0 0 0 8 8.5 L 8 9 L 9 9 L 9 8.5 A 1.5 1.5 0 0 1 10.5 7 A 1.5 1.5 0 0 1 12 8.5 A 1.5 1.5 0 0 1 10.5 10 L 10 10 L 10 12 L 11 12 L 11 10.949219 A 2.5 2.5 0 0 0 13 8.5 A 2.5 2.5 0 0 0 10.5 6 z M 10 13 L 10 14 L 11 14 L 11 13 L 10 13 z " + class="ColorScheme-Text" + /> +</svg> diff --git a/launcher/resources/breeze_dark/scalable/instance-settings.svg b/launcher/resources/breeze_dark/scalable/instance-settings.svg new file mode 100644 index 00000000..c5f0504b --- /dev/null +++ b/launcher/resources/breeze_dark/scalable/instance-settings.svg @@ -0,0 +1,13 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"> + <defs id="defs3051"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#eff0f1; + } + </style> + </defs> + <path style="fill:currentColor;fill-opacity:1;stroke:none" + d="M 2 2 L 2 5 L 2 14 L 3 14 L 14 14 L 14 13 L 14 2 L 3 2 L 2 2 z M 3 5 L 13 5 L 13 13 L 3 13 L 3 5 z M 4 6 L 4 12 L 6 12 L 6 6 L 4 6 z M 7 7 L 7 8 L 12 8 L 12 7 L 7 7 z M 7 10 L 7 11 L 12 11 L 12 10 L 7 10 z " + class="ColorScheme-Text" + /> +</svg> diff --git a/launcher/resources/breeze_dark/scalable/jarmods.svg b/launcher/resources/breeze_dark/scalable/jarmods.svg new file mode 100644 index 00000000..49a45d36 --- /dev/null +++ b/launcher/resources/breeze_dark/scalable/jarmods.svg @@ -0,0 +1 @@ +<svg width="8" height="8" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M2 1.5V2H1v4.5h6V2H6v-.5H4.5V2h-1v-.5H2Zm-.5 1h5V6h-5V2.5Z" fill="#EFF0F1"/><path d="M3.93 4.37s-.19-.364-.183-.63c.005-.19.434-.378.603-.651.168-.273-.022-.54-.022-.54s.043.197-.07.4c-.112.203-.525.322-.686.672-.16.35.357.75.357.75Z" fill="#EFF0F1"/><path d="M4.637 3.264s-.645.246-.645.525c0 .28.175.372.203.463.028.091-.049.245-.049.245s.252-.175.21-.378c-.042-.203-.238-.267-.126-.47.075-.136.407-.385.407-.385Z" fill="#EFF0F1"/><path d="M3.859 4.741c.595-.021.812-.209.812-.209-.385.105-1.407.098-1.415.021-.006-.077.316-.14.316-.14s-.505 0-.546.126c-.043.126.238.223.833.202ZM4.72 5.036s.583-.124.526-.44c-.07-.386-.477-.169-.477-.169s.288 0 .316.175c.028.175-.364.434-.364.434ZM4.434 4.868s-.147.038-.364.063c-.292.033-.645.007-.673-.042-.028-.05.05-.077.05-.077-.35.084-.16.23.251.26.352.023.876-.106.876-.106l-.14-.098ZM3.53 5.174s-.159.004-.168.088c-.01.084.098.159.49.182.392.024.668-.107.668-.107l-.178-.107s-.112.023-.285.046c-.173.024-.527-.018-.541-.051-.014-.032.014-.051.014-.051Z" fill="#EFF0F1"/><path d="M5.057 5.552c.06-.065-.019-.117-.019-.117s.028.033-.009.07c-.037.037-.378.13-.924.158-.546.028-1.14-.05-1.159-.121-.018-.07.304-.126.304-.126-.037.005-.485.014-.5.136-.013.12.197.22 1.037.22.84 0 1.21-.155 1.27-.22Z" fill="#EFF0F1"/><path d="M4.73 5.828c-.368.074-1.489.027-1.489.027s.728.173 1.56.029c.397-.07.42-.262.42-.262s-.122.13-.49.206Z" fill="#EFF0F1"/></svg>
\ No newline at end of file diff --git a/launcher/resources/breeze_dark/scalable/java.svg b/launcher/resources/breeze_dark/scalable/java.svg new file mode 100644 index 00000000..7149981c --- /dev/null +++ b/launcher/resources/breeze_dark/scalable/java.svg @@ -0,0 +1,10 @@ +<svg width="1000" height="1000" viewBox="0 0 1000 1000" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M479.6 536.2C479.6 536.2 425 430.9 427 354C428.5 299 552.4 244.7 601.1 165.8C649.7 86.9 595 10 595 10C595 10 607.2 66.7 574.8 125.3C542.4 184 422.9 218.5 376.4 319.6C329.9 420.9 479.6 536.2 479.6 536.2Z" fill="#eff0f1"/> +<path d="M684.099 216.4C684.099 216.4 497.899 287.3 497.899 368.2C497.899 449.2 548.499 475.5 556.599 501.8C564.699 528.2 542.399 572.7 542.399 572.7C542.399 572.7 615.199 522.1 602.999 463.4C590.799 404.7 534.199 386.4 566.599 327.8C588.399 288.4 684.099 216.4 684.099 216.4Z" fill="#eff0f1"/> +<path d="M459.399 643.2C631.499 637.1 694.2 582.8 694.2 582.8C582.9 613.1 287.399 611.1 285.299 588.9C283.299 566.6 376.399 548.4 376.399 548.4C376.399 548.4 230.7 548.4 218.6 584.8C206.4 621.2 287.499 649.2 459.399 643.2Z" fill="#eff0f1"/> +<path d="M708.399 728.5C708.399 728.5 876.799 692.6 860.099 601.1C839.899 489.7 722.499 552.5 722.499 552.5C722.499 552.5 805.599 552.5 813.599 603.1C821.699 653.6 708.399 728.5 708.399 728.5Z" fill="#eff0f1"/> +<path d="M625.4 679.9C625.4 679.9 583 691 520.1 698.1C435.8 707.6 333.9 700.1 325.8 685.9C317.8 671.7 340 663.7 340 663.7C238.8 688 294.2 730.4 412.8 738.6C514.5 745.5 665.9 708.2 665.9 708.2L625.4 679.9Z" fill="#eff0f1"/> +<path d="M364.299 768.3C364.299 768.3 318.399 769.6 315.699 793.9C313.099 818 343.999 839.7 457.299 846.5C570.599 853.2 650.299 815.5 650.299 815.5L598.999 784.4C598.999 784.4 566.599 791.2 516.699 797.9C466.699 804.7 364.299 792.5 360.199 783.1C356.199 773.7 364.299 768.3 364.299 768.3Z" fill="#eff0f1"/> +<path d="M805.5 877.6C823 858.7 800.099 843.8 800.099 843.8C800.099 843.8 808.2 853.3 797.5 864C786.7 874.8 688.199 901.7 530.299 909.8C372.499 917.9 201.1 895 195.6 874.7C190.3 854.5 283.4 838.3 283.4 838.3C272.6 839.6 143.1 842.3 139 877.5C135 912.5 195.7 940.9 438.6 940.9C681.4 941 788 896.4 805.5 877.6Z" fill="#eff0f1"/> +<path d="M711.099 957.2C604.499 978.7 280.699 965.2 280.699 965.2C280.699 965.2 491.099 1015.2 731.299 973.4C846.099 953.4 852.799 897.8 852.799 897.8C852.799 897.8 817.699 935.6 711.099 957.2Z" fill="#eff0f1"/> +</svg> diff --git a/launcher/resources/breeze_dark/scalable/language.svg b/launcher/resources/breeze_dark/scalable/language.svg new file mode 100644 index 00000000..239cdf94 --- /dev/null +++ b/launcher/resources/breeze_dark/scalable/language.svg @@ -0,0 +1,13 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"> + <defs id="defs3051"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#eff0f1; + } + </style> + </defs> + <path style="fill:currentColor;fill-opacity:1;stroke:none" + d="M 2 2 L 2 3 L 2 8 L 3 8 L 6 8 L 6 10 L 6 11 L 9 14 L 9 11 L 13 11 L 14 11 L 14 6 L 14 5 L 13 5 L 10 5 L 10 2 L 3 2 L 2 2 z M 3 3 L 9 3 L 9 5 L 9 6 L 9 7 L 7 7 L 6 7 L 3 7 L 3 3 z M 10 6 L 13 6 L 13 10 L 8 10 L 7 10 L 7 8 L 8 8 L 8 10 L 10 8 L 10 7 L 10 6 z " + class="ColorScheme-Text" + /> +</svg> diff --git a/launcher/resources/breeze_dark/scalable/launch.svg b/launcher/resources/breeze_dark/scalable/launch.svg new file mode 100644 index 00000000..25c5fabc --- /dev/null +++ b/launcher/resources/breeze_dark/scalable/launch.svg @@ -0,0 +1,8 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#eff0f1; + } + </style> + <path d="m2 2v12l12-6z" class="ColorScheme-Text" fill="currentColor"/> +</svg> diff --git a/launcher/resources/breeze_dark/scalable/launcher.svg b/launcher/resources/breeze_dark/scalable/launcher.svg new file mode 100644 index 00000000..aeee8433 --- /dev/null +++ b/launcher/resources/breeze_dark/scalable/launcher.svg @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg width="48" height="48" version="1.1" viewBox="0 0 12.7 12.7" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> + <title>Prism Launcher Logo</title> + <g stroke-width=".26458"> + <path d="m6.35 6.35" fill="#99cd61"/> + <path d="m6.35 0.52917-2.5208 4.3656 2.5208 1.4552 2.5203-1.4552 0.10955-3.0996c-1.1511-0.66459-2.3388-1.2661-2.6298-1.2661z" fill="#df6277"/> + <path d="m8.9798 1.7952-2.6298 4.5548 2.5203 1.4552 2.5208-4.3656c-0.14552-0.25205-1.2601-0.97975-2.4112-1.6443z" fill="#fb9168"/> + <path d="m11.391 3.4396-5.041 2.9104 2.5203 1.4552 2.7389-1.4552c0-1.3292-0.072554-2.6584-0.21808-2.9104z" fill="#f3db6c"/> + <path d="m6.35 6.35v2.9104h5.041c0.14552-0.25205 0.21807-1.5812 0.21808-2.9104h-5.2591z" fill="#7ab392"/> + <path d="m6.35 6.35v2.9104l2.6298 1.6443c1.1511-0.66459 2.2657-1.3923 2.4112-1.6443l-5.041-2.9104z" fill="#4b7cbc"/> + <path d="m6.35 6.35-2.5208 1.4552 2.5208 4.3656c0.29104 0 1.4787-0.60148 2.6298-1.2661l-2.6298-4.5548z" fill="#6f488c"/> + <path d="m3.8292 4.8948-2.5203 4.3656c0.29104 0.5041 4.459 2.9104 5.041 2.9104v-5.8208l-2.5208-1.4552z" fill="#4d3f33"/> + <path d="m1.309 3.4396c-0.29104 0.5041-0.29104 5.3167 0 5.8208l5.041-2.9104v-2.9104h-5.041z" fill="#7a573b"/> + <path d="m6.35 0.52917c-0.58208-2e-8 -4.75 2.4063-5.041 2.9104l5.041 2.9104v-5.8208z" fill="#99cd61"/> + </g> + <g transform="matrix(.88 0 0 .88 -10.906 -1.2421)"> + <g transform="translate(13.26 2.2776)"> + <path transform="matrix(.96975 0 0 .96975 .1921 .1921)" d="m6.3498 2.9393c-0.34105 0-2.7827 1.4099-2.9532 1.7052l2.9532 5.1157 2.9538-5.1157c-0.17052-0.29535-2.6127-1.7052-2.9538-1.7052z" fill="#fff" stroke-width=".26458"/> + </g> + <path d="m16.746 6.9737 2.8639 4.9609c0.33073 0 2.6991-1.3672 2.8644-1.6536 0.16536-0.28642 0.16536-3.0209 0-3.3073l-2.8644 1.6536z" fill="#dfdfdf" stroke-width=".26458"/> + </g> + <path d="m3.8299 4.8948c-0.14551 0.25205-0.14553 2.6584 0 2.9104 0.14553 0.25204 2.2292 1.4552 2.5203 1.4552v-2.9104z" fill="#d6d2d2" stroke-width=".26458"/> + <metadata> + <rdf:RDF> + <cc:Work rdf:about=""> + <dc:title>Prism Launcher Logo</dc:title> + <dc:date>19/10/2022</dc:date> + <dc:creator> + <cc:Agent> + <dc:title>Prism Launcher</dc:title> + </cc:Agent> + </dc:creator> + <dc:contributor> + <cc:Agent> + <dc:title>AutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zeke</dc:title> + </cc:Agent> + </dc:contributor> + <dc:source>https://github.com/PrismLauncher/PrismLauncher</dc:source> + <dc:publisher> + <cc:Agent> + <dc:title>Prism Launcher</dc:title> + </cc:Agent> + </dc:publisher> + <cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/"/> + </cc:Work> + <cc:License rdf:about="http://creativecommons.org/licenses/by-sa/4.0/"> + <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/> + <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/> + <cc:requires rdf:resource="http://creativecommons.org/ns#Notice"/> + <cc:requires rdf:resource="http://creativecommons.org/ns#Attribution"/> + <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/> + <cc:requires rdf:resource="http://creativecommons.org/ns#ShareAlike"/> + </cc:License> + </rdf:RDF> + </metadata> +</svg> diff --git a/launcher/resources/breeze_dark/scalable/loadermods.svg b/launcher/resources/breeze_dark/scalable/loadermods.svg new file mode 100644 index 00000000..7bd87188 --- /dev/null +++ b/launcher/resources/breeze_dark/scalable/loadermods.svg @@ -0,0 +1,13 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"> + <defs id="defs3051"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#eff0f1; + } + </style> + </defs> + <path + style="fill:currentColor;fill-opacity:1;stroke:none" + d="m4 3v1h-2v9h12v-9h-2v-1h-3v1h-2v-1zm-1 2h10v7h-10z" + class="ColorScheme-Text"/> +</svg> diff --git a/launcher/resources/breeze_dark/scalable/log.svg b/launcher/resources/breeze_dark/scalable/log.svg new file mode 100644 index 00000000..fcd83c4d --- /dev/null +++ b/launcher/resources/breeze_dark/scalable/log.svg @@ -0,0 +1,13 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"> + <defs id="defs3051"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#eff0f1; + } + </style> + </defs> + <path style="fill:currentColor;fill-opacity:1;stroke:none" + d="M 11 2 L 11 14 L 14 14 L 14 2 L 11 2 z M 6 5 L 6 14 L 9 14 L 9 5 L 6 5 z M 1 8 L 1 14 L 4 14 L 4 8 L 1 8 z " + class="ColorScheme-Text" + /> +</svg> diff --git a/launcher/resources/breeze_dark/scalable/matrix.svg b/launcher/resources/breeze_dark/scalable/matrix.svg new file mode 100644 index 00000000..214f5708 --- /dev/null +++ b/launcher/resources/breeze_dark/scalable/matrix.svg @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg version="1.1" viewBox="0 0 27.9 32" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> + <title>Matrix (protocol) logo</title> + <g transform="translate(-.095 .005)" fill="#eff0f1"> + <path d="m27.1 31.2v-30.5h-2.19v-0.732h3.04v32h-3.04v-0.732z"/> + <path d="m8.23 10.4v1.54h0.044c0.385-0.564 0.893-1.03 1.49-1.37 0.58-0.323 1.25-0.485 1.99-0.485 0.72 0 1.38 0.14 1.97 0.42 0.595 0.279 1.05 0.771 1.36 1.48 0.338-0.5 0.796-0.941 1.38-1.32 0.58-0.383 1.27-0.574 2.06-0.574 0.602 0 1.16 0.074 1.67 0.22 0.514 0.148 0.954 0.383 1.32 0.707 0.366 0.323 0.653 0.746 0.859 1.27 0.205 0.522 0.308 1.15 0.308 1.89v7.63h-3.13v-6.46c0-0.383-0.015-0.743-0.044-1.08-0.0209-0.307-0.103-0.607-0.242-0.882-0.133-0.251-0.336-0.458-0.584-0.596-0.257-0.146-0.606-0.22-1.05-0.22-0.44 0-0.796 0.085-1.07 0.253-0.272 0.17-0.485 0.39-0.639 0.662-0.159 0.287-0.264 0.602-0.308 0.927-0.052 0.347-0.078 0.697-0.078 1.05v6.35h-3.13v-6.4c0-0.338-7e-3 -0.673-0.021-1-0.0114-0.314-0.0749-0.623-0.188-0.916-0.108-0.277-0.3-0.512-0.55-0.673-0.258-0.168-0.636-0.253-1.14-0.253-0.198 0.0083-0.394 0.042-0.584 0.1-0.258 0.0745-0.498 0.202-0.705 0.374-0.228 0.184-0.422 0.449-0.584 0.794-0.161 0.346-0.242 0.798-0.242 1.36v6.62h-3.13v-11.4z"/> + <path d="m0.936 0.732v30.5h2.19v0.732h-3.04v-32h3.03v0.732z"/> + </g> +</svg>
\ No newline at end of file diff --git a/launcher/resources/breeze_dark/scalable/minecraft.svg b/launcher/resources/breeze_dark/scalable/minecraft.svg new file mode 100644 index 00000000..1d8d0167 --- /dev/null +++ b/launcher/resources/breeze_dark/scalable/minecraft.svg @@ -0,0 +1,13 @@ +<svg version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> + <defs> + <style type="text/css" id="current-color-scheme">.ColorScheme-Text { + color:#eff0f1; + }</style> + </defs> + <g fill="currentColor"> + <path class="ColorScheme-Text" d="m8.2746408 13.953029c0.00833 0 1.1494866-0.753825 2.5359342-1.674795l2.520534-1.674794v-2.6001033c0-1.4307351-0.0074-2.6013858-0.01668-2.6013858-0.0093 0-1.150413 0.7546842-2.535934 1.6773611l-2.5192543 1.6773619v2.5988191c0 1.429027 0.00706 2.597536 0.015402 2.597536z" fill="currentColor" fill-opacity=".2"/> + <path class="ColorScheme-Text" d="m7.9409649 8.3549799c0.0753873-0.0030883 5.0483591-3.3585525 5.0192511-3.3868071-0.014404-0.0138645-1.1312-0.7652159-2.482034-1.6683781-1.3508332-0.9031623-2.4637176-1.6377305-2.4730489-1.6311596-0.4205404 0.2725585-4.9953997 3.3678436-4.9999993 3.3829565-0.00988 0.032723 4.8804389 3.3033883 4.9358311 3.3033883z" fill="currentColor" fill-opacity=".4"/> + <path class="ColorScheme-Text" d="m7.7189427 13.994097c0.00828 0 0.015875-1.150637 0.015402-2.556468l-0.0013141-2.5551853-2.517967-1.6850615c-1.3845486-0.9264887-2.5204415-1.6863448-2.524384-1.6863448-0.00421-0.00112-0.0077 1.1516957-0.0077 2.5616013v2.5628853l2.5102968 1.679928c1.3808361 0.923532 2.5173881 1.678645 2.5256673 1.678645z" fill="currentColor" fill-opacity=".6"/> + <path class="ColorScheme-Text" d="m 8,15 c 5.76994,-3.758469 4.07772,-2.720917 6,-4 V 5 C 12.707222,4.143927 10.030643,2.3424577 8,1 5,3 4.3571975,3.3856408 2,5 v 6 z M 8.508315,13.412447 8.4963301,9 C 10.411258,7.652439 11.772087,6.8337528 13,6 v 4.594435 z M 7.5156547,13.400462 3,10.570466 V 6 L 7.5276396,9 Z M 8,8 3.4485124,5 8,2 12.477901,5 C 10.956071,6.0867591 9.5367568,6.9353406 8,8 Z" fill="currentColor"/> + </g> +</svg> diff --git a/launcher/resources/breeze_dark/scalable/new.svg b/launcher/resources/breeze_dark/scalable/new.svg new file mode 100644 index 00000000..9ee910e7 --- /dev/null +++ b/launcher/resources/breeze_dark/scalable/new.svg @@ -0,0 +1,18 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"> + <defs + id="defs3051"> + <style + type="text/css" + id="current-color-scheme"> + .ColorScheme-Text { + color:#eff0f1; + } + </style> + </defs> + <path + style="fill:currentColor;fill-opacity:1;stroke:none" + d="M 4 4 L 4 28 L 17 28 L 17 27 L 5 27 L 5 14 L 10 14 L 13 11 L 27 11 L 27 17 L 28 17 L 28 7 L 18 7 L 15 4 L 4 4 z M 22 17 L 22 22 L 17 22 L 17 23 L 22 23 L 22 28 L 23 28 L 23 23 L 28 23 L 28 22 L 23 22 L 23 17 L 22 17 z " + id="path99" + class="ColorScheme-Text" + /> +</svg> diff --git a/launcher/resources/breeze_dark/scalable/news.svg b/launcher/resources/breeze_dark/scalable/news.svg new file mode 100644 index 00000000..a2ff0c8d --- /dev/null +++ b/launcher/resources/breeze_dark/scalable/news.svg @@ -0,0 +1,13 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"> + <defs id="defs3051"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#eff0f1; + } + </style> + </defs> + <path style="fill:currentColor;fill-opacity:1;stroke:none" + d="m2 2v12h12v-12zm1 1h10v10h-10zm1 1v3h3v-3zm4 0v1h4v-1zm0 2v1h4v-1zm-4 2v4h8v-4z" + class="ColorScheme-Text" + /> +</svg> diff --git a/launcher/resources/breeze_dark/scalable/notes.svg b/launcher/resources/breeze_dark/scalable/notes.svg new file mode 100644 index 00000000..6452d3c8 --- /dev/null +++ b/launcher/resources/breeze_dark/scalable/notes.svg @@ -0,0 +1,13 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"> + <defs id="defs3051"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#eff0f1; + } + </style> + </defs> + <path style="fill:currentColor;fill-opacity:1;stroke:none" + d="M 3 2 L 3 3 L 2 3 L 2 14 L 14 14 L 14 3 L 13 3 L 13 2 L 12 2 L 12 3 L 11 3 L 11 2 L 10 2 L 10 3 L 6 3 L 6 2 L 5 2 L 5 3 L 4 3 L 4 2 L 3 2 z M 3 4 L 13 4 L 13 13 L 3 13 L 3 4 z M 4 5 L 4 6 L 12 6 L 12 5 L 4 5 z M 4 7 L 4 8 L 8 8 L 8 7 L 4 7 z M 4 9 L 4 10 L 10 10 L 10 9 L 4 9 z M 10 11 L 10 12 L 12 12 L 12 11 L 10 11 z " + class="ColorScheme-Text" + /> +</svg> diff --git a/launcher/resources/breeze_dark/scalable/patreon.svg b/launcher/resources/breeze_dark/scalable/patreon.svg new file mode 100644 index 00000000..7f98dd13 --- /dev/null +++ b/launcher/resources/breeze_dark/scalable/patreon.svg @@ -0,0 +1,3 @@ +<svg fill="#eff0f1" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
+ <path d="M12,3h0a9,9,0,0,0-9,9v9H5.09V12a6.91,6.91,0,1,1,7.23,6.9,5.9,5.9,0,0,1-2.59-.47v-3A4.13,4.13,0,1,0,7.85,12v9H12A9,9,0,1,0,12,3Zm0,15.91h0Z"/>
+</svg>
diff --git a/launcher/resources/breeze_dark/scalable/proxy.svg b/launcher/resources/breeze_dark/scalable/proxy.svg new file mode 100644 index 00000000..c6efb171 --- /dev/null +++ b/launcher/resources/breeze_dark/scalable/proxy.svg @@ -0,0 +1,14 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"> + <defs id="defs3051"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#eff0f1; + } + </style> + </defs> + <path + style="fill:currentColor;fill-opacity:1;stroke:none" + d="M 7 2 L 7 3 L 13 3 L 13 10 L 7 10 L 7 12 L 7 13 L 6 13 C 5.4459904 13 5 12.55401 5 12 L 5 10 L 5 8 L 5 7 L 6 7 L 6 3 L 3 3 L 3 7 L 4 7 L 4 8 L 4 10 L 4 12 C 4 13.108 4.892 14 6 14 L 7 14 L 9 14 L 11 14 L 11 13 L 9 13 L 9 12 L 14 12 L 14 11 L 14 10 L 14 2 L 7 2 z M 4 5 L 5 5 L 5 6 L 4 6 L 4 5 z M 2 8 L 2 12 L 3 12 L 3 10 L 3 8 L 2 8 z " + class="ColorScheme-Text" + /> +</svg> diff --git a/launcher/resources/breeze_dark/scalable/reddit-alien.svg b/launcher/resources/breeze_dark/scalable/reddit-alien.svg new file mode 100644 index 00000000..00f82bb3 --- /dev/null +++ b/launcher/resources/breeze_dark/scalable/reddit-alien.svg @@ -0,0 +1,3 @@ +<svg fill="#eff0f1" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
+ <path d="M20,11.86a1.76,1.76,0,0,0-1.75-1.75,1.73,1.73,0,0,0-1.22.51,9,9,0,0,0-4.67-1.38l1-3.16L16,6.71s0,0,0,0a1.46,1.46,0,1,0,.1-.53l-2.89-.68a.25.25,0,0,0-.29.17L11.83,9.23a9.16,9.16,0,0,0-4.88,1.36,1.75,1.75,0,1,0-2.07,2.79,3,3,0,0,0-.06.58C4.82,16.58,8,18.7,12,18.7s7.14-2.13,7.14-4.74a2.94,2.94,0,0,0-.05-.55A1.74,1.74,0,0,0,20,11.86ZM8.51,13.08a1.06,1.06,0,1,1,1.06,1.06A1.06,1.06,0,0,1,8.51,13.08Zm6.06,3.14A3.48,3.48,0,0,1,12,17h0a3.48,3.48,0,0,1-2.56-.79.25.25,0,0,1,.35-.35,3,3,0,0,0,2.2.65h0a3,3,0,0,0,2.2-.65.25.25,0,1,1,.35.35Zm-.13-2.08a1.06,1.06,0,1,1,1.06-1.06A1.06,1.06,0,0,1,14.44,14.14Z"/>
+</svg>
diff --git a/launcher/resources/breeze_dark/scalable/refresh.svg b/launcher/resources/breeze_dark/scalable/refresh.svg new file mode 100644 index 00000000..7b486463 --- /dev/null +++ b/launcher/resources/breeze_dark/scalable/refresh.svg @@ -0,0 +1,8 @@ +<svg version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> + <defs> + <style type="text/css" id="current-color-scheme">.ColorScheme-Text { + color:#eff0f1; + }</style> + </defs> + <path class="ColorScheme-Text" fill="currentColor" d="m14 8c0 1.1088173-0.319333 2.140071-0.84375 3.03125l-2.6875-2.6875 0.71875-0.71875 1.625 1.625c0.05109-0.19534 0.097716-0.3898623 0.125-0.59375 0.007789-0.0524063 0.025184-0.1032787 0.03125-0.15625 0.01707-0.1680854 0.03125-0.327411 0.03125-0.5 0-2.761424-2.238576-5-5-5-0.243024 0-0.4855082 0.02845-0.71875 0.0625-0.1362493 0.019955-0.2738032 0.031786-0.40625 0.0625-0.2865815 0.06695-0.547624 0.166647-0.8125 0.28125-0.030675 0.013272-0.063399 0.017376-0.09375 0.03125-0.09166 0.040961-0.163333 0.108255-0.25 0.15625-8e-3 0.00445-0.02305-0.00433-0.03125 0l-0.71875-0.75c0.891179-0.524417 1.922432-0.84375 3.03125-0.84375 3.313709 0 6 2.686293 6 6zm-2.96875 5.15625c-0.891179 0.524417-1.922432 0.84375-3.03125 0.84375-3.313709 0-6-2.686293-6-6 0-1.1088173 0.319333-2.140071 0.84375-3.03125l0.75 0.75 1.90625 1.9375-0.6875 0.6875-1.625-1.59375c-0.05109 0.19534-0.09772 0.3898623-0.125 0.59375-0.0078 0.052406-0.02518 0.1032787-0.03125 0.15625-0.01707 0.1680854-0.03125 0.327411-0.03125 0.5s0.01418 0.3319146 0.03125 0.5c0.01707 0.1680853 0.029198 0.337256 0.0625 0.5 0.466231 2.278415 2.490004 4 4.90625 4 0.2482626 0 0.4801862-0.02756 0.71875-0.0625 0.1362493-0.01995 0.2738032-0.03179 0.40625-0.0625 0.2865815-0.06695 0.547624-0.166647 0.8125-0.28125 0.030718-0.01299 0.063349-0.01766 0.09375-0.03125 0.08886-0.04062 0.164735-0.108612 0.25-0.15625h0.03125z"/> +</svg> diff --git a/launcher/resources/breeze_dark/scalable/rename.svg b/launcher/resources/breeze_dark/scalable/rename.svg new file mode 100644 index 00000000..6a844965 --- /dev/null +++ b/launcher/resources/breeze_dark/scalable/rename.svg @@ -0,0 +1,13 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"> + <defs id="defs3051"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#eff0f1; + } + </style> + </defs> + <path style="fill:currentColor;fill-opacity:1;stroke:none" + d="M 10.398438 2 L 5.2871094 7.1113281 L 2 10.398438 L 2 14 L 5.6015625 14 L 14 5.6015625 L 10.398438 2 z M 8.3496094 5.4902344 L 10.509766 7.6503906 L 7.3359375 10.826172 L 7.3359375 10.150391 L 6.3222656 10.171875 L 5.2871094 10.171875 L 5.2871094 9.1367188 L 5.2871094 8.5507812 L 6.7285156 7.1113281 L 8.3496094 5.4902344 z M 4.2734375 9.5644531 L 4.2734375 11.185547 L 5.3085938 11.185547 L 6.3007812 11.185547 L 6.3222656 11.837891 L 5.2421875 12.919922 L 3.8007812 12.919922 L 3.0800781 12.199219 L 3.0800781 10.757812 L 4.2734375 9.5644531 z " + class="ColorScheme-Text" + /> +</svg> diff --git a/launcher/resources/breeze_dark/scalable/resourcepacks.svg b/launcher/resources/breeze_dark/scalable/resourcepacks.svg new file mode 100644 index 00000000..0986c216 --- /dev/null +++ b/launcher/resources/breeze_dark/scalable/resourcepacks.svg @@ -0,0 +1,11 @@ +<!DOCTYPE svg> +<svg version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> + <defs> + <style id="current-color-scheme" type="text/css"> + .ColorScheme-Text { + color:#eff0f1; + } + </style> + </defs> + <path class="ColorScheme-Text" style="fill:currentColor; fill-opacity:1; stroke:none" d="M 8 3 L 13 3 L 13 13 L 8 13 L 8 3 Z M 3 3 L 13 3 L 13 9 L 11 7 L 7.65625 10.3438 L 6.3125 9 L 6.2813 9 L 3 12.2813 L 3 3 Z M 2 2 L 2 13.2813 L 2 14 L 14 14 L 14 13 L 14 12 L 14 11 L 14 10 L 14 2 L 2 2 Z M 6 4 C 4.89543 4 4 4.89543 4 6 C 4 7.10457 4.89543 8 6 8 C 7.10457 8 8 7.10457 8 6 C 8 4.89543 7.10457 4 6 4 Z"/> +</svg> diff --git a/launcher/resources/breeze_dark/scalable/screenshots.svg b/launcher/resources/breeze_dark/scalable/screenshots.svg new file mode 100644 index 00000000..a10ed713 --- /dev/null +++ b/launcher/resources/breeze_dark/scalable/screenshots.svg @@ -0,0 +1,13 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"> + <defs id="defs3051"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#eff0f1; + } + </style> + </defs> + <path style="fill:currentColor;fill-opacity:1;stroke:none" + d="M 2 2 L 2 13.28125 L 2 14 L 14 14 L 14 13 L 14 12 L 14 11 L 14 10 L 14 2 L 2 2 z M 3 3 L 13 3 L 13 9 L 11 7 L 7.65625 10.34375 L 6.3125 9 L 6.28125 9 L 3 12.28125 L 3 3 z M 6 4 C 4.8954305 4 4 4.8954305 4 6 C 4 7.1045695 4.8954305 8 6 8 C 7.1045695 8 8 7.1045695 8 6 C 8 4.8954305 7.1045695 4 6 4 z " + class="ColorScheme-Text" + /> +</svg> diff --git a/launcher/resources/breeze_dark/scalable/settings.svg b/launcher/resources/breeze_dark/scalable/settings.svg new file mode 100644 index 00000000..009d8154 --- /dev/null +++ b/launcher/resources/breeze_dark/scalable/settings.svg @@ -0,0 +1,17 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"> + <defs id="defs3051"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#eff0f1; + } + .ColorScheme-Highlight { + color:#3daee9; + } + </style> + </defs> + <path + style="fill:currentColor;fill-opacity:1;stroke:none" + d="M18.5 6A3.5 3.5 0 0 0 15.04102 9H4V10H15.04A3.5 3.5 0 0 0 18.5 13 3.5 3.5 0 0 0 21.958984 10H28V9H21.961A3.5 3.5 0 0 0 18.5 6M7.5 19A3.5 3.5 0 0 0 4 22.5 3.5 3.5 0 0 0 7.5 26 3.5 3.5 0 0 0 10.960938 23H28V22H10.959A3.5 3.5 0 0 0 7.5 19m0 1A2.5 2.5 0 0 1 10 22.5 2.5 2.5 0 0 1 7.5 25 2.5 2.5 0 0 1 5 22.5 2.5 2.5 0 0 1 7.5 20" + class="ColorScheme-Text" + /> +</svg> diff --git a/launcher/resources/breeze_dark/scalable/shaderpacks.svg b/launcher/resources/breeze_dark/scalable/shaderpacks.svg new file mode 100644 index 00000000..b2887947 --- /dev/null +++ b/launcher/resources/breeze_dark/scalable/shaderpacks.svg @@ -0,0 +1,13 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"> + <defs id="defs3051"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#eff0f1; + } + </style> + </defs> + <path style="fill:currentColor;fill-opacity:1;stroke:none" + d="M 2 2 L 2 14 L 5.15625 10.84375 C 4.43239 10.11989 4 9.10457 4 8 C 4 5.79086 5.79086 4 8 4 C 9.10457 4 10.11989 4.43239 10.84375 5.15625 L 14 2 L 2 2 z M 10.84375 5.15625 L 5.15625 10.84375 C 5.88011 11.56761 6.89543 12 8 12 C 10.20914 12 12 10.20914 12 8 C 12 6.89543 11.56761 5.88011 10.84375 5.15625 z " + class="ColorScheme-Text" + /> +</svg> diff --git a/launcher/resources/breeze_dark/scalable/status-bad.svg b/launcher/resources/breeze_dark/scalable/status-bad.svg new file mode 100644 index 00000000..6fc3137e --- /dev/null +++ b/launcher/resources/breeze_dark/scalable/status-bad.svg @@ -0,0 +1,9 @@ +<svg version="1.1" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-NegativeText { + color:#da4453; + } + </style> + <rect class="ColorScheme-NegativeText" x="3" y="3" width="16" height="16" rx="2" fill="currentColor"/> + <path d="M 6.414,5 5,6.414 9.586,11 5,15.586 6.414,17 11,12.414 15.586,17 17,15.586 12.414,11 17,6.414 15.586,5 11,9.586 Z" fill="#fff"/> +</svg> diff --git a/launcher/resources/breeze_dark/scalable/status-good.svg b/launcher/resources/breeze_dark/scalable/status-good.svg new file mode 100644 index 00000000..eb8bc03b --- /dev/null +++ b/launcher/resources/breeze_dark/scalable/status-good.svg @@ -0,0 +1,10 @@ +<svg id="svg9" version="1.1" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg"> + <style id="current-color-scheme" type="text/css">.ColorScheme-PositiveText { + color:#27ae60; + } + .ColorScheme-Text { + color:#232629; + }</style> + <rect id="rect3" class="ColorScheme-PositiveText" x="3" y="3" width="16" height="16" rx="1.4545455" fill="currentColor"/> + <path id="path5" d="M 18.99323,4.3805651 9,14 5.7332785,10.623339 4.3852425,12.059327 9,16.828 l 10,-10 z" fill="#fff"/> +</svg> diff --git a/launcher/resources/breeze_dark/scalable/status-yellow.svg b/launcher/resources/breeze_dark/scalable/status-yellow.svg new file mode 100644 index 00000000..1dc4d0f5 --- /dev/null +++ b/launcher/resources/breeze_dark/scalable/status-yellow.svg @@ -0,0 +1,9 @@ +<svg version="1.1" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-NeutralText { + color:#f67400; + } + </style> + <path class="ColorScheme-NeutralText" d="m11.006318 3.0000261a0.72728737 0.72727154 0 0 0-0.65674 0.4021811l-7.2728738 14.545431a0.72728737 0.72727154 0 0 0 0.6509222 1.052362h14.545748a0.72728737 0.72727154 0 0 0 0.650922-1.052362l-7.272874-14.545431a0.72728737 0.72727154 0 0 0-0.645104-0.4021811z" fill="currentColor"/> + <path d="m10 7v6h2v-6zm0 8v2h2v-2z" fill="#fff"/> +</svg> diff --git a/launcher/resources/breeze_dark/scalable/tag.svg b/launcher/resources/breeze_dark/scalable/tag.svg new file mode 100644 index 00000000..b54b515f --- /dev/null +++ b/launcher/resources/breeze_dark/scalable/tag.svg @@ -0,0 +1,17 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22"> + <defs id="defs3051"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#eff0f1; + } + .ColorScheme-Highlight { + color:#3daee9; + } + </style> + </defs> + <path + style="fill:currentColor;fill-opacity:1;stroke:none" + d="M 9 3 L 3 5 L 5 11 L 15 16 L 19 8 L 9 3 z M 3 5 L 3 11 L 11 19 L 13.705078 16.294922 L 4 11 L 3 5 z M 6.5 5 C 7.331 5 8 5.669 8 6.5 C 8 7.331 7.331 8 6.5 8 C 5.669 8 5 7.331 5 6.5 C 5 5.669 5.669 5 6.5 5 z " + class="ColorScheme-Text" + /> +</svg> diff --git a/launcher/resources/breeze_dark/scalable/viewfolder.svg b/launcher/resources/breeze_dark/scalable/viewfolder.svg new file mode 100644 index 00000000..0189b954 --- /dev/null +++ b/launcher/resources/breeze_dark/scalable/viewfolder.svg @@ -0,0 +1,13 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"> + <defs id="defs3051"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#eff0f1; + } + </style> + </defs> + <path style="fill:currentColor;fill-opacity:1;stroke:none" + d="m4 4v24h24l-1-1h-22v-13h5l3-3h14v16l1 1v-21h-10l-3-3z" + class="ColorScheme-Text" + /> +</svg> diff --git a/launcher/resources/breeze_dark/scalable/worlds.svg b/launcher/resources/breeze_dark/scalable/worlds.svg new file mode 100644 index 00000000..0cff8266 --- /dev/null +++ b/launcher/resources/breeze_dark/scalable/worlds.svg @@ -0,0 +1,16 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"> + <defs id="defs3051"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#eff0f1; + } + </style> + </defs> + <g transform="translate(0,-1036.3622)"> + <path + style="fill:currentColor;fill-opacity:1;fill-rule:nonzero" + d="M 8 2 C 4.6862915 2 2 4.6862868 2 8 C 2 11.313713 4.6862915 14 8 14 C 11.313708 14 14 11.313713 14 8 C 14 4.6862868 11.313708 2 8 2 z M 8 3 C 8.172589 3 8.3319146 3.01418 8.5 3.03125 C 8.5403398 3.0352163 8.5849592 3.0263276 8.625 3.03125 C 8.6776214 3.0379183 8.7291519 3.0542091 8.78125 3.0625 C 8.9249022 3.0850796 9.0482753 3.1217241 9.1875 3.15625 C 9.4440966 3.2195469 9.6982233 3.3050445 9.9375 3.40625 C 10.069426 3.4620498 10.186649 3.5272356 10.3125 3.59375 C 10.312425 3.60275 10.3133 3.614 10.3125 3.625 C 10.34148 3.638 10.35728 3.69175 10.40625 3.71875 C 10.42423 3.72875 10.42056 3.741 10.4375 3.75 C 10.46648 3.766 10.50599 3.7835 10.5 3.8125 C 10.492 3.8525 10.43425 3.844 10.40625 3.875 C 10.41005 3.933 10.35871 3.92975 10.34375 3.96875 C 10.35275 3.99375 10.40229 4.00125 10.40625 4.03125 C 10.40135 4.06325 10.33173 4.06075 10.34375 4.09375 C 10.39776 4.13575 10.449004 4.10375 10.5 4.09375 C 10.611991 4.07975 10.712253 4.08825 10.78125 4.03125 C 10.77225 3.97825 10.88099 3.9856 10.875 3.9375 C 10.90366 3.9583822 10.9403 3.9788168 10.96875 4 C 10.957987 4.01008 10.949578 4.02585 10.9375 4.03125 C 10.91649 4.04125 10.89401 4.0505 10.875 4.0625 C 10.847 4.0805 10.81328 4.104 10.78125 4.125 C 10.75826 4.141 10.711504 4.21875 10.6875 4.21875 C 10.65851 4.21875 10.61475 4.1815 10.59375 4.1875 C 10.56372 4.1975 10.56519 4.238 10.53125 4.25 C 10.46526 4.274 10.335495 4.2135 10.3125 4.3125 C 10.3405 4.3695 10.450005 4.343 10.5 4.375 C 10.53102 4.395 10.58575 4.466 10.59375 4.5 C 10.60175 4.528 10.60574 4.6575 10.59375 4.6875 C 10.56273 4.7675 10.466988 4.751 10.375 4.75 L 10.3125 4.75 C 10.157516 4.74 10.007499 4.67025 9.9375 4.78125 C 9.94245 4.86625 9.95653 4.926 9.9375 5 C 9.92353 5.054 9.840752 5.10965 9.84375 5.15625 C 9.84485 5.18025 9.900255 5.216 9.90625 5.25 C 9.9101 5.268 9.89818 5.2955 9.90625 5.3125 C 9.932265 5.3615 9.9852535 5.3025 10.03125 5.3125 C 10.07525 5.3225 10.125 5.3883 10.125 5.4375 C 10.125 5.4725 10.11575 5.5286 10.09375 5.5625 C 10.04975 5.6285 9.969247 5.62025 9.90625 5.65625 C 9.854275 5.68625 9.843502 5.7609 9.8125 5.8125 C 9.7795 5.8685 9.736983 5.88865 9.75 5.96875 C 9.70501 6.05775 9.655488 6.11325 9.5625 6.15625 C 9.535495 6.16825 9.493747 6.1695 9.46875 6.1875 C 9.44873 6.2015 9.434272 6.24925 9.40625 6.28125 C 9.37127 6.32025 9.331497 6.345 9.3125 6.375 C 9.298475 6.398 9.29621 6.43675 9.28125 6.46875 C 9.25925 6.51075 9.215494 6.5203 9.1875 6.5625 C 9.17452 6.5825 9.17022 6.63025 9.15625 6.65625 C 9.12424 6.71425 9.087749 6.7615 9.09375 6.8125 C 9.0987 6.8605 9.153252 6.86225 9.15625 6.90625 C 9.159 6.93025 9.12401 6.94175 9.125 6.96875 C 9.1261 7.00675 9.15328 7.0325 9.15625 7.0625 C 9.16324 7.1365 9.10772 7.16815 9.09375 7.21875 C 9.08676 7.24275 9.09975 7.26125 9.09375 7.28125 C 9.08176 7.31825 9.032251 7.36205 9.03125 7.40625 C 9.03015 7.43725 9.09078 7.456 9.09375 7.5 C 9.09595 7.529 9.056505 7.56575 9.0625 7.59375 C 9.0735 7.64775 9.1767575 7.708 9.21875 7.75 C 9.275747 7.807 9.350008 7.84625 9.375 7.90625 C 9.39601 7.95725 9.398533 8.05565 9.4375 8.09375 C 9.466485 8.12175 9.525507 8.12625 9.5625 8.15625 C 9.59748 8.18325 9.619253 8.18875 9.65625 8.21875 C 9.717245 8.26675 9.809252 8.382 9.90625 8.375 C 9.957235 8.365 10.005504 8.3225 10.0625 8.3125 C 10.1215 8.3025 10.190006 8.27625 10.25 8.28125 C 10.29598 8.29125 10.358253 8.3155 10.40625 8.3125 C 10.45624 8.3025 10.505509 8.30625 10.5625 8.28125 C 10.6615 8.23825 10.824766 8.1668 10.96875 8.1875 C 11.078739 8.2035 11.079255 8.326 11.15625 8.375 C 11.24424 8.385 11.305007 8.358 11.375 8.375 C 11.42802 8.388 11.495001 8.4584 11.5 8.5 C 11.505 8.543 11.44349 8.5978 11.4375 8.625 C 11.42353 8.683 11.44746 8.74425 11.4375 8.78125 C 11.4295 8.81025 11.40526 8.846 11.40625 8.875 C 11.40625 8.901 11.44173 8.9658 11.46875 9 C 11.50175 9.042 11.55375 9.0798 11.59375 9.125 C 11.66674 9.209 11.699004 9.29525 11.75 9.40625 C 11.76298 9.43425 11.73801 9.464 11.75 9.5 C 11.728 9.6679 11.672491 9.78285 11.5625 9.96875 C 11.51052 10.02875 11.436499 10.08135 11.4375 10.15625 C 11.4337 10.33625 11.53925 10.451 11.53125 10.625 C 11.51327 10.8589 11.54929 10.8751 11.53125 11 C 11.61025 11.04 11.55424 11.1669 11.53125 11.25 C 11.49726 11.349 11.4565 11.3715 11.4375 11.4375 C 11.490583 11.460643 11.566021 11.451092 11.625 11.4375 C 11.595204 11.468874 11.561843 11.500657 11.53125 11.53125 C 11.305044 11.757456 11.047252 11.976543 10.78125 12.15625 C 10.265207 12.504882 9.6912413 12.769698 9.0625 12.90625 C 8.718961 12.980861 8.3658887 13 8 13 C 7.8096669 13 7.6218651 12.989959 7.4375 12.96875 C 7.2906389 12.951989 7.1427139 12.935453 7 12.90625 C 6.7168255 12.848304 6.4510281 12.728616 6.1875 12.625 C 6.1781304 12.60785 6.1541244 12.582618 6.15625 12.5625 C 6.208225 12.5405 6.305756 12.6365 6.34375 12.5625 C 6.36278 12.5275 6.318725 12.44125 6.34375 12.40625 C 6.361735 12.38225 6.463007 12.382 6.5 12.375 C 6.55302 12.365 6.626253 12.35775 6.65625 12.34375 C 6.68925 12.32275 6.724751 12.2491 6.71875 12.1875 C 6.716 12.1585 6.679185 12.151 6.65625 12.125 C 6.637275 12.103 6.66923 12.0835 6.65625 12.0625 C 6.63227 12.0275 6.572499 12.01975 6.5625 11.96875 C 6.634495 11.95475 6.7397615 12.029 6.84375 12 C 6.892755 11.986 6.976999 11.88985 7 11.84375 C 7.00699 11.82975 6.99202 11.79925 7 11.78125 C 7.00902 11.76325 7.028225 11.72875 7.03125 11.71875 C 7.03823 11.69175 7.02525 11.7055 7.03125 11.6875 C 7.049235 11.6365 7.094997 11.5988 7.125 11.5625 C 7.14799 11.5345 7.197723 11.49775 7.21875 11.46875 C 7.24273 11.43775 7.23405 11.43425 7.25 11.40625 C 7.265015 11.31525 7.19675 11.23615 7.21875 11.15625 C 7.24273 11.06625 7.381762 11.00975 7.46875 10.96875 C 7.498725 10.95475 7.537502 10.9465 7.5625 10.9375 C 7.622494 10.9165 7.6940045 10.895 7.75 10.875 C 7.843995 10.841 7.860248 10.7734 7.90625 10.6875 C 7.92825 10.6475 7.964735 10.5918 7.96875 10.5625 C 7.9726 10.5365 7.9638 10.531 7.96875 10.5 C 7.9737 10.471 7.960775 10.44025 7.96875 10.40625 C 7.97975 10.36325 8 10.26665 8 10.21875 C 8 10.17875 7.96974 10.161 7.96875 10.125 C 7.96176 9.995 8.014512 10.0085 8.0625 9.9375 C 8.08648 9.9025 8.10806 9.8376 8.125 9.8125 C 8.205993 9.6925 8.353749 9.65075 8.34375 9.46875 C 8.3399 9.40875 8.293978 9.269 8.25 9.25 C 8.224975 9.239 8.1932485 9.23175 8.15625 9.21875 C 8.0382585 9.17475 7.9354855 9.04125 7.8125 9.03125 L 7.75 9.03125 C 7.701985 9.03125 7.6477435 9.007 7.59375 9 C 7.55976 8.99 7.4887485 9.01 7.46875 9 C 7.43773 8.985 7.43122 8.92325 7.40625 8.90625 C 7.38623 8.89225 7.343493 8.886 7.3125 8.875 C 7.263495 8.857 7.2444965 8.8165 7.1875 8.8125 C 7.169515 8.8125 7.144982 8.8225 7.125 8.8125 C 7.09398 8.8025 7.060246 8.79925 7.03125 8.78125 C 6.99528 8.75925 6.952498 8.74975 6.9375 8.71875 C 6.9705 8.61085 6.86575 8.59425 6.84375 8.53125 C 6.83374 8.50225 6.85376 8.43225 6.84375 8.40625 C 6.83077 8.36925 6.791002 8.3435 6.75 8.3125 C 6.678005 8.2565 6.634243 8.23165 6.53125 8.21875 C 6.48527 8.20875 6.4299945 8.22875 6.375 8.21875 C 6.317008 8.20875 6.2314945 8.175 6.1875 8.125 C 6.14548 8.076 6.130744 8.0231 6.09375 8 C 6.05877 7.978 6.0239965 7.9605 6 7.9375 C 5.989 7.9275 5.97876 7.92925 5.96875 7.90625 C 5.950765 7.86925 5.9155 7.8575 5.9375 7.8125 C 5.897515 7.7925 5.917993 7.85075 5.875 7.84375 C 5.836005 7.78875 5.8067385 7.734 5.71875 7.75 C 5.678765 7.76 5.640747 7.84275 5.59375 7.84375 C 5.554755 7.84375 5.519746 7.758 5.46875 7.75 C 5.429755 7.74 5.3707495 7.78625 5.34375 7.78125 C 5.30074 7.77125 5.288973 7.74475 5.25 7.71875 C 5.221015 7.69975 5.17225 7.65525 5.15625 7.65625 C 5.106255 7.65625 5.0689915 7.75515 5 7.71875 C 4.96601 7.67575 5.071268 7.665 5.03125 7.625 C 5.001275 7.596 4.992763 7.64225 4.96875 7.65625 C 4.940755 7.67425 4.905993 7.6765 4.875 7.6875 C 4.806002 7.7135 4.7414935 7.721 4.6875 7.75 C 4.637505 7.776 4.622747 7.79245 4.59375 7.84375 C 4.57076 7.88575 4.534997 7.96675 4.5 7.96875 C 4.45798 7.96875 4.4442495 7.92325 4.40625 7.90625 C 4.2912615 7.85625 4.2199905 7.9355 4.125 7.9375 C 4.037006 7.9375 3.9022515 7.80175 3.90625 7.71875 C 3.909 7.66775 3.931505 7.59425 3.9375 7.53125 C 3.94245 7.48125 3.999065 7.4206 4 7.375 C 4.0011 7.313 3.883746 7.28835 3.84375 7.28125 C 3.749755 7.26425 3.6382415 7.32325 3.53125 7.28125 C 3.51123 7.24725 3.55051 7.2215 3.5625 7.1875 C 3.56948 7.1695 3.55551 7.146 3.5625 7.125 C 3.57449 7.093 3.641257 7.06525 3.65625 7.03125 C 3.66725 7.00525 3.64525 6.9705 3.65625 6.9375 C 3.66923 6.9015 3.715725 6.86975 3.71875 6.84375 C 3.7226 6.80975 3.6832 6.772 3.65625 6.75 C 3.573255 6.76 3.5167485 6.75725 3.46875 6.78125 C 3.360763 6.83025 3.3902435 6.966 3.28125 7 C 3.244235 7.012 3.198248 7.02425 3.15625 7.03125 C 3.137935 7.04125 3.11427 7.02925 3.09375 7.03125 C 3.0956963 7.0211336 3.0917443 7.0100944 3.09375 7 C 3.0984123 6.9772158 3.1200289 6.9601701 3.125 6.9375 C 3.1962653 6.6125035 3.3063949 6.2979344 3.4375 6 L 3.46875 6 C 3.506755 6.01 3.529505 6.0595 3.5625 6.0625 C 3.654493 6.0725 3.674001 5.9777 3.75 5.9375 C 3.827996 5.9485 3.866506 5.9275 3.9375 5.9375 C 3.985515 5.9475 4.055756 5.996 4.09375 6 C 4.12576 6 4.126248 5.96475 4.15625 5.96875 C 4.186225 5.97875 4.245 6.0265 4.25 6.0625 C 4.25495 6.1075 4.205715 6.16915 4.21875 6.21875 C 4.265775 6.26675 4.3705045 6.2845 4.4375 6.3125 C 4.4815 6.2755 4.44448 6.20825 4.4375 6.15625 C 4.4364 6.13325 4.44025 6.0835 4.4375 6.0625 C 4.43255 6.0265 4.40625 5.99975 4.40625 5.96875 C 4.40625 5.82575 4.5290085 5.77465 4.625 5.71875 C 4.665975 5.69475 4.7140025 5.643 4.75 5.625 C 4.800985 5.6 4.8330025 5.61775 4.875 5.59375 C 4.950988 5.55075 5.0035015 5.4862 5.0625 5.4375 C 5.089505 5.3725 5.05975 5.28275 5.0625 5.21875 C 5.089505 5.20175 5.127282 5.21875 5.15625 5.21875 C 5.20223 5.20875 5.223996 5.151 5.25 5.125 C 5.265015 5.11 5.294482 5.10875 5.3125 5.09375 C 5.35848 5.05775 5.366237 5.016 5.40625 5 C 5.420275 4.99 5.446723 4.97575 5.46875 4.96875 C 5.49878 4.95875 5.545757 4.9555 5.59375 4.9375 C 5.62477 4.9265 5.706749 4.91925 5.71875 4.90625 C 5.733765 4.89125 5.7149 4.8355 5.71875 4.8125 C 5.74273 4.6996 5.899009 4.69435 6 4.65625 C 6.069993 4.63025 6.1407545 4.5485 6.21875 4.5625 C 6.203735 4.6165 6.143249 4.6224 6.15625 4.6875 C 6.173245 4.7785 6.280501 4.66925 6.3125 4.65625 C 6.373495 4.63025 6.4825025 4.5925 6.5625 4.5625 C 6.632493 4.5375 6.753489 4.5181 6.6875 4.4375 C 6.6325 4.4275 6.6104935 4.48 6.5625 4.5 C 6.5295 4.51 6.527978 4.47175 6.5 4.46875 C 6.472995 4.46875 6.464527 4.505 6.4375 4.5 C 6.410495 4.49 6.378998 4.43925 6.375 4.40625 C 6.364 4.32225 6.43476 4.3119 6.46875 4.25 C 6.44576 4.174 6.3452425 4.2175 6.28125 4.1875 C 6.28824 4.1425 6.322007 4.10375 6.375 4.09375 C 6.41801 4.08375 6.5365015 4.102 6.5625 4.125 C 6.577515 4.138 6.5395595 4.1665 6.5625 4.1875 C 6.588515 4.2105 6.622254 4.1975 6.65625 4.1875 C 6.66824 4.1305 6.583751 4.162 6.59375 4.125 C 6.661741 4.081 6.792005 4.10475 6.875 4.09375 C 6.923015 4.08375 6.988251 4.05425 7.03125 4.03125 C 7.071235 4.00825 7.0830015 3.962 7.125 4 C 7.13699 4.041 7.116685 4.07175 7.09375 4.09375 C 7.016756 4.16175 6.934994 4.2336 6.875 4.3125 C 6.912015 4.3485 6.969254 4.33675 7.03125 4.34375 C 7.05523 4.35375 7.099997 4.33875 7.125 4.34375 C 7.15503 4.35375 7.194748 4.33375 7.21875 4.34375 C 7.26077 4.35375 7.270507 4.4375 7.3125 4.4375 C 7.380496 4.4375 7.351523 4.3577 7.3125 4.3125 C 7.32449 4.2655 7.3608 4.2207 7.34375 4.1875 C 7.31273 4.1255 7.1935005 4.206 7.1875 4.125 C 7.18365 4.075 7.231993 4.06925 7.25 4.03125 C 7.24202 3.93525 7.322499 3.93075 7.3125 3.84375 C 7.30755 3.80775 7.275008 3.81525 7.25 3.78125 C 7.23702 3.76325 7.23371 3.7015 7.21875 3.6875 C 7.166775 3.6435 7.0685005 3.67795 7.0625 3.59375 C 7.05975 3.54375 7.06948 3.4911 7.0625 3.4375 C 7.05551 3.3865 7.012728 3.22875 6.96875 3.21875 C 6.912755 3.20675 6.8794955 3.31245 6.8125 3.34375 C 6.77653 3.36075 6.693243 3.381 6.65625 3.375 C 6.63227 3.365 6.596753 3.3595 6.59375 3.3125 C 6.58979 3.2701 6.6405966 3.2512172 6.65625 3.21875 C 6.6601634 3.2106332 6.654259 3.19872 6.65625 3.1875 C 6.7288164 3.1672517 6.8012164 3.1422715 6.875 3.125 C 6.9169167 3.1152798 6.9576866 3.1024086 7 3.09375 C 7.0298771 3.0875279 7.0636852 3.0994569 7.09375 3.09375 C 7.2273044 3.0689879 7.3629458 3.0451686 7.5 3.03125 C 7.6662387 3.0137812 7.8289018 3 8 3 z M 5.96875 3.46875 C 5.9369162 3.6513239 5.7660026 3.7240206 5.5625 3.71875 C 5.51652 3.76275 5.55622 3.84525 5.53125 3.90625 C 5.51024 3.95725 5.425991 4.004 5.375 4 C 5.337985 4 5.28125 3.94125 5.28125 3.90625 C 5.28125 3.86325 5.349521 3.8617 5.3125 3.8125 C 5.31415 3.8025 5.333355 3.79125 5.34375 3.78125 C 5.3639901 3.7685049 5.3858533 3.762493 5.40625 3.75 C 5.5874525 3.6384834 5.7732114 3.5568279 5.96875 3.46875 z M 10.15625 3.65625 C 10.13782 3.66625 10.14122 3.6775 10.125 3.6875 C 10.08699 3.7105 10.06026 3.739 10.03125 3.75 C 9.99028 3.765 9.943504 3.7755 9.9375 3.8125 C 9.93255 3.8435 9.969795 3.846 9.96875 3.875 C 9.953735 3.912 9.94553 3.92375 9.9375 3.96875 C 9.988485 4.05175 10.093258 3.9505 10.15625 3.9375 C 10.18425 3.9275 10.20375 3.93025 10.21875 3.90625 C 10.23574 3.87925 10.23706 3.8507 10.25 3.8125 C 10.26403 3.7705 10.31751 3.75575 10.3125 3.71875 C 10.3087 3.68175 10.218244 3.65125 10.15625 3.65625 z M 4.6875 4.28125 C 4.7349118 4.319347 4.8015588 4.40185 4.71875 4.4375 C 4.70874 4.4475 4.5864965 4.47275 4.5625 4.46875 C 4.55282 4.46875 4.5397337 4.44475 4.53125 4.4375 C 4.5829129 4.3871923 4.6337069 4.3293033 4.6875 4.28125 z M 4.875 4.46875 C 4.89898 4.46875 4.909483 4.52925 4.9375 4.53125 C 4.964505 4.53125 4.983973 4.496 5 4.5 C 5.04202 4.511 5.071268 4.5938 5.03125 4.625 C 4.99825 4.635 4.992713 4.58975 4.96875 4.59375 C 4.900754 4.60575 4.8634955 4.754 4.8125 4.75 C 4.764485 4.74 4.732228 4.62875 4.78125 4.59375 C 4.78235 4.56375 4.779215 4.56225 4.78125 4.53125 C 4.796265 4.51325 4.834982 4.46575 4.875 4.46875 z M 4.625 4.5 C 4.639025 4.5 4.651245 4.49 4.65625 4.5 C 4.64927 4.553 4.634708 4.56875 4.59375 4.59375 C 4.522756 4.63675 4.460501 4.68975 4.4375 4.78125 C 4.43051 4.80825 4.3464955 4.8817 4.3125 4.875 C 4.233504 4.858 4.357015 4.7104 4.375 4.6875 C 4.39502 4.6625 4.414526 4.654 4.4375 4.625 C 4.46049 4.597 4.478055 4.54725 4.5 4.53125 C 4.52398 4.51425 4.5830075 4.498 4.625 4.5 z M 11.40625 4.65625 C 11.48524 4.64625 11.526502 4.73365 11.5625 4.78125 C 11.59248 4.82025 11.669746 4.87905 11.71875 4.90625 C 11.74675 4.92125 11.7815 4.95475 11.8125 4.96875 C 11.87749 4.99775 11.996996 5.09225 12 5.15625 C 12.0011 5.18825 11.96374 5.22 11.96875 5.25 C 12.01776 5.26 12.0615 5.1742 12.0625 5.125 C 12.15441 5.2550064 12.233102 5.3926596 12.3125 5.53125 C 12.35 5.5967067 12.402944 5.6512957 12.4375 5.71875 C 12.39339 5.73175 12.38209 5.73825 12.375 5.78125 C 12.36499 5.83725 12.39649 5.9276 12.3125 5.9375 C 12.25953 5.9475 12.19799 5.892 12.125 5.875 C 12.09502 5.865 12.05525 5.885 12.03125 5.875 C 11.97625 5.857 11.9845 5.7833 11.9375 5.75 C 11.91049 5.731 11.824253 5.6925 11.78125 5.6875 C 11.75424 5.6875 11.74673 5.6975 11.71875 5.6875 C 11.68476 5.6775 11.621749 5.7015 11.59375 5.6875 C 11.56674 5.6705 11.50701 5.61675 11.5 5.59375 C 11.489 5.55675 11.59175 5.5313 11.59375 5.5 C 11.59595 5.476 11.5675 5.44325 11.5625 5.40625 C 11.5587 5.38425 11.5674 5.35875 11.5625 5.34375 C 11.5555 5.31775 11.50974 5.3135 11.46875 5.3125 C 11.43272 5.3125 11.40599 5.3125 11.375 5.3125 C 11.331 5.3125 11.242494 5.3085 11.1875 5.3125 C 11.1545 5.3125 11.12475 5.3095 11.09375 5.3125 C 11.00676 5.3225 10.942997 5.3025 10.875 5.3125 C 10.82599 5.3125 10.733496 5.354 10.6875 5.375 C 10.66451 5.386 10.65501 5.39125 10.625 5.40625 C 10.61103 5.41625 10.58054 5.4295 10.5625 5.4375 C 10.53451 5.4505 10.49575 5.492 10.46875 5.5 C 10.42976 5.51 10.38349 5.49 10.3125 5.5 C 10.26152 5.5 10.188501 5.46725 10.1875 5.40625 C 10.1864 5.31325 10.349511 5.36075 10.4375 5.34375 C 10.4705 5.33375 10.49123 5.30525 10.53125 5.28125 C 10.55028 5.27025 10.54451 5.262 10.5625 5.25 C 10.59247 5.229 10.65125 5.18025 10.65625 5.15625 C 10.66005 5.13425 10.65323 5.11075 10.65625 5.09375 C 10.66005 5.07275 10.69175 5.05925 10.71875 5.03125 C 10.76077 4.98925 10.791747 4.93345 10.84375 4.90625 C 10.87873 4.88825 10.9215 4.87275 10.9375 4.84375 C 10.9413 4.81175 10.9364 4.81125 10.9375 4.78125 C 10.9595 4.76125 10.98202 4.754 11 4.75 C 11.05401 4.738 11.093259 4.753 11.15625 4.75 C 11.18325 4.75 11.221 4.763 11.25 4.75 C 11.27398 4.734 11.2885 4.6995 11.3125 4.6875 C 11.33851 4.6735 11.37422 4.65825 11.40625 4.65625 z M 11.96875 5.25 L 11.84375 5.25 C 11.79975 5.25 11.744749 5.227 11.71875 5.25 C 11.75577 5.31 11.823255 5.32875 11.90625 5.34375 C 11.93623 5.32175 11.95478 5.2883 11.96875 5.25 z M 5.125 4.6875 L 5.21875 4.6875 C 5.243775 4.6875 5.271251 4.6775 5.28125 4.6875 C 5.265245 4.7535 5.114497 4.74275 5.0625 4.71875 C 5.06525 4.69375 5.092968 4.6915 5.125 4.6875 z M 4.90625 4.8125 C 4.8625672 4.8442816 4.8193312 4.8845833 4.75 4.90625 C 4.711995 4.91825 4.663252 4.917 4.65625 4.875 C 4.64822 4.823 4.715988 4.84875 4.75 4.84375 C 4.794 4.83375 4.855254 4.8145 4.90625 4.8125 z M 11.40625 4.8125 C 11.37325 4.8235 11.35724 4.89625 11.40625 4.90625 C 11.42924 4.89225 11.44355 4.8555 11.4375 4.8125 C 11.42452 4.7985 11.41621 4.8025 11.40625 4.8125 z M 11.34375 4.96875 C 11.34485 5.02475 11.35475 5.0764 11.34375 5.125 C 11.37576 5.187 11.452756 5.13575 11.46875 5.09375 C 11.48778 4.98975 11.45425 4.95575 11.40625 4.96875 C 11.39025 4.97875 11.36069 4.95575 11.34375 4.96875 z M 3.0625 7.3125 C 3.118864 7.3635 3.1512925 7.43535 3.21875 7.46875 C 3.243775 7.48175 3.280501 7.492 3.3125 7.5 C 3.338515 7.51 3.350013 7.492 3.375 7.5 C 3.42802 7.518 3.4892575 7.5435 3.53125 7.5625 C 3.595248 7.5905 3.66375 7.68675 3.71875 7.71875 C 3.7215 7.75075 3.70874 7.7885 3.71875 7.8125 C 3.744765 7.8475 3.7704965 7.88225 3.8125 7.90625 C 3.863485 7.93425 3.8895065 7.9778 3.9375 8 C 3.954495 8.01 3.973963 7.99 4 8 C 4.065994 8.02 4.099253 8.11055 4.15625 8.09375 C 4.193265 8.08275 4.181505 8.036 4.1875 8 C 4.212525 7.973 4.242222 7.9375 4.28125 7.9375 C 4.34324 7.9375 4.351999 8.03315 4.375 8.09375 C 4.38798 8.12775 4.428535 8.1515 4.4375 8.1875 C 4.452515 8.2495 4.45048 8.43175 4.4375 8.46875 C 4.421495 8.51475 4.3504995 8.5122 4.3125 8.5625 C 4.294515 8.5865 4.29522 8.63925 4.28125 8.65625 C 4.25727 8.68525 4.236773 8.69075 4.21875 8.71875 C 4.20874 8.73375 4.196465 8.76025 4.1875 8.78125 C 4.15747 8.84525 4.099986 8.89175 4.125 8.96875 C 4.13501 8.99975 4.1875 9.0255 4.1875 9.0625 C 4.1875 9.1065 4.100751 9.1393 4.09375 9.1875 C 4.0888 9.2225 4.114055 9.2658 4.125 9.3125 C 4.13298 9.3475 4.197751 9.38325 4.21875 9.40625 C 4.25373 9.44525 4.280501 9.513 4.3125 9.5625 C 4.375491 9.6595 4.406765 9.78 4.46875 9.875 C 4.50175 9.924 4.57175 9.9484 4.59375 10 C 4.60475 10.026 4.58374 10.06975 4.59375 10.09375 C 4.62972 10.17475 4.794007 10.2726 4.875 10.3125 C 4.913005 10.3315 4.965009 10.32375 5 10.34375 C 5.05302 10.37375 5.160506 10.4534 5.1875 10.5 C 5.21148 10.542 5.20676 10.65185 5.21875 10.71875 C 5.233765 10.80675 5.2149 10.87365 5.21875 10.96875 C 5.2215 11.02075 5.25 11.04215 5.25 11.09375 C 5.25 11.11175 5.2511 11.1685 5.25 11.1875 C 5.2489 11.2495 5.25495 11.312 5.25 11.375 C 5.24725 11.409 5.2478 11.43975 5.25 11.46875 C 5.25275 11.49975 5.27927 11.50325 5.28125 11.53125 C 5.28345 11.56025 5.246975 11.602 5.25 11.625 C 5.25699 11.688 5.300499 11.72315 5.3125 11.78125 C 5.32251 11.82725 5.349745 11.945 5.34375 12 C 5.3399 12.029 5.316515 12.06075 5.3125 12.09375 C 5.30975 12.11975 5.31635 12.13225 5.3125 12.15625 C 5.30975 12.17925 5.31844 12.19975 5.3125 12.21875 C 5.2806543 12.198271 5.2500951 12.177426 5.21875 12.15625 C 4.9527483 11.976543 4.6949555 11.757456 4.46875 11.53125 C 4.4381566 11.500657 4.4047959 11.468874 4.375 11.4375 C 4.1944191 11.247353 4.0241375 11.029182 3.875 10.8125 C 3.8614865 10.792866 3.8569888 10.769835 3.84375 10.75 C 3.6707036 10.490733 3.5290643 10.227866 3.40625 9.9375 C 3.3973945 9.9165633 3.3835772 9.8960813 3.375 9.875 C 3.2696226 9.6160011 3.1860736 9.3410185 3.125 9.0625 C 3.1134736 9.0099352 3.1036081 8.9594198 3.09375 8.90625 C 3.0689879 8.7726956 3.0451686 8.6370542 3.03125 8.5 C 3.01418 8.3319146 3 8.172589 3 8 C 3 7.7623582 3.030436 7.5413039 3.0625 7.3125 z M 5 7.84375 C 5.048015 7.82175 5.038995 7.89925 5 7.90625 C 4.962985 7.91625 4.96403 7.86175 5 7.84375 z " transform="translate(0,1036.3622)" + id="path26" + class="ColorScheme-Text"/> + </g> +</svg> diff --git a/launcher/resources/breeze_light/breeze_light.qrc b/launcher/resources/breeze_light/breeze_light.qrc new file mode 100644 index 00000000..7d9d99f5 --- /dev/null +++ b/launcher/resources/breeze_light/breeze_light.qrc @@ -0,0 +1,43 @@ +<RCC> + <qresource prefix="/icons/breeze_light"> + <file>index.theme</file> + <file>scalable/about.svg</file> + <file>scalable/accounts.svg</file> + <file>scalable/bug.svg</file> + <file>scalable/centralmods.svg</file> + <file>scalable/checkupdate.svg</file> + <file>scalable/copy.svg</file> + <file>scalable/coremods.svg</file> + <file>scalable/custom-commands.svg</file> + <file>scalable/discord.svg</file> + <file>scalable/externaltools.svg</file> + <file>scalable/help.svg</file> + <file>scalable/instance-settings.svg</file> + <file>scalable/jarmods.svg</file> + <file>scalable/java.svg</file> + <file>scalable/language.svg</file> + <file>scalable/loadermods.svg</file> + <file>scalable/log.svg</file> + <file>scalable/minecraft.svg</file> + <file>scalable/new.svg</file> + <file>scalable/news.svg</file> + <file>scalable/notes.svg</file> + <file>scalable/proxy.svg</file> + <file>scalable/reddit-alien.svg</file> + <file>scalable/refresh.svg</file> + <file>scalable/resourcepacks.svg</file> + <file>scalable/shaderpacks.svg</file> + <file>scalable/screenshots.svg</file> + <file>scalable/settings.svg</file> + <file>scalable/status-bad.svg</file> + <file>scalable/status-good.svg</file> + <file>scalable/status-yellow.svg</file> + <file>scalable/viewfolder.svg</file> + <file>scalable/worlds.svg</file> + <file>scalable/delete.svg</file> + <file>scalable/tag.svg</file> + <file>scalable/export.svg</file> + <file>scalable/rename.svg</file> + <file>scalable/launch.svg</file> + </qresource> +</RCC> diff --git a/launcher/resources/breeze_light/index.theme b/launcher/resources/breeze_light/index.theme new file mode 100644 index 00000000..126d42d7 --- /dev/null +++ b/launcher/resources/breeze_light/index.theme @@ -0,0 +1,11 @@ +[Icon Theme] +Name=Breeze Light +Comment=Breeze Light Icons +Inherits=multimc +Directories=scalable + +[scalable] +Size=48 +Type=Scalable +MinSize=16 +MaxSize=256 diff --git a/launcher/resources/breeze_light/scalable/about.svg b/launcher/resources/breeze_light/scalable/about.svg new file mode 100644 index 00000000..ea1dc02c --- /dev/null +++ b/launcher/resources/breeze_light/scalable/about.svg @@ -0,0 +1,12 @@ +<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#232629; + } + </style> + <g class="ColorScheme-Text" fill="currentColor" fill-rule="evenodd"> + <path d="m8 2a6 6 0 0 0 -6 6 6 6 0 0 0 6 6 6 6 0 0 0 6-6 6 6 0 0 0 -6-6zm0 1a5 5 0 0 1 5 5 5 5 0 0 1 -5 5 5 5 0 0 1 -5-5 5 5 0 0 1 5-5z"/> + <path d="m7 4h2v2h-2z"/> + <path d="m7 7h2v5h-2z"/> + </g> +</svg> diff --git a/launcher/resources/breeze_light/scalable/accounts.svg b/launcher/resources/breeze_light/scalable/accounts.svg new file mode 100644 index 00000000..8a542f36 --- /dev/null +++ b/launcher/resources/breeze_light/scalable/accounts.svg @@ -0,0 +1,17 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"> + <defs + id="defs3051"> + <style + type="text/css" + id="current-color-scheme"> + .ColorScheme-Text { + color:#232629; + } + </style> + </defs> + <path + style="fill:currentColor;fill-opacity:1;stroke:none" + d="M 20.5,4 A 4.5,4.5 0 0 0 16,8.5 4.5,4.5 0 0 0 20.5,13 4.5,4.5 0 0 0 25,8.5 4.5,4.5 0 0 0 20.5,4 Z m 0,1 A 3.5,3.5 0 0 1 24,8.5 3.5,3.5 0 0 1 20.5,12 3.5,3.5 0 0 1 17,8.5 3.5,3.5 0 0 1 20.5,5 Z m -9,4 C 9.014719,9 7,11.01472 7,13.5 7,15.98528 9.014719,18 11.5,18 13.985281,18 16,15.98528 16,13.5 16,11.01472 13.985281,9 11.5,9 Z m 0,1 A 3.5,3.5 0 0 1 15,13.5 3.5,3.5 0 0 1 11.5,17 3.5,3.5 0 0 1 8,13.5 3.5,3.5 0 0 1 11.5,10 Z m 9,4 c -0.88285,0.003 -1.758266,0.17228 -2.585938,0.5 -0.06618,0.42368 -0.174132,0.83977 -0.322265,1.24219 C 18.494507,15.25488 19.490227,15.00077 20.5,15 c 3.589851,0 6.5,3.13401 6.5,7 l -8.341797,0 c 0.170323,0.32329 0.325499,0.65711 0.464844,1 L 28,23 28,22 c 0,-4.41828 -3.357864,-8 -7.5,-8 z m -9,5 C 7.357864,19 4,22.58172 4,27 l 0,1 15,0 0,-1 c 0,-4.41828 -3.357864,-8 -7.5,-8 z m 0,1 c 3.589851,0 6.5,3.13401 6.5,7 L 5,27 c 0,-3.86599 2.910149,-7 6.5,-7 z" + class="ColorScheme-Text" + /> +</svg> diff --git a/launcher/resources/breeze_light/scalable/bug.svg b/launcher/resources/breeze_light/scalable/bug.svg new file mode 100644 index 00000000..4f41ad6b --- /dev/null +++ b/launcher/resources/breeze_light/scalable/bug.svg @@ -0,0 +1,13 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"> + <defs id="defs3051"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#232629; + } + </style> + </defs> + <path style="fill:currentColor;fill-opacity:1;stroke:none" + d="m2 2v12h12v-12zm1 1h10v10h-10zm1 2v2h2v-2zm6 0v2h2v-2zm-4 4v1h4v-1zm4 1v1h1v-1zm1 1v1h1v-1zm-5-1h-1v1h1zm-1 1h-1v1h1z" + class="ColorScheme-Text" + /> +</svg> diff --git a/launcher/resources/breeze_light/scalable/centralmods.svg b/launcher/resources/breeze_light/scalable/centralmods.svg new file mode 100644 index 00000000..4035e51c --- /dev/null +++ b/launcher/resources/breeze_light/scalable/centralmods.svg @@ -0,0 +1 @@ +<svg width="8" height="8" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M3 3.5v.25h-.5V6h3V3.75H5V3.5h-.75v.25h-.5V3.5H3Zm-.25.5h2.5v1.75h-2.5V4Z" fill="#EFF0F1"/><path d="M1 1v6h6l-.25-.25h-5.5V3.5H2.5l.75-.75h3.5v4L7 7V1.75H4.5L3.75 1H1Z" fill="#EFF0F1"/></svg>
\ No newline at end of file diff --git a/launcher/resources/breeze_light/scalable/checkupdate.svg b/launcher/resources/breeze_light/scalable/checkupdate.svg new file mode 100644 index 00000000..06b31827 --- /dev/null +++ b/launcher/resources/breeze_light/scalable/checkupdate.svg @@ -0,0 +1,14 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"> + <defs id="defs3051"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#232629; + } + </style> + </defs> + <path + style="fill:currentColor" + d="M 6 2 L 6 3 L 6 6 L 7 6 L 7 3 L 9 3 L 9 6 L 10 6 L 10 3 L 10 2 L 6 2 z M 3.7 6 L 3 6.7 L 6.3 10 L 8 11.7 L 9.7 10 L 13 6.7 L 12.3 6 L 9 9.3 L 8 10.3 L 7 9.3 L 3.7 6 z M 2 12 L 2 14 L 3 14 L 14 14 L 14 13 L 14 12 L 13 12 L 13 13 L 3 13 L 3 12 L 2 12 z " + class="ColorScheme-Text" + /> +</svg> diff --git a/launcher/resources/breeze_light/scalable/copy.svg b/launcher/resources/breeze_light/scalable/copy.svg new file mode 100644 index 00000000..2557953b --- /dev/null +++ b/launcher/resources/breeze_light/scalable/copy.svg @@ -0,0 +1,11 @@ +<!DOCTYPE svg> +<svg viewBox="0 0 22 22" version="1.1" xmlns="http://www.w3.org/2000/svg"> + <defs> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#232629; + } + </style> + </defs> + <path class="ColorScheme-Text" style="fill:currentColor; fill-opacity:1; stroke:none" d="M 3 3 L 3 17 L 7 17 L 7 19 L 17 19 L 17 10 L 13 6 L 12 6 L 9 3 L 3 3 Z M 4 4 L 8 4 L 8 6 L 7 6 L 7 16 L 4 16 L 4 4 Z M 8 7 L 12 7 L 12 11 L 16 11 L 16 18 L 8 18 L 8 7 Z"/> +</svg> diff --git a/launcher/resources/breeze_light/scalable/coremods.svg b/launcher/resources/breeze_light/scalable/coremods.svg new file mode 100644 index 00000000..ec4ecea8 --- /dev/null +++ b/launcher/resources/breeze_light/scalable/coremods.svg @@ -0,0 +1 @@ +<svg width="8" height="8" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M3.167 2.46v.208H2.75v1.875h2.5V2.668h-.417V2.46h-.625v.208h-.416V2.46h-.625Zm-.209.417h2.084v1.458H2.958V2.877Z" fill="#EFF0F1"/><path d="M1.5 1v6h5V1h-5Zm1.5.5h2a1 1 0 0 1 1 1V3a.5.5 0 1 0 0 1v1l-.5.5h-3L2 5V4a.5.5 0 1 0 0-1v-.5a1 1 0 0 1 1-1ZM2 6h2v.5H2V6Zm3 0h1v.5H5V6Z" fill="#EFF0F1"/></svg>
\ No newline at end of file diff --git a/launcher/resources/breeze_light/scalable/custom-commands.svg b/launcher/resources/breeze_light/scalable/custom-commands.svg new file mode 100644 index 00000000..b2ac78c5 --- /dev/null +++ b/launcher/resources/breeze_light/scalable/custom-commands.svg @@ -0,0 +1,13 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"> + <defs id="defs3051"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#232629; + } + </style> + </defs> + <path style="fill:currentColor;fill-opacity:1;stroke:none" + d="M 2 2 L 2 14 L 14 14 L 14 2 L 2 2 z M 3 3 L 13 3 L 13 13 L 3 13 L 3 3 z M 4.71875 4 L 4 4.6875 L 6.625 7.5 L 4.03125 10.3125 L 4.71875 11 L 7.6875 7.84375 L 8 7.5 L 7.6875 7.15625 L 4.71875 4 z M 8 11 L 8 12 L 12 12 L 12 11 L 8 11 z " + class="ColorScheme-Text" + /> +</svg> diff --git a/launcher/resources/breeze_light/scalable/delete.svg b/launcher/resources/breeze_light/scalable/delete.svg new file mode 100644 index 00000000..f2aea6e8 --- /dev/null +++ b/launcher/resources/breeze_light/scalable/delete.svg @@ -0,0 +1,13 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"> + <defs id="defs3051"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#232629; + } + </style> + </defs> + <path + style="fill:currentColor;fill-opacity:1;stroke:none" + d="M 6 2 L 6 3 L 2 3 L 2 4 L 3 4 L 3 14 L 4 14 L 13 14 L 13 13 L 13 4 L 14 4 L 14 3 L 10 3 L 10 2 L 6 2 z M 7 3 L 9 3 L 9 4 L 10 4 L 12 4 L 12 13 L 4 13 L 4 4 L 7 4 L 7 3 z M 6 6 L 6 11 L 7 11 L 7 6 L 6 6 z M 9 6 L 9 11 L 10 11 L 10 6 L 9 6 z " + class="ColorScheme-Text"/> +</svg> diff --git a/launcher/resources/breeze_light/scalable/discord.svg b/launcher/resources/breeze_light/scalable/discord.svg new file mode 100644 index 00000000..22ee27ba --- /dev/null +++ b/launcher/resources/breeze_light/scalable/discord.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 127.14 96.36"><defs><style>.cls-1{fill:#fff;}</style></defs><g id="图层_2" data-name="图层 2"><g id="Discord_Logos" data-name="Discord Logos"><g id="Discord_Logo_-_Large_-_White" data-name="Discord Logo - Large - White"><path class="cls-1" d="M107.7,8.07A105.15,105.15,0,0,0,81.47,0a72.06,72.06,0,0,0-3.36,6.83A97.68,97.68,0,0,0,49,6.83,72.37,72.37,0,0,0,45.64,0,105.89,105.89,0,0,0,19.39,8.09C2.79,32.65-1.71,56.6.54,80.21h0A105.73,105.73,0,0,0,32.71,96.36,77.7,77.7,0,0,0,39.6,85.25a68.42,68.42,0,0,1-10.85-5.18c.91-.66,1.8-1.34,2.66-2a75.57,75.57,0,0,0,64.32,0c.87.71,1.76,1.39,2.66,2a68.68,68.68,0,0,1-10.87,5.19,77,77,0,0,0,6.89,11.1A105.25,105.25,0,0,0,126.6,80.22h0C129.24,52.84,122.09,29.11,107.7,8.07ZM42.45,65.69C36.18,65.69,31,60,31,53s5-12.74,11.43-12.74S54,46,53.89,53,48.84,65.69,42.45,65.69Zm42.24,0C78.41,65.69,73.25,60,73.25,53s5-12.74,11.44-12.74S96.23,46,96.12,53,91.08,65.69,84.69,65.69Z"/></g></g></g></svg>
\ No newline at end of file diff --git a/launcher/resources/breeze_light/scalable/export.svg b/launcher/resources/breeze_light/scalable/export.svg new file mode 100644 index 00000000..d6314bd7 --- /dev/null +++ b/launcher/resources/breeze_light/scalable/export.svg @@ -0,0 +1,11 @@ +<!DOCTYPE svg> +<svg viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg"> + <defs> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#232629; + } + </style> + </defs> + <path class="ColorScheme-Text" style="fill:currentColor; fill-opacity:1; stroke:none" d="M 7 12 L 11.0859 12 L 9.46484 13.6211 L 10.1719 14.3281 L 13 11.5 L 10.1719 8.67187 L 9.46484 9.37891 L 11.0859 11 L 7 11 L 7 12 Z M 4 13 L 4 3 L 9 3 L 9 6 L 12 6 L 12 9 L 13 9 L 13 5 L 10 2 L 3 2 L 3 14 L 8 14 L 8 13 L 4 13 Z"/> +</svg> diff --git a/launcher/resources/breeze_light/scalable/externaltools.svg b/launcher/resources/breeze_light/scalable/externaltools.svg new file mode 100644 index 00000000..c965b6c3 --- /dev/null +++ b/launcher/resources/breeze_light/scalable/externaltools.svg @@ -0,0 +1,13 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"> + <defs id="defs3051"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#232629; + } + </style> + </defs> + <path style="fill:currentColor;fill-opacity:1;stroke:none" + d="M 4 5 L 4 7 L 2 7 L 2 8 L 4 8 L 4 10 L 5 10 L 7 10 L 7 9 L 5 9 L 5 6 L 7 6 L 7 5 L 5 5 L 4 5 z M 9 5 L 9 6 L 11 6 L 11 9 L 9 9 L 9 10 L 11 10 L 12 10 L 12 9 L 12 8 L 14 8 L 14 7 L 12 7 L 12 6 L 12 5 L 11 5 L 9 5 z M 7 7 L 7 8 L 9 8 L 9 7 L 7 7 z " + class="ColorScheme-Text" + /> +</svg> diff --git a/launcher/resources/breeze_light/scalable/help.svg b/launcher/resources/breeze_light/scalable/help.svg new file mode 100644 index 00000000..bcd14e05 --- /dev/null +++ b/launcher/resources/breeze_light/scalable/help.svg @@ -0,0 +1,13 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22"> + <defs id="defs3051"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#232629; + } + </style> + </defs> + <path style="fill:currentColor;fill-opacity:1;stroke:none" + d="M 3 4 L 3 16 L 6 20 L 6 17 L 6 16 L 19 16 L 19 4 L 3 4 z M 4 5 L 18 5 L 18 15 L 4 15 L 4 5 z M 10.5 6 A 2.5 2.5 0 0 0 8 8.5 L 8 9 L 9 9 L 9 8.5 A 1.5 1.5 0 0 1 10.5 7 A 1.5 1.5 0 0 1 12 8.5 A 1.5 1.5 0 0 1 10.5 10 L 10 10 L 10 12 L 11 12 L 11 10.949219 A 2.5 2.5 0 0 0 13 8.5 A 2.5 2.5 0 0 0 10.5 6 z M 10 13 L 10 14 L 11 14 L 11 13 L 10 13 z " + class="ColorScheme-Text" + /> +</svg> diff --git a/launcher/resources/breeze_light/scalable/instance-settings.svg b/launcher/resources/breeze_light/scalable/instance-settings.svg new file mode 100644 index 00000000..69854d73 --- /dev/null +++ b/launcher/resources/breeze_light/scalable/instance-settings.svg @@ -0,0 +1,13 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"> + <defs id="defs3051"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#232629; + } + </style> + </defs> + <path style="fill:currentColor;fill-opacity:1;stroke:none" + d="M 2 2 L 2 5 L 2 14 L 3 14 L 14 14 L 14 13 L 14 2 L 3 2 L 2 2 z M 3 5 L 13 5 L 13 13 L 3 13 L 3 5 z M 4 6 L 4 12 L 6 12 L 6 6 L 4 6 z M 7 7 L 7 8 L 12 8 L 12 7 L 7 7 z M 7 10 L 7 11 L 12 11 L 12 10 L 7 10 z " + class="ColorScheme-Text" + /> +</svg> diff --git a/launcher/resources/breeze_light/scalable/jarmods.svg b/launcher/resources/breeze_light/scalable/jarmods.svg new file mode 100644 index 00000000..49a45d36 --- /dev/null +++ b/launcher/resources/breeze_light/scalable/jarmods.svg @@ -0,0 +1 @@ +<svg width="8" height="8" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M2 1.5V2H1v4.5h6V2H6v-.5H4.5V2h-1v-.5H2Zm-.5 1h5V6h-5V2.5Z" fill="#EFF0F1"/><path d="M3.93 4.37s-.19-.364-.183-.63c.005-.19.434-.378.603-.651.168-.273-.022-.54-.022-.54s.043.197-.07.4c-.112.203-.525.322-.686.672-.16.35.357.75.357.75Z" fill="#EFF0F1"/><path d="M4.637 3.264s-.645.246-.645.525c0 .28.175.372.203.463.028.091-.049.245-.049.245s.252-.175.21-.378c-.042-.203-.238-.267-.126-.47.075-.136.407-.385.407-.385Z" fill="#EFF0F1"/><path d="M3.859 4.741c.595-.021.812-.209.812-.209-.385.105-1.407.098-1.415.021-.006-.077.316-.14.316-.14s-.505 0-.546.126c-.043.126.238.223.833.202ZM4.72 5.036s.583-.124.526-.44c-.07-.386-.477-.169-.477-.169s.288 0 .316.175c.028.175-.364.434-.364.434ZM4.434 4.868s-.147.038-.364.063c-.292.033-.645.007-.673-.042-.028-.05.05-.077.05-.077-.35.084-.16.23.251.26.352.023.876-.106.876-.106l-.14-.098ZM3.53 5.174s-.159.004-.168.088c-.01.084.098.159.49.182.392.024.668-.107.668-.107l-.178-.107s-.112.023-.285.046c-.173.024-.527-.018-.541-.051-.014-.032.014-.051.014-.051Z" fill="#EFF0F1"/><path d="M5.057 5.552c.06-.065-.019-.117-.019-.117s.028.033-.009.07c-.037.037-.378.13-.924.158-.546.028-1.14-.05-1.159-.121-.018-.07.304-.126.304-.126-.037.005-.485.014-.5.136-.013.12.197.22 1.037.22.84 0 1.21-.155 1.27-.22Z" fill="#EFF0F1"/><path d="M4.73 5.828c-.368.074-1.489.027-1.489.027s.728.173 1.56.029c.397-.07.42-.262.42-.262s-.122.13-.49.206Z" fill="#EFF0F1"/></svg>
\ No newline at end of file diff --git a/launcher/resources/breeze_light/scalable/java.svg b/launcher/resources/breeze_light/scalable/java.svg new file mode 100644 index 00000000..ff86c9cc --- /dev/null +++ b/launcher/resources/breeze_light/scalable/java.svg @@ -0,0 +1,10 @@ +<svg width="1000" height="1000" viewBox="0 0 1000 1000" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M479.6 536.2C479.6 536.2 425 430.9 427 354C428.5 299 552.4 244.7 601.1 165.8C649.7 86.9 595 10 595 10C595 10 607.2 66.7 574.8 125.3C542.4 184 422.9 218.5 376.4 319.6C329.9 420.9 479.6 536.2 479.6 536.2Z" fill="#232629"/> +<path d="M684.099 216.4C684.099 216.4 497.899 287.3 497.899 368.2C497.899 449.2 548.499 475.5 556.599 501.8C564.699 528.2 542.399 572.7 542.399 572.7C542.399 572.7 615.199 522.1 602.999 463.4C590.799 404.7 534.199 386.4 566.599 327.8C588.399 288.4 684.099 216.4 684.099 216.4Z" fill="#232629"/> +<path d="M459.399 643.2C631.499 637.1 694.2 582.8 694.2 582.8C582.9 613.1 287.399 611.1 285.299 588.9C283.299 566.6 376.399 548.4 376.399 548.4C376.399 548.4 230.7 548.4 218.6 584.8C206.4 621.2 287.499 649.2 459.399 643.2Z" fill="#232629"/> +<path d="M708.399 728.5C708.399 728.5 876.799 692.6 860.099 601.1C839.899 489.7 722.499 552.5 722.499 552.5C722.499 552.5 805.599 552.5 813.599 603.1C821.699 653.6 708.399 728.5 708.399 728.5Z" fill="#232629"/> +<path d="M625.4 679.9C625.4 679.9 583 691 520.1 698.1C435.8 707.6 333.9 700.1 325.8 685.9C317.8 671.7 340 663.7 340 663.7C238.8 688 294.2 730.4 412.8 738.6C514.5 745.5 665.9 708.2 665.9 708.2L625.4 679.9Z" fill="#232629"/> +<path d="M364.299 768.3C364.299 768.3 318.399 769.6 315.699 793.9C313.099 818 343.999 839.7 457.299 846.5C570.599 853.2 650.299 815.5 650.299 815.5L598.999 784.4C598.999 784.4 566.599 791.2 516.699 797.9C466.699 804.7 364.299 792.5 360.199 783.1C356.199 773.7 364.299 768.3 364.299 768.3Z" fill="#232629"/> +<path d="M805.5 877.6C823 858.7 800.099 843.8 800.099 843.8C800.099 843.8 808.2 853.3 797.5 864C786.7 874.8 688.199 901.7 530.299 909.8C372.499 917.9 201.1 895 195.6 874.7C190.3 854.5 283.4 838.3 283.4 838.3C272.6 839.6 143.1 842.3 139 877.5C135 912.5 195.7 940.9 438.6 940.9C681.4 941 788 896.4 805.5 877.6Z" fill="#232629"/> +<path d="M711.099 957.2C604.499 978.7 280.699 965.2 280.699 965.2C280.699 965.2 491.099 1015.2 731.299 973.4C846.099 953.4 852.799 897.8 852.799 897.8C852.799 897.8 817.699 935.6 711.099 957.2Z" fill="#232629"/> +</svg> diff --git a/launcher/resources/breeze_light/scalable/language.svg b/launcher/resources/breeze_light/scalable/language.svg new file mode 100644 index 00000000..3d56d33e --- /dev/null +++ b/launcher/resources/breeze_light/scalable/language.svg @@ -0,0 +1,13 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"> + <defs id="defs3051"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#232629; + } + </style> + </defs> + <path style="fill:currentColor;fill-opacity:1;stroke:none" + d="M 2 2 L 2 3 L 2 8 L 3 8 L 6 8 L 6 10 L 6 11 L 9 14 L 9 11 L 13 11 L 14 11 L 14 6 L 14 5 L 13 5 L 10 5 L 10 2 L 3 2 L 2 2 z M 3 3 L 9 3 L 9 5 L 9 6 L 9 7 L 7 7 L 6 7 L 3 7 L 3 3 z M 10 6 L 13 6 L 13 10 L 8 10 L 7 10 L 7 8 L 8 8 L 8 10 L 10 8 L 10 7 L 10 6 z " + class="ColorScheme-Text" + /> +</svg> diff --git a/launcher/resources/breeze_light/scalable/launch.svg b/launcher/resources/breeze_light/scalable/launch.svg new file mode 100644 index 00000000..678fd098 --- /dev/null +++ b/launcher/resources/breeze_light/scalable/launch.svg @@ -0,0 +1,8 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#232629; + } + </style> + <path d="m2 2v12l12-6z" class="ColorScheme-Text" fill="currentColor"/> +</svg> diff --git a/launcher/resources/breeze_light/scalable/loadermods.svg b/launcher/resources/breeze_light/scalable/loadermods.svg new file mode 100644 index 00000000..4fb0f96d --- /dev/null +++ b/launcher/resources/breeze_light/scalable/loadermods.svg @@ -0,0 +1,13 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"> + <defs id="defs3051"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#232629; + } + </style> + </defs> + <path + style="fill:currentColor;fill-opacity:1;stroke:none" + d="m4 3v1h-2v9h12v-9h-2v-1h-3v1h-2v-1zm-1 2h10v7h-10z" + class="ColorScheme-Text"/> +</svg> diff --git a/launcher/resources/breeze_light/scalable/log.svg b/launcher/resources/breeze_light/scalable/log.svg new file mode 100644 index 00000000..cf9c9b22 --- /dev/null +++ b/launcher/resources/breeze_light/scalable/log.svg @@ -0,0 +1,13 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"> + <defs id="defs3051"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#232629; + } + </style> + </defs> + <path style="fill:currentColor;fill-opacity:1;stroke:none" + d="M 11 2 L 11 14 L 14 14 L 14 2 L 11 2 z M 6 5 L 6 14 L 9 14 L 9 5 L 6 5 z M 1 8 L 1 14 L 4 14 L 4 8 L 1 8 z " + class="ColorScheme-Text" + /> +</svg> diff --git a/launcher/resources/breeze_light/scalable/matrix.svg b/launcher/resources/breeze_light/scalable/matrix.svg new file mode 100644 index 00000000..4745efc1 --- /dev/null +++ b/launcher/resources/breeze_light/scalable/matrix.svg @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg version="1.1" viewBox="0 0 27.9 32" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> + <title>Matrix (protocol) logo</title> + <g transform="translate(-.095 .005)" fill="#232629"> + <path d="m27.1 31.2v-30.5h-2.19v-0.732h3.04v32h-3.04v-0.732z"/> + <path d="m8.23 10.4v1.54h0.044c0.385-0.564 0.893-1.03 1.49-1.37 0.58-0.323 1.25-0.485 1.99-0.485 0.72 0 1.38 0.14 1.97 0.42 0.595 0.279 1.05 0.771 1.36 1.48 0.338-0.5 0.796-0.941 1.38-1.32 0.58-0.383 1.27-0.574 2.06-0.574 0.602 0 1.16 0.074 1.67 0.22 0.514 0.148 0.954 0.383 1.32 0.707 0.366 0.323 0.653 0.746 0.859 1.27 0.205 0.522 0.308 1.15 0.308 1.89v7.63h-3.13v-6.46c0-0.383-0.015-0.743-0.044-1.08-0.0209-0.307-0.103-0.607-0.242-0.882-0.133-0.251-0.336-0.458-0.584-0.596-0.257-0.146-0.606-0.22-1.05-0.22-0.44 0-0.796 0.085-1.07 0.253-0.272 0.17-0.485 0.39-0.639 0.662-0.159 0.287-0.264 0.602-0.308 0.927-0.052 0.347-0.078 0.697-0.078 1.05v6.35h-3.13v-6.4c0-0.338-7e-3 -0.673-0.021-1-0.0114-0.314-0.0749-0.623-0.188-0.916-0.108-0.277-0.3-0.512-0.55-0.673-0.258-0.168-0.636-0.253-1.14-0.253-0.198 0.0083-0.394 0.042-0.584 0.1-0.258 0.0745-0.498 0.202-0.705 0.374-0.228 0.184-0.422 0.449-0.584 0.794-0.161 0.346-0.242 0.798-0.242 1.36v6.62h-3.13v-11.4z"/> + <path d="m0.936 0.732v30.5h2.19v0.732h-3.04v-32h3.03v0.732z"/> + </g> +</svg>
\ No newline at end of file diff --git a/launcher/resources/breeze_light/scalable/minecraft.svg b/launcher/resources/breeze_light/scalable/minecraft.svg new file mode 100644 index 00000000..1ffb4565 --- /dev/null +++ b/launcher/resources/breeze_light/scalable/minecraft.svg @@ -0,0 +1,13 @@ +<svg version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> + <defs> + <style type="text/css" id="current-color-scheme">.ColorScheme-Text { + color:#232629; + }</style> + </defs> + <g fill="currentColor"> + <path class="ColorScheme-Text" d="m8.2746408 13.953029c0.00833 0 1.1494866-0.753825 2.5359342-1.674795l2.520534-1.674794v-2.6001033c0-1.4307351-0.0074-2.6013858-0.01668-2.6013858-0.0093 0-1.150413 0.7546842-2.535934 1.6773611l-2.5192543 1.6773619v2.5988191c0 1.429027 0.00706 2.597536 0.015402 2.597536z" fill="currentColor" fill-opacity=".2"/> + <path class="ColorScheme-Text" d="m7.9409649 8.3549799c0.0753873-0.0030883 5.0483591-3.3585525 5.0192511-3.3868071-0.014404-0.0138645-1.1312-0.7652159-2.482034-1.6683781-1.3508332-0.9031623-2.4637176-1.6377305-2.4730489-1.6311596-0.4205404 0.2725585-4.9953997 3.3678436-4.9999993 3.3829565-0.00988 0.032723 4.8804389 3.3033883 4.9358311 3.3033883z" fill="currentColor" fill-opacity=".4"/> + <path class="ColorScheme-Text" d="m7.7189427 13.994097c0.00828 0 0.015875-1.150637 0.015402-2.556468l-0.0013141-2.5551853-2.517967-1.6850615c-1.3845486-0.9264887-2.5204415-1.6863448-2.524384-1.6863448-0.00421-0.00112-0.0077 1.1516957-0.0077 2.5616013v2.5628853l2.5102968 1.679928c1.3808361 0.923532 2.5173881 1.678645 2.5256673 1.678645z" fill="currentColor" fill-opacity=".6"/> + <path class="ColorScheme-Text" d="m 8,15 c 5.76994,-3.758469 4.07772,-2.720917 6,-4 V 5 C 12.707222,4.143927 10.030643,2.3424577 8,1 5,3 4.3571975,3.3856408 2,5 v 6 z M 8.508315,13.412447 8.4963301,9 C 10.411258,7.652439 11.772087,6.8337528 13,6 v 4.594435 z M 7.5156547,13.400462 3,10.570466 V 6 L 7.5276396,9 Z M 8,8 3.4485124,5 8,2 12.477901,5 C 10.956071,6.0867591 9.5367568,6.9353406 8,8 Z" fill="currentColor"/> + </g> +</svg> diff --git a/launcher/resources/breeze_light/scalable/new.svg b/launcher/resources/breeze_light/scalable/new.svg new file mode 100644 index 00000000..51babd76 --- /dev/null +++ b/launcher/resources/breeze_light/scalable/new.svg @@ -0,0 +1,18 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"> + <defs + id="defs3051"> + <style + type="text/css" + id="current-color-scheme"> + .ColorScheme-Text { + color:#232629; + } + </style> + </defs> + <path + style="fill:currentColor;fill-opacity:1;stroke:none" + d="M 4 4 L 4 28 L 17 28 L 17 27 L 5 27 L 5 14 L 10 14 L 13 11 L 27 11 L 27 17 L 28 17 L 28 7 L 18 7 L 15 4 L 4 4 z M 22 17 L 22 22 L 17 22 L 17 23 L 22 23 L 22 28 L 23 28 L 23 23 L 28 23 L 28 22 L 23 22 L 23 17 L 22 17 z " + id="path99" + class="ColorScheme-Text" + /> +</svg> diff --git a/launcher/resources/breeze_light/scalable/news.svg b/launcher/resources/breeze_light/scalable/news.svg new file mode 100644 index 00000000..3e3ebe95 --- /dev/null +++ b/launcher/resources/breeze_light/scalable/news.svg @@ -0,0 +1,13 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"> + <defs id="defs3051"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#232629; + } + </style> + </defs> + <path style="fill:currentColor;fill-opacity:1;stroke:none" + d="m2 2v12h12v-12zm1 1h10v10h-10zm1 1v3h3v-3zm4 0v1h4v-1zm0 2v1h4v-1zm-4 2v4h8v-4z" + class="ColorScheme-Text" + /> +</svg> diff --git a/launcher/resources/breeze_light/scalable/notes.svg b/launcher/resources/breeze_light/scalable/notes.svg new file mode 100644 index 00000000..a8eaf279 --- /dev/null +++ b/launcher/resources/breeze_light/scalable/notes.svg @@ -0,0 +1,13 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"> + <defs id="defs3051"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#232629; + } + </style> + </defs> + <path style="fill:currentColor;fill-opacity:1;stroke:none" + d="M 3 2 L 3 3 L 2 3 L 2 14 L 14 14 L 14 3 L 13 3 L 13 2 L 12 2 L 12 3 L 11 3 L 11 2 L 10 2 L 10 3 L 6 3 L 6 2 L 5 2 L 5 3 L 4 3 L 4 2 L 3 2 z M 3 4 L 13 4 L 13 13 L 3 13 L 3 4 z M 4 5 L 4 6 L 12 6 L 12 5 L 4 5 z M 4 7 L 4 8 L 8 8 L 8 7 L 4 7 z M 4 9 L 4 10 L 10 10 L 10 9 L 4 9 z M 10 11 L 10 12 L 12 12 L 12 11 L 10 11 z " + class="ColorScheme-Text" + /> +</svg> diff --git a/launcher/resources/breeze_light/scalable/patreon.svg b/launcher/resources/breeze_light/scalable/patreon.svg new file mode 100644 index 00000000..e12f1f8d --- /dev/null +++ b/launcher/resources/breeze_light/scalable/patreon.svg @@ -0,0 +1,3 @@ +<svg fill="#232629" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"> + <path d="M12,3h0a9,9,0,0,0-9,9v9H5.09V12a6.91,6.91,0,1,1,7.23,6.9,5.9,5.9,0,0,1-2.59-.47v-3A4.13,4.13,0,1,0,7.85,12v9H12A9,9,0,1,0,12,3Zm0,15.91h0Z"/> +</svg> diff --git a/launcher/resources/breeze_light/scalable/proxy.svg b/launcher/resources/breeze_light/scalable/proxy.svg new file mode 100644 index 00000000..2e67ff6c --- /dev/null +++ b/launcher/resources/breeze_light/scalable/proxy.svg @@ -0,0 +1,14 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"> + <defs id="defs3051"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#232629; + } + </style> + </defs> + <path + style="fill:currentColor;fill-opacity:1;stroke:none" + d="M 7 2 L 7 3 L 13 3 L 13 10 L 7 10 L 7 12 L 7 13 L 6 13 C 5.4459904 13 5 12.55401 5 12 L 5 10 L 5 8 L 5 7 L 6 7 L 6 3 L 3 3 L 3 7 L 4 7 L 4 8 L 4 10 L 4 12 C 4 13.108 4.892 14 6 14 L 7 14 L 9 14 L 11 14 L 11 13 L 9 13 L 9 12 L 14 12 L 14 11 L 14 10 L 14 2 L 7 2 z M 4 5 L 5 5 L 5 6 L 4 6 L 4 5 z M 2 8 L 2 12 L 3 12 L 3 10 L 3 8 L 2 8 z " + class="ColorScheme-Text" + /> +</svg> diff --git a/launcher/resources/breeze_light/scalable/reddit-alien.svg b/launcher/resources/breeze_light/scalable/reddit-alien.svg new file mode 100644 index 00000000..93b8eedc --- /dev/null +++ b/launcher/resources/breeze_light/scalable/reddit-alien.svg @@ -0,0 +1,3 @@ +<svg fill="#232629" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"> + <path d="M20,11.86a1.76,1.76,0,0,0-1.75-1.75,1.73,1.73,0,0,0-1.22.51,9,9,0,0,0-4.67-1.38l1-3.16L16,6.71s0,0,0,0a1.46,1.46,0,1,0,.1-.53l-2.89-.68a.25.25,0,0,0-.29.17L11.83,9.23a9.16,9.16,0,0,0-4.88,1.36,1.75,1.75,0,1,0-2.07,2.79,3,3,0,0,0-.06.58C4.82,16.58,8,18.7,12,18.7s7.14-2.13,7.14-4.74a2.94,2.94,0,0,0-.05-.55A1.74,1.74,0,0,0,20,11.86ZM8.51,13.08a1.06,1.06,0,1,1,1.06,1.06A1.06,1.06,0,0,1,8.51,13.08Zm6.06,3.14A3.48,3.48,0,0,1,12,17h0a3.48,3.48,0,0,1-2.56-.79.25.25,0,0,1,.35-.35,3,3,0,0,0,2.2.65h0a3,3,0,0,0,2.2-.65.25.25,0,1,1,.35.35Zm-.13-2.08a1.06,1.06,0,1,1,1.06-1.06A1.06,1.06,0,0,1,14.44,14.14Z"/> +</svg> diff --git a/launcher/resources/breeze_light/scalable/refresh.svg b/launcher/resources/breeze_light/scalable/refresh.svg new file mode 100644 index 00000000..ecd2b394 --- /dev/null +++ b/launcher/resources/breeze_light/scalable/refresh.svg @@ -0,0 +1,8 @@ +<svg version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> + <defs> + <style type="text/css" id="current-color-scheme">.ColorScheme-Text { + color:#232629; + }</style> + </defs> + <path class="ColorScheme-Text" fill="currentColor" d="m14 8c0 1.1088173-0.319333 2.140071-0.84375 3.03125l-2.6875-2.6875 0.71875-0.71875 1.625 1.625c0.05109-0.19534 0.097716-0.3898623 0.125-0.59375 0.007789-0.0524063 0.025184-0.1032787 0.03125-0.15625 0.01707-0.1680854 0.03125-0.327411 0.03125-0.5 0-2.761424-2.238576-5-5-5-0.243024 0-0.4855082 0.02845-0.71875 0.0625-0.1362493 0.019955-0.2738032 0.031786-0.40625 0.0625-0.2865815 0.06695-0.547624 0.166647-0.8125 0.28125-0.030675 0.013272-0.063399 0.017376-0.09375 0.03125-0.09166 0.040961-0.163333 0.108255-0.25 0.15625-8e-3 0.00445-0.02305-0.00433-0.03125 0l-0.71875-0.75c0.891179-0.524417 1.922432-0.84375 3.03125-0.84375 3.313709 0 6 2.686293 6 6zm-2.96875 5.15625c-0.891179 0.524417-1.922432 0.84375-3.03125 0.84375-3.313709 0-6-2.686293-6-6 0-1.1088173 0.319333-2.140071 0.84375-3.03125l0.75 0.75 1.90625 1.9375-0.6875 0.6875-1.625-1.59375c-0.05109 0.19534-0.09772 0.3898623-0.125 0.59375-0.0078 0.052406-0.02518 0.1032787-0.03125 0.15625-0.01707 0.1680854-0.03125 0.327411-0.03125 0.5s0.01418 0.3319146 0.03125 0.5c0.01707 0.1680853 0.029198 0.337256 0.0625 0.5 0.466231 2.278415 2.490004 4 4.90625 4 0.2482626 0 0.4801862-0.02756 0.71875-0.0625 0.1362493-0.01995 0.2738032-0.03179 0.40625-0.0625 0.2865815-0.06695 0.547624-0.166647 0.8125-0.28125 0.030718-0.01299 0.063349-0.01766 0.09375-0.03125 0.08886-0.04062 0.164735-0.108612 0.25-0.15625h0.03125z"/> +</svg> diff --git a/launcher/resources/breeze_light/scalable/rename.svg b/launcher/resources/breeze_light/scalable/rename.svg new file mode 100644 index 00000000..18ccc58a --- /dev/null +++ b/launcher/resources/breeze_light/scalable/rename.svg @@ -0,0 +1,13 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"> + <defs id="defs3051"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#232629; + } + </style> + </defs> + <path style="fill:currentColor;fill-opacity:1;stroke:none" + d="M 10.398438 2 L 5.2871094 7.1113281 L 2 10.398438 L 2 14 L 5.6015625 14 L 14 5.6015625 L 10.398438 2 z M 8.3496094 5.4902344 L 10.509766 7.6503906 L 7.3359375 10.826172 L 7.3359375 10.150391 L 6.3222656 10.171875 L 5.2871094 10.171875 L 5.2871094 9.1367188 L 5.2871094 8.5507812 L 6.7285156 7.1113281 L 8.3496094 5.4902344 z M 4.2734375 9.5644531 L 4.2734375 11.185547 L 5.3085938 11.185547 L 6.3007812 11.185547 L 6.3222656 11.837891 L 5.2421875 12.919922 L 3.8007812 12.919922 L 3.0800781 12.199219 L 3.0800781 10.757812 L 4.2734375 9.5644531 z " + class="ColorScheme-Text" + /> +</svg> diff --git a/launcher/resources/breeze_light/scalable/resourcepacks.svg b/launcher/resources/breeze_light/scalable/resourcepacks.svg new file mode 100644 index 00000000..913d3c1f --- /dev/null +++ b/launcher/resources/breeze_light/scalable/resourcepacks.svg @@ -0,0 +1,11 @@ +<!DOCTYPE svg> +<svg version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> + <defs> + <style id="current-color-scheme" type="text/css"> + .ColorScheme-Text { + color:#232629; + } + </style> + </defs> + <path class="ColorScheme-Text" style="fill:currentColor; fill-opacity:1; stroke:none" d="M 8 3 L 13 3 L 13 13 L 8 13 L 8 3 Z M 3 3 L 13 3 L 13 9 L 11 7 L 7.65625 10.3438 L 6.3125 9 L 6.2813 9 L 3 12.2813 L 3 3 Z M 2 2 L 2 13.2813 L 2 14 L 14 14 L 14 13 L 14 12 L 14 11 L 14 10 L 14 2 L 2 2 Z M 6 4 C 4.89543 4 4 4.89543 4 6 C 4 7.10457 4.89543 8 6 8 C 7.10457 8 8 7.10457 8 6 C 8 4.89543 7.10457 4 6 4 Z"/> +</svg> diff --git a/launcher/resources/breeze_light/scalable/screenshots.svg b/launcher/resources/breeze_light/scalable/screenshots.svg new file mode 100644 index 00000000..d984b330 --- /dev/null +++ b/launcher/resources/breeze_light/scalable/screenshots.svg @@ -0,0 +1,13 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"> + <defs id="defs3051"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#232629; + } + </style> + </defs> + <path style="fill:currentColor;fill-opacity:1;stroke:none" + d="M 2 2 L 2 13.28125 L 2 14 L 14 14 L 14 13 L 14 12 L 14 11 L 14 10 L 14 2 L 2 2 z M 3 3 L 13 3 L 13 9 L 11 7 L 7.65625 10.34375 L 6.3125 9 L 6.28125 9 L 3 12.28125 L 3 3 z M 6 4 C 4.8954305 4 4 4.8954305 4 6 C 4 7.1045695 4.8954305 8 6 8 C 7.1045695 8 8 7.1045695 8 6 C 8 4.8954305 7.1045695 4 6 4 z " + class="ColorScheme-Text" + /> +</svg> diff --git a/launcher/resources/breeze_light/scalable/settings.svg b/launcher/resources/breeze_light/scalable/settings.svg new file mode 100644 index 00000000..19e86e26 --- /dev/null +++ b/launcher/resources/breeze_light/scalable/settings.svg @@ -0,0 +1,17 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"> + <defs id="defs3051"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#232629; + } + .ColorScheme-Highlight { + color:#3daee9; + } + </style> + </defs> + <path + style="fill:currentColor;fill-opacity:1;stroke:none" + d="M18.5 6A3.5 3.5 0 0 0 15.04102 9H4V10H15.04A3.5 3.5 0 0 0 18.5 13 3.5 3.5 0 0 0 21.958984 10H28V9H21.961A3.5 3.5 0 0 0 18.5 6M7.5 19A3.5 3.5 0 0 0 4 22.5 3.5 3.5 0 0 0 7.5 26 3.5 3.5 0 0 0 10.960938 23H28V22H10.959A3.5 3.5 0 0 0 7.5 19m0 1A2.5 2.5 0 0 1 10 22.5 2.5 2.5 0 0 1 7.5 25 2.5 2.5 0 0 1 5 22.5 2.5 2.5 0 0 1 7.5 20" + class="ColorScheme-Text" + /> +</svg> diff --git a/launcher/resources/breeze_light/scalable/shaderpacks.svg b/launcher/resources/breeze_light/scalable/shaderpacks.svg new file mode 100644 index 00000000..591c6af5 --- /dev/null +++ b/launcher/resources/breeze_light/scalable/shaderpacks.svg @@ -0,0 +1,13 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"> + <defs id="defs3051"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#232629; + } + </style> + </defs> + <path style="fill:currentColor;fill-opacity:1;stroke:none" + d="M 2 2 L 2 14 L 5.15625 10.84375 C 4.43239 10.11989 4 9.10457 4 8 C 4 5.79086 5.79086 4 8 4 C 9.10457 4 10.11989 4.43239 10.84375 5.15625 L 14 2 L 2 2 z M 10.84375 5.15625 L 5.15625 10.84375 C 5.88011 11.56761 6.89543 12 8 12 C 10.20914 12 12 10.20914 12 8 C 12 6.89543 11.56761 5.88011 10.84375 5.15625 z " + class="ColorScheme-Text" + /> +</svg> diff --git a/launcher/resources/breeze_light/scalable/status-bad.svg b/launcher/resources/breeze_light/scalable/status-bad.svg new file mode 100644 index 00000000..6fc3137e --- /dev/null +++ b/launcher/resources/breeze_light/scalable/status-bad.svg @@ -0,0 +1,9 @@ +<svg version="1.1" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-NegativeText { + color:#da4453; + } + </style> + <rect class="ColorScheme-NegativeText" x="3" y="3" width="16" height="16" rx="2" fill="currentColor"/> + <path d="M 6.414,5 5,6.414 9.586,11 5,15.586 6.414,17 11,12.414 15.586,17 17,15.586 12.414,11 17,6.414 15.586,5 11,9.586 Z" fill="#fff"/> +</svg> diff --git a/launcher/resources/breeze_light/scalable/status-good.svg b/launcher/resources/breeze_light/scalable/status-good.svg new file mode 100644 index 00000000..eb8bc03b --- /dev/null +++ b/launcher/resources/breeze_light/scalable/status-good.svg @@ -0,0 +1,10 @@ +<svg id="svg9" version="1.1" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg"> + <style id="current-color-scheme" type="text/css">.ColorScheme-PositiveText { + color:#27ae60; + } + .ColorScheme-Text { + color:#232629; + }</style> + <rect id="rect3" class="ColorScheme-PositiveText" x="3" y="3" width="16" height="16" rx="1.4545455" fill="currentColor"/> + <path id="path5" d="M 18.99323,4.3805651 9,14 5.7332785,10.623339 4.3852425,12.059327 9,16.828 l 10,-10 z" fill="#fff"/> +</svg> diff --git a/launcher/resources/breeze_light/scalable/status-yellow.svg b/launcher/resources/breeze_light/scalable/status-yellow.svg new file mode 100644 index 00000000..1dc4d0f5 --- /dev/null +++ b/launcher/resources/breeze_light/scalable/status-yellow.svg @@ -0,0 +1,9 @@ +<svg version="1.1" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-NeutralText { + color:#f67400; + } + </style> + <path class="ColorScheme-NeutralText" d="m11.006318 3.0000261a0.72728737 0.72727154 0 0 0-0.65674 0.4021811l-7.2728738 14.545431a0.72728737 0.72727154 0 0 0 0.6509222 1.052362h14.545748a0.72728737 0.72727154 0 0 0 0.650922-1.052362l-7.272874-14.545431a0.72728737 0.72727154 0 0 0-0.645104-0.4021811z" fill="currentColor"/> + <path d="m10 7v6h2v-6zm0 8v2h2v-2z" fill="#fff"/> +</svg> diff --git a/launcher/resources/breeze_light/scalable/tag.svg b/launcher/resources/breeze_light/scalable/tag.svg new file mode 100644 index 00000000..4887d126 --- /dev/null +++ b/launcher/resources/breeze_light/scalable/tag.svg @@ -0,0 +1,17 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22"> + <defs id="defs3051"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#232629; + } + .ColorScheme-Highlight { + color:#3daee9; + } + </style> + </defs> + <path + style="fill:currentColor;fill-opacity:1;stroke:none" + d="M 9 3 L 3 5 L 5 11 L 15 16 L 19 8 L 9 3 z M 3 5 L 3 11 L 11 19 L 13.705078 16.294922 L 4 11 L 3 5 z M 6.5 5 C 7.331 5 8 5.669 8 6.5 C 8 7.331 7.331 8 6.5 8 C 5.669 8 5 7.331 5 6.5 C 5 5.669 5.669 5 6.5 5 z " + class="ColorScheme-Text" + /> +</svg> diff --git a/launcher/resources/breeze_light/scalable/viewfolder.svg b/launcher/resources/breeze_light/scalable/viewfolder.svg new file mode 100644 index 00000000..4a8498ce --- /dev/null +++ b/launcher/resources/breeze_light/scalable/viewfolder.svg @@ -0,0 +1,13 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"> + <defs id="defs3051"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#232629; + } + </style> + </defs> + <path style="fill:currentColor;fill-opacity:1;stroke:none" + d="m4 4v24h24l-1-1h-22v-13h5l3-3h14v16l1 1v-21h-10l-3-3z" + class="ColorScheme-Text" + /> +</svg> diff --git a/launcher/resources/breeze_light/scalable/worlds.svg b/launcher/resources/breeze_light/scalable/worlds.svg new file mode 100644 index 00000000..543cc55e --- /dev/null +++ b/launcher/resources/breeze_light/scalable/worlds.svg @@ -0,0 +1,16 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"> + <defs id="defs3051"> + <style type="text/css" id="current-color-scheme"> + .ColorScheme-Text { + color:#232629; + } + </style> + </defs> + <g transform="translate(0,-1036.3622)"> + <path + style="fill:currentColor;fill-opacity:1;fill-rule:nonzero" + d="M 8 2 C 4.6862915 2 2 4.6862868 2 8 C 2 11.313713 4.6862915 14 8 14 C 11.313708 14 14 11.313713 14 8 C 14 4.6862868 11.313708 2 8 2 z M 8 3 C 8.172589 3 8.3319146 3.01418 8.5 3.03125 C 8.5403398 3.0352163 8.5849592 3.0263276 8.625 3.03125 C 8.6776214 3.0379183 8.7291519 3.0542091 8.78125 3.0625 C 8.9249022 3.0850796 9.0482753 3.1217241 9.1875 3.15625 C 9.4440966 3.2195469 9.6982233 3.3050445 9.9375 3.40625 C 10.069426 3.4620498 10.186649 3.5272356 10.3125 3.59375 C 10.312425 3.60275 10.3133 3.614 10.3125 3.625 C 10.34148 3.638 10.35728 3.69175 10.40625 3.71875 C 10.42423 3.72875 10.42056 3.741 10.4375 3.75 C 10.46648 3.766 10.50599 3.7835 10.5 3.8125 C 10.492 3.8525 10.43425 3.844 10.40625 3.875 C 10.41005 3.933 10.35871 3.92975 10.34375 3.96875 C 10.35275 3.99375 10.40229 4.00125 10.40625 4.03125 C 10.40135 4.06325 10.33173 4.06075 10.34375 4.09375 C 10.39776 4.13575 10.449004 4.10375 10.5 4.09375 C 10.611991 4.07975 10.712253 4.08825 10.78125 4.03125 C 10.77225 3.97825 10.88099 3.9856 10.875 3.9375 C 10.90366 3.9583822 10.9403 3.9788168 10.96875 4 C 10.957987 4.01008 10.949578 4.02585 10.9375 4.03125 C 10.91649 4.04125 10.89401 4.0505 10.875 4.0625 C 10.847 4.0805 10.81328 4.104 10.78125 4.125 C 10.75826 4.141 10.711504 4.21875 10.6875 4.21875 C 10.65851 4.21875 10.61475 4.1815 10.59375 4.1875 C 10.56372 4.1975 10.56519 4.238 10.53125 4.25 C 10.46526 4.274 10.335495 4.2135 10.3125 4.3125 C 10.3405 4.3695 10.450005 4.343 10.5 4.375 C 10.53102 4.395 10.58575 4.466 10.59375 4.5 C 10.60175 4.528 10.60574 4.6575 10.59375 4.6875 C 10.56273 4.7675 10.466988 4.751 10.375 4.75 L 10.3125 4.75 C 10.157516 4.74 10.007499 4.67025 9.9375 4.78125 C 9.94245 4.86625 9.95653 4.926 9.9375 5 C 9.92353 5.054 9.840752 5.10965 9.84375 5.15625 C 9.84485 5.18025 9.900255 5.216 9.90625 5.25 C 9.9101 5.268 9.89818 5.2955 9.90625 5.3125 C 9.932265 5.3615 9.9852535 5.3025 10.03125 5.3125 C 10.07525 5.3225 10.125 5.3883 10.125 5.4375 C 10.125 5.4725 10.11575 5.5286 10.09375 5.5625 C 10.04975 5.6285 9.969247 5.62025 9.90625 5.65625 C 9.854275 5.68625 9.843502 5.7609 9.8125 5.8125 C 9.7795 5.8685 9.736983 5.88865 9.75 5.96875 C 9.70501 6.05775 9.655488 6.11325 9.5625 6.15625 C 9.535495 6.16825 9.493747 6.1695 9.46875 6.1875 C 9.44873 6.2015 9.434272 6.24925 9.40625 6.28125 C 9.37127 6.32025 9.331497 6.345 9.3125 6.375 C 9.298475 6.398 9.29621 6.43675 9.28125 6.46875 C 9.25925 6.51075 9.215494 6.5203 9.1875 6.5625 C 9.17452 6.5825 9.17022 6.63025 9.15625 6.65625 C 9.12424 6.71425 9.087749 6.7615 9.09375 6.8125 C 9.0987 6.8605 9.153252 6.86225 9.15625 6.90625 C 9.159 6.93025 9.12401 6.94175 9.125 6.96875 C 9.1261 7.00675 9.15328 7.0325 9.15625 7.0625 C 9.16324 7.1365 9.10772 7.16815 9.09375 7.21875 C 9.08676 7.24275 9.09975 7.26125 9.09375 7.28125 C 9.08176 7.31825 9.032251 7.36205 9.03125 7.40625 C 9.03015 7.43725 9.09078 7.456 9.09375 7.5 C 9.09595 7.529 9.056505 7.56575 9.0625 7.59375 C 9.0735 7.64775 9.1767575 7.708 9.21875 7.75 C 9.275747 7.807 9.350008 7.84625 9.375 7.90625 C 9.39601 7.95725 9.398533 8.05565 9.4375 8.09375 C 9.466485 8.12175 9.525507 8.12625 9.5625 8.15625 C 9.59748 8.18325 9.619253 8.18875 9.65625 8.21875 C 9.717245 8.26675 9.809252 8.382 9.90625 8.375 C 9.957235 8.365 10.005504 8.3225 10.0625 8.3125 C 10.1215 8.3025 10.190006 8.27625 10.25 8.28125 C 10.29598 8.29125 10.358253 8.3155 10.40625 8.3125 C 10.45624 8.3025 10.505509 8.30625 10.5625 8.28125 C 10.6615 8.23825 10.824766 8.1668 10.96875 8.1875 C 11.078739 8.2035 11.079255 8.326 11.15625 8.375 C 11.24424 8.385 11.305007 8.358 11.375 8.375 C 11.42802 8.388 11.495001 8.4584 11.5 8.5 C 11.505 8.543 11.44349 8.5978 11.4375 8.625 C 11.42353 8.683 11.44746 8.74425 11.4375 8.78125 C 11.4295 8.81025 11.40526 8.846 11.40625 8.875 C 11.40625 8.901 11.44173 8.9658 11.46875 9 C 11.50175 9.042 11.55375 9.0798 11.59375 9.125 C 11.66674 9.209 11.699004 9.29525 11.75 9.40625 C 11.76298 9.43425 11.73801 9.464 11.75 9.5 C 11.728 9.6679 11.672491 9.78285 11.5625 9.96875 C 11.51052 10.02875 11.436499 10.08135 11.4375 10.15625 C 11.4337 10.33625 11.53925 10.451 11.53125 10.625 C 11.51327 10.8589 11.54929 10.8751 11.53125 11 C 11.61025 11.04 11.55424 11.1669 11.53125 11.25 C 11.49726 11.349 11.4565 11.3715 11.4375 11.4375 C 11.490583 11.460643 11.566021 11.451092 11.625 11.4375 C 11.595204 11.468874 11.561843 11.500657 11.53125 11.53125 C 11.305044 11.757456 11.047252 11.976543 10.78125 12.15625 C 10.265207 12.504882 9.6912413 12.769698 9.0625 12.90625 C 8.718961 12.980861 8.3658887 13 8 13 C 7.8096669 13 7.6218651 12.989959 7.4375 12.96875 C 7.2906389 12.951989 7.1427139 12.935453 7 12.90625 C 6.7168255 12.848304 6.4510281 12.728616 6.1875 12.625 C 6.1781304 12.60785 6.1541244 12.582618 6.15625 12.5625 C 6.208225 12.5405 6.305756 12.6365 6.34375 12.5625 C 6.36278 12.5275 6.318725 12.44125 6.34375 12.40625 C 6.361735 12.38225 6.463007 12.382 6.5 12.375 C 6.55302 12.365 6.626253 12.35775 6.65625 12.34375 C 6.68925 12.32275 6.724751 12.2491 6.71875 12.1875 C 6.716 12.1585 6.679185 12.151 6.65625 12.125 C 6.637275 12.103 6.66923 12.0835 6.65625 12.0625 C 6.63227 12.0275 6.572499 12.01975 6.5625 11.96875 C 6.634495 11.95475 6.7397615 12.029 6.84375 12 C 6.892755 11.986 6.976999 11.88985 7 11.84375 C 7.00699 11.82975 6.99202 11.79925 7 11.78125 C 7.00902 11.76325 7.028225 11.72875 7.03125 11.71875 C 7.03823 11.69175 7.02525 11.7055 7.03125 11.6875 C 7.049235 11.6365 7.094997 11.5988 7.125 11.5625 C 7.14799 11.5345 7.197723 11.49775 7.21875 11.46875 C 7.24273 11.43775 7.23405 11.43425 7.25 11.40625 C 7.265015 11.31525 7.19675 11.23615 7.21875 11.15625 C 7.24273 11.06625 7.381762 11.00975 7.46875 10.96875 C 7.498725 10.95475 7.537502 10.9465 7.5625 10.9375 C 7.622494 10.9165 7.6940045 10.895 7.75 10.875 C 7.843995 10.841 7.860248 10.7734 7.90625 10.6875 C 7.92825 10.6475 7.964735 10.5918 7.96875 10.5625 C 7.9726 10.5365 7.9638 10.531 7.96875 10.5 C 7.9737 10.471 7.960775 10.44025 7.96875 10.40625 C 7.97975 10.36325 8 10.26665 8 10.21875 C 8 10.17875 7.96974 10.161 7.96875 10.125 C 7.96176 9.995 8.014512 10.0085 8.0625 9.9375 C 8.08648 9.9025 8.10806 9.8376 8.125 9.8125 C 8.205993 9.6925 8.353749 9.65075 8.34375 9.46875 C 8.3399 9.40875 8.293978 9.269 8.25 9.25 C 8.224975 9.239 8.1932485 9.23175 8.15625 9.21875 C 8.0382585 9.17475 7.9354855 9.04125 7.8125 9.03125 L 7.75 9.03125 C 7.701985 9.03125 7.6477435 9.007 7.59375 9 C 7.55976 8.99 7.4887485 9.01 7.46875 9 C 7.43773 8.985 7.43122 8.92325 7.40625 8.90625 C 7.38623 8.89225 7.343493 8.886 7.3125 8.875 C 7.263495 8.857 7.2444965 8.8165 7.1875 8.8125 C 7.169515 8.8125 7.144982 8.8225 7.125 8.8125 C 7.09398 8.8025 7.060246 8.79925 7.03125 8.78125 C 6.99528 8.75925 6.952498 8.74975 6.9375 8.71875 C 6.9705 8.61085 6.86575 8.59425 6.84375 8.53125 C 6.83374 8.50225 6.85376 8.43225 6.84375 8.40625 C 6.83077 8.36925 6.791002 8.3435 6.75 8.3125 C 6.678005 8.2565 6.634243 8.23165 6.53125 8.21875 C 6.48527 8.20875 6.4299945 8.22875 6.375 8.21875 C 6.317008 8.20875 6.2314945 8.175 6.1875 8.125 C 6.14548 8.076 6.130744 8.0231 6.09375 8 C 6.05877 7.978 6.0239965 7.9605 6 7.9375 C 5.989 7.9275 5.97876 7.92925 5.96875 7.90625 C 5.950765 7.86925 5.9155 7.8575 5.9375 7.8125 C 5.897515 7.7925 5.917993 7.85075 5.875 7.84375 C 5.836005 7.78875 5.8067385 7.734 5.71875 7.75 C 5.678765 7.76 5.640747 7.84275 5.59375 7.84375 C 5.554755 7.84375 5.519746 7.758 5.46875 7.75 C 5.429755 7.74 5.3707495 7.78625 5.34375 7.78125 C 5.30074 7.77125 5.288973 7.74475 5.25 7.71875 C 5.221015 7.69975 5.17225 7.65525 5.15625 7.65625 C 5.106255 7.65625 5.0689915 7.75515 5 7.71875 C 4.96601 7.67575 5.071268 7.665 5.03125 7.625 C 5.001275 7.596 4.992763 7.64225 4.96875 7.65625 C 4.940755 7.67425 4.905993 7.6765 4.875 7.6875 C 4.806002 7.7135 4.7414935 7.721 4.6875 7.75 C 4.637505 7.776 4.622747 7.79245 4.59375 7.84375 C 4.57076 7.88575 4.534997 7.96675 4.5 7.96875 C 4.45798 7.96875 4.4442495 7.92325 4.40625 7.90625 C 4.2912615 7.85625 4.2199905 7.9355 4.125 7.9375 C 4.037006 7.9375 3.9022515 7.80175 3.90625 7.71875 C 3.909 7.66775 3.931505 7.59425 3.9375 7.53125 C 3.94245 7.48125 3.999065 7.4206 4 7.375 C 4.0011 7.313 3.883746 7.28835 3.84375 7.28125 C 3.749755 7.26425 3.6382415 7.32325 3.53125 7.28125 C 3.51123 7.24725 3.55051 7.2215 3.5625 7.1875 C 3.56948 7.1695 3.55551 7.146 3.5625 7.125 C 3.57449 7.093 3.641257 7.06525 3.65625 7.03125 C 3.66725 7.00525 3.64525 6.9705 3.65625 6.9375 C 3.66923 6.9015 3.715725 6.86975 3.71875 6.84375 C 3.7226 6.80975 3.6832 6.772 3.65625 6.75 C 3.573255 6.76 3.5167485 6.75725 3.46875 6.78125 C 3.360763 6.83025 3.3902435 6.966 3.28125 7 C 3.244235 7.012 3.198248 7.02425 3.15625 7.03125 C 3.137935 7.04125 3.11427 7.02925 3.09375 7.03125 C 3.0956963 7.0211336 3.0917443 7.0100944 3.09375 7 C 3.0984123 6.9772158 3.1200289 6.9601701 3.125 6.9375 C 3.1962653 6.6125035 3.3063949 6.2979344 3.4375 6 L 3.46875 6 C 3.506755 6.01 3.529505 6.0595 3.5625 6.0625 C 3.654493 6.0725 3.674001 5.9777 3.75 5.9375 C 3.827996 5.9485 3.866506 5.9275 3.9375 5.9375 C 3.985515 5.9475 4.055756 5.996 4.09375 6 C 4.12576 6 4.126248 5.96475 4.15625 5.96875 C 4.186225 5.97875 4.245 6.0265 4.25 6.0625 C 4.25495 6.1075 4.205715 6.16915 4.21875 6.21875 C 4.265775 6.26675 4.3705045 6.2845 4.4375 6.3125 C 4.4815 6.2755 4.44448 6.20825 4.4375 6.15625 C 4.4364 6.13325 4.44025 6.0835 4.4375 6.0625 C 4.43255 6.0265 4.40625 5.99975 4.40625 5.96875 C 4.40625 5.82575 4.5290085 5.77465 4.625 5.71875 C 4.665975 5.69475 4.7140025 5.643 4.75 5.625 C 4.800985 5.6 4.8330025 5.61775 4.875 5.59375 C 4.950988 5.55075 5.0035015 5.4862 5.0625 5.4375 C 5.089505 5.3725 5.05975 5.28275 5.0625 5.21875 C 5.089505 5.20175 5.127282 5.21875 5.15625 5.21875 C 5.20223 5.20875 5.223996 5.151 5.25 5.125 C 5.265015 5.11 5.294482 5.10875 5.3125 5.09375 C 5.35848 5.05775 5.366237 5.016 5.40625 5 C 5.420275 4.99 5.446723 4.97575 5.46875 4.96875 C 5.49878 4.95875 5.545757 4.9555 5.59375 4.9375 C 5.62477 4.9265 5.706749 4.91925 5.71875 4.90625 C 5.733765 4.89125 5.7149 4.8355 5.71875 4.8125 C 5.74273 4.6996 5.899009 4.69435 6 4.65625 C 6.069993 4.63025 6.1407545 4.5485 6.21875 4.5625 C 6.203735 4.6165 6.143249 4.6224 6.15625 4.6875 C 6.173245 4.7785 6.280501 4.66925 6.3125 4.65625 C 6.373495 4.63025 6.4825025 4.5925 6.5625 4.5625 C 6.632493 4.5375 6.753489 4.5181 6.6875 4.4375 C 6.6325 4.4275 6.6104935 4.48 6.5625 4.5 C 6.5295 4.51 6.527978 4.47175 6.5 4.46875 C 6.472995 4.46875 6.464527 4.505 6.4375 4.5 C 6.410495 4.49 6.378998 4.43925 6.375 4.40625 C 6.364 4.32225 6.43476 4.3119 6.46875 4.25 C 6.44576 4.174 6.3452425 4.2175 6.28125 4.1875 C 6.28824 4.1425 6.322007 4.10375 6.375 4.09375 C 6.41801 4.08375 6.5365015 4.102 6.5625 4.125 C 6.577515 4.138 6.5395595 4.1665 6.5625 4.1875 C 6.588515 4.2105 6.622254 4.1975 6.65625 4.1875 C 6.66824 4.1305 6.583751 4.162 6.59375 4.125 C 6.661741 4.081 6.792005 4.10475 6.875 4.09375 C 6.923015 4.08375 6.988251 4.05425 7.03125 4.03125 C 7.071235 4.00825 7.0830015 3.962 7.125 4 C 7.13699 4.041 7.116685 4.07175 7.09375 4.09375 C 7.016756 4.16175 6.934994 4.2336 6.875 4.3125 C 6.912015 4.3485 6.969254 4.33675 7.03125 4.34375 C 7.05523 4.35375 7.099997 4.33875 7.125 4.34375 C 7.15503 4.35375 7.194748 4.33375 7.21875 4.34375 C 7.26077 4.35375 7.270507 4.4375 7.3125 4.4375 C 7.380496 4.4375 7.351523 4.3577 7.3125 4.3125 C 7.32449 4.2655 7.3608 4.2207 7.34375 4.1875 C 7.31273 4.1255 7.1935005 4.206 7.1875 4.125 C 7.18365 4.075 7.231993 4.06925 7.25 4.03125 C 7.24202 3.93525 7.322499 3.93075 7.3125 3.84375 C 7.30755 3.80775 7.275008 3.81525 7.25 3.78125 C 7.23702 3.76325 7.23371 3.7015 7.21875 3.6875 C 7.166775 3.6435 7.0685005 3.67795 7.0625 3.59375 C 7.05975 3.54375 7.06948 3.4911 7.0625 3.4375 C 7.05551 3.3865 7.012728 3.22875 6.96875 3.21875 C 6.912755 3.20675 6.8794955 3.31245 6.8125 3.34375 C 6.77653 3.36075 6.693243 3.381 6.65625 3.375 C 6.63227 3.365 6.596753 3.3595 6.59375 3.3125 C 6.58979 3.2701 6.6405966 3.2512172 6.65625 3.21875 C 6.6601634 3.2106332 6.654259 3.19872 6.65625 3.1875 C 6.7288164 3.1672517 6.8012164 3.1422715 6.875 3.125 C 6.9169167 3.1152798 6.9576866 3.1024086 7 3.09375 C 7.0298771 3.0875279 7.0636852 3.0994569 7.09375 3.09375 C 7.2273044 3.0689879 7.3629458 3.0451686 7.5 3.03125 C 7.6662387 3.0137812 7.8289018 3 8 3 z M 5.96875 3.46875 C 5.9369162 3.6513239 5.7660026 3.7240206 5.5625 3.71875 C 5.51652 3.76275 5.55622 3.84525 5.53125 3.90625 C 5.51024 3.95725 5.425991 4.004 5.375 4 C 5.337985 4 5.28125 3.94125 5.28125 3.90625 C 5.28125 3.86325 5.349521 3.8617 5.3125 3.8125 C 5.31415 3.8025 5.333355 3.79125 5.34375 3.78125 C 5.3639901 3.7685049 5.3858533 3.762493 5.40625 3.75 C 5.5874525 3.6384834 5.7732114 3.5568279 5.96875 3.46875 z M 10.15625 3.65625 C 10.13782 3.66625 10.14122 3.6775 10.125 3.6875 C 10.08699 3.7105 10.06026 3.739 10.03125 3.75 C 9.99028 3.765 9.943504 3.7755 9.9375 3.8125 C 9.93255 3.8435 9.969795 3.846 9.96875 3.875 C 9.953735 3.912 9.94553 3.92375 9.9375 3.96875 C 9.988485 4.05175 10.093258 3.9505 10.15625 3.9375 C 10.18425 3.9275 10.20375 3.93025 10.21875 3.90625 C 10.23574 3.87925 10.23706 3.8507 10.25 3.8125 C 10.26403 3.7705 10.31751 3.75575 10.3125 3.71875 C 10.3087 3.68175 10.218244 3.65125 10.15625 3.65625 z M 4.6875 4.28125 C 4.7349118 4.319347 4.8015588 4.40185 4.71875 4.4375 C 4.70874 4.4475 4.5864965 4.47275 4.5625 4.46875 C 4.55282 4.46875 4.5397337 4.44475 4.53125 4.4375 C 4.5829129 4.3871923 4.6337069 4.3293033 4.6875 4.28125 z M 4.875 4.46875 C 4.89898 4.46875 4.909483 4.52925 4.9375 4.53125 C 4.964505 4.53125 4.983973 4.496 5 4.5 C 5.04202 4.511 5.071268 4.5938 5.03125 4.625 C 4.99825 4.635 4.992713 4.58975 4.96875 4.59375 C 4.900754 4.60575 4.8634955 4.754 4.8125 4.75 C 4.764485 4.74 4.732228 4.62875 4.78125 4.59375 C 4.78235 4.56375 4.779215 4.56225 4.78125 4.53125 C 4.796265 4.51325 4.834982 4.46575 4.875 4.46875 z M 4.625 4.5 C 4.639025 4.5 4.651245 4.49 4.65625 4.5 C 4.64927 4.553 4.634708 4.56875 4.59375 4.59375 C 4.522756 4.63675 4.460501 4.68975 4.4375 4.78125 C 4.43051 4.80825 4.3464955 4.8817 4.3125 4.875 C 4.233504 4.858 4.357015 4.7104 4.375 4.6875 C 4.39502 4.6625 4.414526 4.654 4.4375 4.625 C 4.46049 4.597 4.478055 4.54725 4.5 4.53125 C 4.52398 4.51425 4.5830075 4.498 4.625 4.5 z M 11.40625 4.65625 C 11.48524 4.64625 11.526502 4.73365 11.5625 4.78125 C 11.59248 4.82025 11.669746 4.87905 11.71875 4.90625 C 11.74675 4.92125 11.7815 4.95475 11.8125 4.96875 C 11.87749 4.99775 11.996996 5.09225 12 5.15625 C 12.0011 5.18825 11.96374 5.22 11.96875 5.25 C 12.01776 5.26 12.0615 5.1742 12.0625 5.125 C 12.15441 5.2550064 12.233102 5.3926596 12.3125 5.53125 C 12.35 5.5967067 12.402944 5.6512957 12.4375 5.71875 C 12.39339 5.73175 12.38209 5.73825 12.375 5.78125 C 12.36499 5.83725 12.39649 5.9276 12.3125 5.9375 C 12.25953 5.9475 12.19799 5.892 12.125 5.875 C 12.09502 5.865 12.05525 5.885 12.03125 5.875 C 11.97625 5.857 11.9845 5.7833 11.9375 5.75 C 11.91049 5.731 11.824253 5.6925 11.78125 5.6875 C 11.75424 5.6875 11.74673 5.6975 11.71875 5.6875 C 11.68476 5.6775 11.621749 5.7015 11.59375 5.6875 C 11.56674 5.6705 11.50701 5.61675 11.5 5.59375 C 11.489 5.55675 11.59175 5.5313 11.59375 5.5 C 11.59595 5.476 11.5675 5.44325 11.5625 5.40625 C 11.5587 5.38425 11.5674 5.35875 11.5625 5.34375 C 11.5555 5.31775 11.50974 5.3135 11.46875 5.3125 C 11.43272 5.3125 11.40599 5.3125 11.375 5.3125 C 11.331 5.3125 11.242494 5.3085 11.1875 5.3125 C 11.1545 5.3125 11.12475 5.3095 11.09375 5.3125 C 11.00676 5.3225 10.942997 5.3025 10.875 5.3125 C 10.82599 5.3125 10.733496 5.354 10.6875 5.375 C 10.66451 5.386 10.65501 5.39125 10.625 5.40625 C 10.61103 5.41625 10.58054 5.4295 10.5625 5.4375 C 10.53451 5.4505 10.49575 5.492 10.46875 5.5 C 10.42976 5.51 10.38349 5.49 10.3125 5.5 C 10.26152 5.5 10.188501 5.46725 10.1875 5.40625 C 10.1864 5.31325 10.349511 5.36075 10.4375 5.34375 C 10.4705 5.33375 10.49123 5.30525 10.53125 5.28125 C 10.55028 5.27025 10.54451 5.262 10.5625 5.25 C 10.59247 5.229 10.65125 5.18025 10.65625 5.15625 C 10.66005 5.13425 10.65323 5.11075 10.65625 5.09375 C 10.66005 5.07275 10.69175 5.05925 10.71875 5.03125 C 10.76077 4.98925 10.791747 4.93345 10.84375 4.90625 C 10.87873 4.88825 10.9215 4.87275 10.9375 4.84375 C 10.9413 4.81175 10.9364 4.81125 10.9375 4.78125 C 10.9595 4.76125 10.98202 4.754 11 4.75 C 11.05401 4.738 11.093259 4.753 11.15625 4.75 C 11.18325 4.75 11.221 4.763 11.25 4.75 C 11.27398 4.734 11.2885 4.6995 11.3125 4.6875 C 11.33851 4.6735 11.37422 4.65825 11.40625 4.65625 z M 11.96875 5.25 L 11.84375 5.25 C 11.79975 5.25 11.744749 5.227 11.71875 5.25 C 11.75577 5.31 11.823255 5.32875 11.90625 5.34375 C 11.93623 5.32175 11.95478 5.2883 11.96875 5.25 z M 5.125 4.6875 L 5.21875 4.6875 C 5.243775 4.6875 5.271251 4.6775 5.28125 4.6875 C 5.265245 4.7535 5.114497 4.74275 5.0625 4.71875 C 5.06525 4.69375 5.092968 4.6915 5.125 4.6875 z M 4.90625 4.8125 C 4.8625672 4.8442816 4.8193312 4.8845833 4.75 4.90625 C 4.711995 4.91825 4.663252 4.917 4.65625 4.875 C 4.64822 4.823 4.715988 4.84875 4.75 4.84375 C 4.794 4.83375 4.855254 4.8145 4.90625 4.8125 z M 11.40625 4.8125 C 11.37325 4.8235 11.35724 4.89625 11.40625 4.90625 C 11.42924 4.89225 11.44355 4.8555 11.4375 4.8125 C 11.42452 4.7985 11.41621 4.8025 11.40625 4.8125 z M 11.34375 4.96875 C 11.34485 5.02475 11.35475 5.0764 11.34375 5.125 C 11.37576 5.187 11.452756 5.13575 11.46875 5.09375 C 11.48778 4.98975 11.45425 4.95575 11.40625 4.96875 C 11.39025 4.97875 11.36069 4.95575 11.34375 4.96875 z M 3.0625 7.3125 C 3.118864 7.3635 3.1512925 7.43535 3.21875 7.46875 C 3.243775 7.48175 3.280501 7.492 3.3125 7.5 C 3.338515 7.51 3.350013 7.492 3.375 7.5 C 3.42802 7.518 3.4892575 7.5435 3.53125 7.5625 C 3.595248 7.5905 3.66375 7.68675 3.71875 7.71875 C 3.7215 7.75075 3.70874 7.7885 3.71875 7.8125 C 3.744765 7.8475 3.7704965 7.88225 3.8125 7.90625 C 3.863485 7.93425 3.8895065 7.9778 3.9375 8 C 3.954495 8.01 3.973963 7.99 4 8 C 4.065994 8.02 4.099253 8.11055 4.15625 8.09375 C 4.193265 8.08275 4.181505 8.036 4.1875 8 C 4.212525 7.973 4.242222 7.9375 4.28125 7.9375 C 4.34324 7.9375 4.351999 8.03315 4.375 8.09375 C 4.38798 8.12775 4.428535 8.1515 4.4375 8.1875 C 4.452515 8.2495 4.45048 8.43175 4.4375 8.46875 C 4.421495 8.51475 4.3504995 8.5122 4.3125 8.5625 C 4.294515 8.5865 4.29522 8.63925 4.28125 8.65625 C 4.25727 8.68525 4.236773 8.69075 4.21875 8.71875 C 4.20874 8.73375 4.196465 8.76025 4.1875 8.78125 C 4.15747 8.84525 4.099986 8.89175 4.125 8.96875 C 4.13501 8.99975 4.1875 9.0255 4.1875 9.0625 C 4.1875 9.1065 4.100751 9.1393 4.09375 9.1875 C 4.0888 9.2225 4.114055 9.2658 4.125 9.3125 C 4.13298 9.3475 4.197751 9.38325 4.21875 9.40625 C 4.25373 9.44525 4.280501 9.513 4.3125 9.5625 C 4.375491 9.6595 4.406765 9.78 4.46875 9.875 C 4.50175 9.924 4.57175 9.9484 4.59375 10 C 4.60475 10.026 4.58374 10.06975 4.59375 10.09375 C 4.62972 10.17475 4.794007 10.2726 4.875 10.3125 C 4.913005 10.3315 4.965009 10.32375 5 10.34375 C 5.05302 10.37375 5.160506 10.4534 5.1875 10.5 C 5.21148 10.542 5.20676 10.65185 5.21875 10.71875 C 5.233765 10.80675 5.2149 10.87365 5.21875 10.96875 C 5.2215 11.02075 5.25 11.04215 5.25 11.09375 C 5.25 11.11175 5.2511 11.1685 5.25 11.1875 C 5.2489 11.2495 5.25495 11.312 5.25 11.375 C 5.24725 11.409 5.2478 11.43975 5.25 11.46875 C 5.25275 11.49975 5.27927 11.50325 5.28125 11.53125 C 5.28345 11.56025 5.246975 11.602 5.25 11.625 C 5.25699 11.688 5.300499 11.72315 5.3125 11.78125 C 5.32251 11.82725 5.349745 11.945 5.34375 12 C 5.3399 12.029 5.316515 12.06075 5.3125 12.09375 C 5.30975 12.11975 5.31635 12.13225 5.3125 12.15625 C 5.30975 12.17925 5.31844 12.19975 5.3125 12.21875 C 5.2806543 12.198271 5.2500951 12.177426 5.21875 12.15625 C 4.9527483 11.976543 4.6949555 11.757456 4.46875 11.53125 C 4.4381566 11.500657 4.4047959 11.468874 4.375 11.4375 C 4.1944191 11.247353 4.0241375 11.029182 3.875 10.8125 C 3.8614865 10.792866 3.8569888 10.769835 3.84375 10.75 C 3.6707036 10.490733 3.5290643 10.227866 3.40625 9.9375 C 3.3973945 9.9165633 3.3835772 9.8960813 3.375 9.875 C 3.2696226 9.6160011 3.1860736 9.3410185 3.125 9.0625 C 3.1134736 9.0099352 3.1036081 8.9594198 3.09375 8.90625 C 3.0689879 8.7726956 3.0451686 8.6370542 3.03125 8.5 C 3.01418 8.3319146 3 8.172589 3 8 C 3 7.7623582 3.030436 7.5413039 3.0625 7.3125 z M 5 7.84375 C 5.048015 7.82175 5.038995 7.89925 5 7.90625 C 4.962985 7.91625 4.96403 7.86175 5 7.84375 z " transform="translate(0,1036.3622)" + id="path26" + class="ColorScheme-Text"/> + </g> +</svg> diff --git a/launcher/translations/TranslationsModel.cpp b/launcher/translations/TranslationsModel.cpp index 84778d32..38f48296 100644 --- a/launcher/translations/TranslationsModel.cpp +++ b/launcher/translations/TranslationsModel.cpp @@ -83,6 +83,9 @@ struct Language else if(key == "es_UY") { result = u8"español de Latinoamérica"; } + else if(key == "en_NZ") { + result = u8"New Zealand English"; // No idea why qt translates this to just english and not to New Zealand English + } else if(key == "en@pirate") { result = u8"Tongue of the High Seas"; } diff --git a/launcher/ui/dialogs/ProgressDialog.cpp b/launcher/ui/dialogs/ProgressDialog.cpp index 05269f62..da73a449 100644 --- a/launcher/ui/dialogs/ProgressDialog.cpp +++ b/launcher/ui/dialogs/ProgressDialog.cpp @@ -44,7 +44,8 @@ void ProgressDialog::setSkipButton(bool present, QString label) void ProgressDialog::on_skipButton_clicked(bool checked) { Q_UNUSED(checked); - task->abort(); + if (ui->skipButton->isEnabled()) // prevent other triggers from aborting + task->abort(); } ProgressDialog::~ProgressDialog() diff --git a/launcher/ui/pages/global/LauncherPage.cpp b/launcher/ui/pages/global/LauncherPage.cpp index 6661bf0f..cae0635f 100644 --- a/launcher/ui/pages/global/LauncherPage.cpp +++ b/launcher/ui/pages/global/LauncherPage.cpp @@ -303,21 +303,27 @@ void LauncherPage::applySettings() s->set("IconTheme", "pe_blue"); break; case 4: - s->set("IconTheme", "OSX"); + s->set("IconTheme", "breeze_light"); break; case 5: - s->set("IconTheme", "iOS"); + s->set("IconTheme", "breeze_dark"); break; case 6: - s->set("IconTheme", "flat"); + s->set("IconTheme", "OSX"); break; case 7: - s->set("IconTheme", "flat_white"); + s->set("IconTheme", "iOS"); break; case 8: - s->set("IconTheme", "multimc"); + s->set("IconTheme", "flat"); break; case 9: + s->set("IconTheme", "flat_white"); + break; + case 10: + s->set("IconTheme", "multimc"); + break; + case 11: s->set("IconTheme", "custom"); break; } @@ -397,7 +403,18 @@ void LauncherPage::loadSettings() m_currentUpdateChannel = s->get("UpdateChannel").toString(); //FIXME: make generic auto theme = s->get("IconTheme").toString(); - QStringList iconThemeOptions{"pe_colored", "pe_light", "pe_dark", "pe_blue", "OSX", "iOS", "flat", "flat_white", "multimc", "custom"}; + QStringList iconThemeOptions{"pe_colored", + "pe_light", + "pe_dark", + "pe_blue", + "breeze_light", + "breeze_dark", + "OSX", + "iOS", + "flat", + "flat_white", + "multimc", + "custom"}; ui->themeComboBox->setCurrentIndex(iconThemeOptions.indexOf(theme)); auto cat = s->get("BackgroundCat").toString(); diff --git a/launcher/ui/pages/global/LauncherPage.ui b/launcher/ui/pages/global/LauncherPage.ui index 6de644ee..c44718a1 100644 --- a/launcher/ui/pages/global/LauncherPage.ui +++ b/launcher/ui/pages/global/LauncherPage.ui @@ -287,6 +287,16 @@ </item> <item> <property name="text"> + <string>Breeze Light</string> + </property> + </item> + <item> + <property name="text"> + <string>Breeze Dark</string> + </property> + </item> + <item> + <property name="text"> <string notr="true">OSX</string> </property> </item> diff --git a/libraries/README.md b/libraries/README.md index dc38477b..ac5a3618 100644 --- a/libraries/README.md +++ b/libraries/README.md @@ -42,19 +42,20 @@ MIT licensed. Java launcher part for Minecraft. -It: +It does the following: -- Starts a process -- Waits for a launch script on stdin -- Consumes the launch script you feed it -- Proceeds with launch when it gets the `launcher` command +- Waits for a launch script on stdin. +- Consumes the launch script you feed it. +- Proceeds with launch when it gets the `launcher` command. + +If "abort" is sent, the process will exit. This means the process is essentially idle until the final command is sent. You can, for example, attach a profiler before you send it. -A `legacy` and `onesix` launchers are available. +The `standard` and `legacy` launchers are available. +- `standard` can handle launching any Minecraft version, at the cost of some extra features `legacy` enables (custom window icon and title). - `legacy` is intended for use with Minecraft versions < 1.6 and is deprecated. -- `onesix` can handle launching any Minecraft version, at the cost of some extra features `legacy` enables (custom window icon and title). Example (some parts have been censored): @@ -64,7 +65,7 @@ mainClass net.minecraft.launchwrapper.Launch param --username param CENSORED param --version -param MultiMC5 +param Prism Launcher param --gameDir param /home/peterix/minecraft/FTB/17ForgeTest/minecraft param --assetsDir @@ -81,58 +82,11 @@ param --userType param mojang param --tweakClass param cpw.mods.fml.common.launcher.FMLTweaker -windowTitle MultiMC: 172ForgeTest +windowTitle Prism Launcher: 172ForgeTest windowParams 854x480 userName CENSORED sessionId token:CENSORED:CENSORED -cp /home/peterix/minecraft/FTB/libraries/com/mojang/realms/1.3.5/realms-1.3.5.jar -cp /home/peterix/minecraft/FTB/libraries/org/apache/commons/commons-compress/1.8.1/commons-compress-1.8.1.jar -cp /home/peterix/minecraft/FTB/libraries/org/apache/httpcomponents/httpclient/4.3.3/httpclient-4.3.3.jar -cp /home/peterix/minecraft/FTB/libraries/commons-logging/commons-logging/1.1.3/commons-logging-1.1.3.jar -cp /home/peterix/minecraft/FTB/libraries/org/apache/httpcomponents/httpcore/4.3.2/httpcore-4.3.2.jar -cp /home/peterix/minecraft/FTB/libraries/java3d/vecmath/1.3.1/vecmath-1.3.1.jar -cp /home/peterix/minecraft/FTB/libraries/net/sf/trove4j/trove4j/3.0.3/trove4j-3.0.3.jar -cp /home/peterix/minecraft/FTB/libraries/com/ibm/icu/icu4j-core-mojang/51.2/icu4j-core-mojang-51.2.jar -cp /home/peterix/minecraft/FTB/libraries/net/sf/jopt-simple/jopt-simple/4.5/jopt-simple-4.5.jar -cp /home/peterix/minecraft/FTB/libraries/com/paulscode/codecjorbis/20101023/codecjorbis-20101023.jar -cp /home/peterix/minecraft/FTB/libraries/com/paulscode/codecwav/20101023/codecwav-20101023.jar -cp /home/peterix/minecraft/FTB/libraries/com/paulscode/libraryjavasound/20101123/libraryjavasound-20101123.jar -cp /home/peterix/minecraft/FTB/libraries/com/paulscode/librarylwjglopenal/20100824/librarylwjglopenal-20100824.jar -cp /home/peterix/minecraft/FTB/libraries/com/paulscode/soundsystem/20120107/soundsystem-20120107.jar -cp /home/peterix/minecraft/FTB/libraries/io/netty/netty-all/4.0.10.Final/netty-all-4.0.10.Final.jar -cp /home/peterix/minecraft/FTB/libraries/com/google/guava/guava/16.0/guava-16.0.jar -cp /home/peterix/minecraft/FTB/libraries/org/apache/commons/commons-lang3/3.2.1/commons-lang3-3.2.1.jar -cp /home/peterix/minecraft/FTB/libraries/commons-io/commons-io/2.4/commons-io-2.4.jar -cp /home/peterix/minecraft/FTB/libraries/commons-codec/commons-codec/1.9/commons-codec-1.9.jar -cp /home/peterix/minecraft/FTB/libraries/net/java/jinput/jinput/2.0.5/jinput-2.0.5.jar -cp /home/peterix/minecraft/FTB/libraries/net/java/jutils/jutils/1.0.0/jutils-1.0.0.jar -cp /home/peterix/minecraft/FTB/libraries/com/google/code/gson/gson/2.2.4/gson-2.2.4.jar -cp /home/peterix/minecraft/FTB/libraries/com/mojang/authlib/1.5.16/authlib-1.5.16.jar -cp /home/peterix/minecraft/FTB/libraries/org/apache/logging/log4j/log4j-api/2.0-beta9/log4j-api-2.0-beta9.jar -cp /home/peterix/minecraft/FTB/libraries/org/apache/logging/log4j/log4j-core/2.0-beta9/log4j-core-2.0-beta9.jar -cp /home/peterix/minecraft/FTB/libraries/org/lwjgl/lwjgl/lwjgl/2.9.1/lwjgl-2.9.1.jar -cp /home/peterix/minecraft/FTB/libraries/org/lwjgl/lwjgl/lwjgl_util/2.9.1/lwjgl_util-2.9.1.jar -cp /home/peterix/minecraft/FTB/libraries/tv/twitch/twitch/5.16/twitch-5.16.jar -cp /home/peterix/minecraft/FTB/libraries/net/minecraftforge/forge/1.7.10-10.13.0.1178/forge-1.7.10-10.13.0.1178.jar -cp /home/peterix/minecraft/FTB/libraries/net/minecraft/launchwrapper/1.9/launchwrapper-1.9.jar -cp /home/peterix/minecraft/FTB/libraries/org/ow2/asm/asm-all/4.1/asm-all-4.1.jar -cp /home/peterix/minecraft/FTB/libraries/com/typesafe/akka/akka-actor_2.11/2.3.3/akka-actor_2.11-2.3.3.jar -cp /home/peterix/minecraft/FTB/libraries/com/typesafe/config/1.2.1/config-1.2.1.jar -cp /home/peterix/minecraft/FTB/libraries/org/scala-lang/scala-actors-migration_2.11/1.1.0/scala-actors-migration_2.11-1.1.0.jar -cp /home/peterix/minecraft/FTB/libraries/org/scala-lang/scala-compiler/2.11.1/scala-compiler-2.11.1.jar -cp /home/peterix/minecraft/FTB/libraries/org/scala-lang/plugins/scala-continuations-library_2.11/1.0.2/scala-continuations-library_2.11-1.0.2.jar -cp /home/peterix/minecraft/FTB/libraries/org/scala-lang/plugins/scala-continuations-plugin_2.11.1/1.0.2/scala-continuations-plugin_2.11.1-1.0.2.jar -cp /home/peterix/minecraft/FTB/libraries/org/scala-lang/scala-library/2.11.1/scala-library-2.11.1.jar -cp /home/peterix/minecraft/FTB/libraries/org/scala-lang/scala-parser-combinators_2.11/1.0.1/scala-parser-combinators_2.11-1.0.1.jar -cp /home/peterix/minecraft/FTB/libraries/org/scala-lang/scala-reflect/2.11.1/scala-reflect-2.11.1.jar -cp /home/peterix/minecraft/FTB/libraries/org/scala-lang/scala-swing_2.11/1.0.1/scala-swing_2.11-1.0.1.jar -cp /home/peterix/minecraft/FTB/libraries/org/scala-lang/scala-xml_2.11/1.0.2/scala-xml_2.11-1.0.2.jar -cp /home/peterix/minecraft/FTB/libraries/lzma/lzma/0.0.1/lzma-0.0.1.jar -ext /home/peterix/minecraft/FTB/libraries/org/lwjgl/lwjgl/lwjgl-platform/2.9.1/lwjgl-platform-2.9.1-natives-linux.jar -ext /home/peterix/minecraft/FTB/libraries/net/java/jinput/jinput-platform/2.0.5/jinput-platform-2.0.5-natives-linux.jar -natives /home/peterix/minecraft/FTB/17ForgeTest/natives -cp /home/peterix/minecraft/FTB/versions/1.7.10/1.7.10.jar -launcher onesix +launcher standard ``` Available under `GPL-3.0-only` (with classpath exception), sublicensed from its original `Apache-2.0` codebase diff --git a/libraries/launcher/.gitignore b/libraries/launcher/.gitignore index cc1c52bf..dda456e3 100644 --- a/libraries/launcher/.gitignore +++ b/libraries/launcher/.gitignore @@ -4,3 +4,4 @@ out .classpath .idea .project +bin/ diff --git a/libraries/launcher/CMakeLists.txt b/libraries/launcher/CMakeLists.txt index df25414f..55ed5875 100644 --- a/libraries/launcher/CMakeLists.txt +++ b/libraries/launcher/CMakeLists.txt @@ -4,18 +4,21 @@ find_package(Java 1.7 REQUIRED COMPONENTS Development) include(UseJava) set(CMAKE_JAVA_JAR_ENTRY_POINT org.prismlauncher.EntryPoint) -set(CMAKE_JAVA_COMPILE_FLAGS -target 7 -source 7 -Xlint:deprecation -Xlint:unchecked) +set(CMAKE_JAVA_COMPILE_FLAGS -target 7 -source 7) set(SRC org/prismlauncher/EntryPoint.java - org/prismlauncher/Launcher.java - org/prismlauncher/LauncherFactory.java - org/prismlauncher/impl/OneSixLauncher.java - org/prismlauncher/applet/LegacyFrame.java + org/prismlauncher/launcher/Launcher.java + org/prismlauncher/launcher/impl/AbstractLauncher.java + org/prismlauncher/launcher/impl/StandardLauncher.java + org/prismlauncher/launcher/impl/legacy/LegacyLauncher.java + org/prismlauncher/launcher/impl/legacy/LegacyFrame.java org/prismlauncher/exception/ParameterNotFoundException.java org/prismlauncher/exception/ParseException.java org/prismlauncher/utils/Parameters.java - org/prismlauncher/utils/Utils.java + org/prismlauncher/utils/ReflectionUtils.java + org/prismlauncher/utils/logging/Level.java + org/prismlauncher/utils/logging/Log.java net/minecraft/Launcher.java ) add_jar(NewLaunch ${SRC}) diff --git a/libraries/launcher/net/minecraft/Launcher.java b/libraries/launcher/net/minecraft/Launcher.java index 6bf671be..646e2e3e 100644 --- a/libraries/launcher/net/minecraft/Launcher.java +++ b/libraries/launcher/net/minecraft/Launcher.java @@ -1,41 +1,83 @@ +// SPDX-License-Identifier: GPL-3.0-only /* - * Copyright 2012-2021 MultiMC Contributors + * Prism Launcher - Minecraft Launcher + * Copyright (C) 2022 icelimetea <fr3shtea@outlook.com> + * Copyright (C) 2022 TheKodeToad <TheKodeToad@proton.me> + * Copyright (C) 2022 solonovamax <solonovamax@12oclockpoint.com> * - * 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 + * 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. * - * http://www.apache.org/licenses/LICENSE-2.0 + * 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. * - * 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. + * Linking this library statically or dynamically with other modules is + * making a combined work based on this library. Thus, the terms and + * conditions of the GNU General Public License cover the whole + * combination. + * + * As a special exception, the copyright holders of this library give + * you permission to link this library with independent modules to + * produce an executable, regardless of the license terms of these + * independent modules, and to copy and distribute the resulting + * executable under terms of your choice, provided that you also meet, + * for each linked independent module, the terms and conditions of the + * license of that module. An independent module is a module which is + * not derived from or based on this library. If you modify this + * library, you may extend this exception to your version of the + * library, but you are not obliged to do so. If you do not wish to do + * so, delete this exception statement from your version. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + * + * 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. */ package net.minecraft; import java.applet.Applet; import java.applet.AppletStub; -import java.awt.*; +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.Graphics; import java.net.MalformedURLException; import java.net.URL; +import java.util.HashMap; import java.util.Map; -import java.util.TreeMap; -/* +/** * WARNING: This class is reflectively accessed by legacy Forge versions. - * Changing field and method declarations without further testing is not recommended. + * <p> + * Changing field and method declarations without further testing is not + * recommended. */ public final class Launcher extends Applet implements AppletStub { - private final Map<String, String> params = new TreeMap<>(); - - private Applet wrappedApplet; + private static final long serialVersionUID = 1L; - private URL documentBase; + private final Map<String, String> params = new HashMap<>(); + private Applet wrappedApplet; + private final URL documentBase; private boolean active = false; public Launcher(Applet applet) { @@ -43,35 +85,36 @@ public final class Launcher extends Applet implements AppletStub { } public Launcher(Applet applet, URL documentBase) { - this.setLayout(new BorderLayout()); + setLayout(new BorderLayout()); - this.add(applet, "Center"); + add(applet, "Center"); - this.wrappedApplet = applet; + wrappedApplet = applet; try { - if (documentBase != null) { - this.documentBase = documentBase; - } else if (applet.getClass().getPackage().getName().startsWith("com.mojang")) { - // Special case only for Classic versions - - this.documentBase = new URL("http", "www.minecraft.net", 80, "/game/"); - } else { - this.documentBase = new URL("http://www.minecraft.net/game/"); + if (documentBase == null) { + if (applet.getClass().getPackage().getName().startsWith("com.mojang.")) { + // Special case only for Classic versions + documentBase = new URL("http://www.minecraft.net:80/game/"); + } else { + documentBase = new URL("http://www.minecraft.net/game/"); + } } } catch (MalformedURLException e) { - throw new RuntimeException(e); + throw new AssertionError(e); } + + this.documentBase = documentBase; } public void replace(Applet applet) { - this.wrappedApplet = applet; + wrappedApplet = applet; applet.setStub(this); applet.setSize(getWidth(), getHeight()); - this.setLayout(new BorderLayout()); - this.add(applet, "Center"); + setLayout(new BorderLayout()); + add(applet, "Center"); applet.init(); @@ -82,42 +125,48 @@ public final class Launcher extends Applet implements AppletStub { validate(); } - public void setParameter(String name, String value) { - params.put(name, value); + @Override + public boolean isActive() { + return active; + } + + @Override + public URL getDocumentBase() { + return documentBase; + } + + @Override + public URL getCodeBase() { + try { + return new URL("http://www.minecraft.net/game/"); + } catch (MalformedURLException e) { + throw new AssertionError(e); + } } @Override - public String getParameter(String name) { - String param = params.get(name); + public String getParameter(String key) { + String param = params.get(key); if (param != null) return param; try { - return super.getParameter(name); - } catch (Exception ignored) {} + return super.getParameter(key); + } catch (Throwable ignored) { + } return null; } @Override - public boolean isActive() { - return active; - } - - @Override - public void appletResize(int width, int height) { - wrappedApplet.resize(width, height); - } - - @Override public void resize(int width, int height) { wrappedApplet.resize(width, height); } @Override - public void resize(Dimension d) { - wrappedApplet.resize(d); + public void resize(Dimension size) { + wrappedApplet.resize(size); } @Override @@ -140,33 +189,37 @@ public final class Launcher extends Applet implements AppletStub { active = false; } + @Override public void destroy() { wrappedApplet.destroy(); } @Override - public URL getCodeBase() { - try { - return new URL("http://www.minecraft.net/game/"); - } catch (MalformedURLException e) { - throw new RuntimeException(e); - } + public void appletResize(int width, int height) { + wrappedApplet.resize(width, height); } @Override - public URL getDocumentBase() { - return documentBase; + public void setVisible(boolean visible) { + super.setVisible(visible); + + wrappedApplet.setVisible(visible); } @Override - public void setVisible(boolean b) { - super.setVisible(b); + public void paint(Graphics graphics) { + } - wrappedApplet.setVisible(b); + @Override + public void update(Graphics graphics) { } - public void update(Graphics paramGraphics) {} + public void setParameter(String key, String value) { + params.put(key, value); + } - public void paint(Graphics paramGraphics) {} + public void setParameter(String key, boolean value) { + setParameter(key, value ? "true" : "false"); + } } diff --git a/libraries/launcher/org/prismlauncher/EntryPoint.java b/libraries/launcher/org/prismlauncher/EntryPoint.java index 9144e1f1..78804b3e 100644 --- a/libraries/launcher/org/prismlauncher/EntryPoint.java +++ b/libraries/launcher/org/prismlauncher/EntryPoint.java @@ -1,7 +1,9 @@ // SPDX-License-Identifier: GPL-3.0-only /* - * PolyMC - Minecraft Launcher - * Copyright (C) 2022 icelimetea, <fr3shtea@outlook.com> + * Prism Launcher - Minecraft Launcher + * Copyright (C) 2022 icelimetea <fr3shtea@outlook.com> + * Copyright (C) 2022 TheKodeToad <TheKodeToad@proton.me> + * Copyright (C) 2022 solonovamax <solonovamax@12oclockpoint.com> * * 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 @@ -52,113 +54,125 @@ package org.prismlauncher; -import org.prismlauncher.exception.ParseException; -import org.prismlauncher.utils.Parameters; - import java.io.BufferedReader; -import java.io.IOException; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; -import java.util.logging.Level; -import java.util.logging.Logger; - -public final class EntryPoint { - private static final Logger LOGGER = Logger.getLogger("EntryPoint"); +import org.prismlauncher.exception.ParseException; +import org.prismlauncher.launcher.Launcher; +import org.prismlauncher.launcher.impl.StandardLauncher; +import org.prismlauncher.launcher.impl.legacy.LegacyLauncher; +import org.prismlauncher.utils.Parameters; +import org.prismlauncher.utils.logging.Log; - private final Parameters params = new Parameters(); +public final class EntryPoint { public static void main(String[] args) { - EntryPoint listener = new EntryPoint(); - - int retCode = listener.listen(); + ExitCode code = listen(); - if (retCode != 0) { - LOGGER.info("Exiting with " + retCode); + if (code != ExitCode.NORMAL) { + Log.fatal("Exiting with " + code); - System.exit(retCode); + System.exit(code.numeric); } } - private Action parseLine(String inData) throws ParseException { - String[] tokens = inData.split("\\s+", 2); + private static ExitCode listen() { + Parameters params = new Parameters(); + PreLaunchAction action = PreLaunchAction.PROCEED; - if (tokens.length == 0) - throw new ParseException("Unexpected empty string!"); + try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in, StandardCharsets.UTF_8))) { + String line; - switch (tokens[0]) { - case "launch": { - return Action.Launch; + while (action == PreLaunchAction.PROCEED) { + if ((line = reader.readLine()) != null) + action = parseLine(line, params); + else + action = PreLaunchAction.ABORT; } + } catch (IllegalArgumentException e) { + Log.fatal("Aborting due to wrong argument", e); - case "abort": { - return Action.Abort; - } + return ExitCode.ILLEGAL_ARGUMENT; + } catch (Throwable e) { + Log.fatal("Aborting due to exception", e); - default: { - if (tokens.length != 2) - throw new ParseException("Error while parsing:" + inData); + return ExitCode.ABORT; + } - params.add(tokens[0], tokens[1]); + if (action == PreLaunchAction.ABORT) { + Log.fatal("Launch aborted by the launcher"); - return Action.Proceed; - } + return ExitCode.ABORT; } - } - public int listen() { - Action action = Action.Proceed; + try { + Launcher launcher; + String type = params.getString("launcher"); - try (BufferedReader reader = new BufferedReader(new InputStreamReader( - System.in, - StandardCharsets.UTF_8 - ))) { - String line; + switch (type) { + case "standard": + launcher = new StandardLauncher(params); + break; - while (action == Action.Proceed) { - if ((line = reader.readLine()) != null) { - action = parseLine(line); - } else { - action = Action.Abort; - } + case "legacy": + launcher = new LegacyLauncher(params); + break; + + default: + throw new IllegalArgumentException("Invalid launcher type: " + type); } - } catch (IOException | ParseException e) { - LOGGER.log(Level.SEVERE, "Launcher ABORT due to exception:", e); - return 1; - } + launcher.launch(); + + return ExitCode.NORMAL; + } catch (IllegalArgumentException e) { + Log.fatal("Illegal argument", e); - // Main loop - if (action == Action.Abort) { - LOGGER.info("Launch aborted by the launcher."); + return ExitCode.ILLEGAL_ARGUMENT; + } catch (Throwable e) { + Log.fatal("Exception caught from launcher", e); - return 1; + return ExitCode.ERROR; } + } - try { - Launcher launcher = - LauncherFactory - .getInstance() - .createLauncher(params); + private static PreLaunchAction parseLine(String input, Parameters params) throws ParseException { + switch (input) { + case "": + break; - launcher.launch(); + case "launch": + return PreLaunchAction.LAUNCH; - return 0; - } catch (IllegalArgumentException e) { - LOGGER.log(Level.SEVERE, "Wrong argument.", e); + case "abort": + return PreLaunchAction.ABORT; - return 1; - } catch (Exception e) { - LOGGER.log(Level.SEVERE, "Exception caught from launcher.", e); + default: + String[] pair = input.split(" ", 2); - return 1; + if (pair.length != 2) + throw new ParseException(input, "[key] [value]"); + + params.add(pair[0], pair[1]); } + + return PreLaunchAction.PROCEED; + } + + private enum PreLaunchAction { + PROCEED, LAUNCH, ABORT } - private enum Action { - Proceed, - Launch, - Abort + private enum ExitCode { + NORMAL(0), ABORT(1), ERROR(2), ILLEGAL_ARGUMENT(65); + + private final int numeric; + + ExitCode(int numeric) { + this.numeric = numeric; + } + } } diff --git a/libraries/launcher/org/prismlauncher/Launcher.java b/libraries/launcher/org/prismlauncher/Launcher.java deleted file mode 100644 index 7f25717b..00000000 --- a/libraries/launcher/org/prismlauncher/Launcher.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright 2012-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. - */ - -package org.prismlauncher; - -public interface Launcher { - - void launch() throws Exception; - -} diff --git a/libraries/launcher/org/prismlauncher/applet/LegacyFrame.java b/libraries/launcher/org/prismlauncher/applet/LegacyFrame.java deleted file mode 100644 index 4413efa8..00000000 --- a/libraries/launcher/org/prismlauncher/applet/LegacyFrame.java +++ /dev/null @@ -1,163 +0,0 @@ -/* - * Copyright 2012-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. - */ - -package org.prismlauncher.applet; - -import net.minecraft.Launcher; - -import javax.imageio.ImageIO; -import java.applet.Applet; -import java.awt.*; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; -import java.io.File; -import java.io.IOException; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.nio.file.StandardCopyOption; -import java.util.List; -import java.util.logging.Level; -import java.util.logging.Logger; - -public final class LegacyFrame extends Frame { - - private static final Logger LOGGER = Logger.getLogger("LegacyFrame"); - - private final Launcher appletWrap; - - public LegacyFrame(String title, Applet mcApplet) { - super(title); - - appletWrap = new Launcher(mcApplet); - - mcApplet.setStub(appletWrap); - - try { - setIconImage(ImageIO.read(new File("icon.png"))); - } catch (IOException e) { - LOGGER.log(Level.WARNING, "Unable to read Minecraft icon!", e); - } - - addWindowListener(new ForceExitHandler()); - } - - public void start ( - String user, - String session, - int winSizeW, - int winSizeH, - boolean maximize, - String serverAddress, - String serverPort, - boolean isDemo - ) { - // Implements support for launching in to multiplayer on classic servers using a mpticket - // file generated by an external program and stored in the instance's root folder. - - Path mpticketFile = - Paths.get(System.getProperty("user.dir"), "..", "mpticket"); - - Path mpticketFileCorrupt = - Paths.get(System.getProperty("user.dir"), "..", "mpticket.corrupt"); - - if (Files.exists(mpticketFile)) { - try { - List<String> lines = Files.readAllLines(mpticketFile, StandardCharsets.UTF_8); - - if (lines.size() < 3) { - Files.move( - mpticketFile, - mpticketFileCorrupt, - StandardCopyOption.REPLACE_EXISTING - ); - - LOGGER.warning("Mpticket file is corrupted!"); - } else { - // Assumes parameters are valid and in the correct order - appletWrap.setParameter("server", lines.get(0)); - appletWrap.setParameter("port", lines.get(1)); - appletWrap.setParameter("mppass", lines.get(2)); - } - } catch (IOException e) { - LOGGER.log(Level.WARNING, "Unable to read mpticket file!", e); - } - } - - if (serverAddress != null) { - appletWrap.setParameter("server", serverAddress); - appletWrap.setParameter("port", serverPort); - } - - appletWrap.setParameter("username", user); - appletWrap.setParameter("sessionid", session); - appletWrap.setParameter("stand-alone", "true"); // Show the quit button. - appletWrap.setParameter("haspaid", "true"); // Some old versions need this for world saves to work. - appletWrap.setParameter("demo", isDemo ? "true" : "false"); - appletWrap.setParameter("fullscreen", "false"); - - add(appletWrap); - - appletWrap.setPreferredSize(new Dimension(winSizeW, winSizeH)); - - pack(); - - setLocationRelativeTo(null); - setResizable(true); - - if (maximize) - this.setExtendedState(MAXIMIZED_BOTH); - - validate(); - - appletWrap.init(); - appletWrap.start(); - - setVisible(true); - } - - private final class ForceExitHandler extends WindowAdapter { - - @Override - public void windowClosing(WindowEvent e) { - new Thread(new Runnable() { - @Override - public void run() { - try { - Thread.sleep(30000L); - } catch (InterruptedException localInterruptedException) { - localInterruptedException.printStackTrace(); - } - - LOGGER.info("Forcing exit!"); - - System.exit(0); - } - }).start(); - - if (appletWrap != null) { - appletWrap.stop(); - appletWrap.destroy(); - } - - // old minecraft versions can hang without this >_< - System.exit(0); - } - - } - -} diff --git a/libraries/launcher/org/prismlauncher/exception/ParameterNotFoundException.java b/libraries/launcher/org/prismlauncher/exception/ParameterNotFoundException.java index 641e0c99..524076ff 100644 --- a/libraries/launcher/org/prismlauncher/exception/ParameterNotFoundException.java +++ b/libraries/launcher/org/prismlauncher/exception/ParameterNotFoundException.java @@ -1,25 +1,48 @@ +// SPDX-License-Identifier: GPL-3.0-only /* - * Copyright 2012-2021 MultiMC Contributors + * Prism Launcher - Minecraft Launcher + * Copyright (C) 2022 icelimetea <fr3shtea@outlook.com> + * Copyright (C) 2022 solonovamax <solonovamax@12oclockpoint.com> + * Copyright (C) 2022 TheKodeToad <TheKodeToad@proton.me> * - * 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 + * 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. * - * http://www.apache.org/licenses/LICENSE-2.0 + * 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. * - * 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. + * Linking this library statically or dynamically with other modules is + * making a combined work based on this library. Thus, the terms and + * conditions of the GNU General Public License cover the whole + * combination. + * + * As a special exception, the copyright holders of this library give + * you permission to link this library with independent modules to + * produce an executable, regardless of the license terms of these + * independent modules, and to copy and distribute the resulting + * executable under terms of your choice, provided that you also meet, + * for each linked independent module, the terms and conditions of the + * license of that module. An independent module is a module which is + * not derived from or based on this library. If you modify this + * library, you may extend this exception to your version of the + * library, but you are not obliged to do so. If you do not wish to do + * so, delete this exception statement from your version. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. */ package org.prismlauncher.exception; public final class ParameterNotFoundException extends IllegalArgumentException { + private static final long serialVersionUID = 1L; + public ParameterNotFoundException(String key) { - super("Unknown parameter name: " + key); + super(String.format("Required parameter '%s' was not found", key)); } } diff --git a/libraries/launcher/org/prismlauncher/exception/ParseException.java b/libraries/launcher/org/prismlauncher/exception/ParseException.java index 51d25a62..4608fdd1 100644 --- a/libraries/launcher/org/prismlauncher/exception/ParseException.java +++ b/libraries/launcher/org/prismlauncher/exception/ParseException.java @@ -1,25 +1,48 @@ +// SPDX-License-Identifier: GPL-3.0-only /* - * Copyright 2012-2021 MultiMC Contributors + * Prism Launcher - Minecraft Launcher + * Copyright (C) 2022 icelimetea <fr3shtea@outlook.com> + * Copyright (C) 2022 solonovamax <solonovamax@12oclockpoint.com> + * Copyright (C) 2022 TheKodeToad <TheKodeToad@proton.me> * - * 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 + * 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. * - * http://www.apache.org/licenses/LICENSE-2.0 + * 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. * - * 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. + * Linking this library statically or dynamically with other modules is + * making a combined work based on this library. Thus, the terms and + * conditions of the GNU General Public License cover the whole + * combination. + * + * As a special exception, the copyright holders of this library give + * you permission to link this library with independent modules to + * produce an executable, regardless of the license terms of these + * independent modules, and to copy and distribute the resulting + * executable under terms of your choice, provided that you also meet, + * for each linked independent module, the terms and conditions of the + * license of that module. An independent module is a module which is + * not derived from or based on this library. If you modify this + * library, you may extend this exception to your version of the + * library, but you are not obliged to do so. If you do not wish to do + * so, delete this exception statement from your version. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. */ package org.prismlauncher.exception; public final class ParseException extends IllegalArgumentException { - public ParseException(String message) { - super(message); + private static final long serialVersionUID = 1L; + + public ParseException(String input, String format) { + super(String.format("For input '%s' - should match '%s'", input, format)); } } diff --git a/libraries/launcher/org/prismlauncher/impl/OneSixLauncher.java b/libraries/launcher/org/prismlauncher/impl/OneSixLauncher.java deleted file mode 100644 index d6443826..00000000 --- a/libraries/launcher/org/prismlauncher/impl/OneSixLauncher.java +++ /dev/null @@ -1,190 +0,0 @@ -/* Copyright 2012-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. - */ - -package org.prismlauncher.impl; - -import org.prismlauncher.Launcher; -import org.prismlauncher.applet.LegacyFrame; -import org.prismlauncher.utils.Parameters; -import org.prismlauncher.utils.Utils; - -import java.applet.Applet; -import java.io.File; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.List; -import java.util.ArrayList; -import java.util.logging.Level; -import java.util.logging.Logger; - -public final class OneSixLauncher implements Launcher { - - private static final int DEFAULT_WINDOW_WIDTH = 854; - private static final int DEFAULT_WINDOW_HEIGHT = 480; - - private static final Logger LOGGER = Logger.getLogger("OneSixLauncher"); - - // parameters, separated from ParamBucket - private final List<String> mcParams; - private final List<String> traits; - private final String appletClass; - private final String mainClass; - private final String userName, sessionId; - private final String windowTitle; - - // secondary parameters - private final int winSizeW; - private final int winSizeH; - private final boolean maximize; - private final String cwd; - - private final String serverAddress; - private final String serverPort; - - private final ClassLoader classLoader; - - public OneSixLauncher(Parameters params) { - classLoader = ClassLoader.getSystemClassLoader(); - - mcParams = params.allSafe("param", new ArrayList<String>()); - mainClass = params.firstSafe("mainClass", "net.minecraft.client.Minecraft"); - appletClass = params.firstSafe("appletClass", "net.minecraft.client.MinecraftApplet"); - traits = params.allSafe("traits", new ArrayList<String>()); - - userName = params.first("userName"); - sessionId = params.first("sessionId"); - windowTitle = params.firstSafe("windowTitle", "Minecraft"); - - serverAddress = params.firstSafe("serverAddress", null); - serverPort = params.firstSafe("serverPort", null); - - cwd = System.getProperty("user.dir"); - - String windowParams = params.firstSafe("windowParams", null); - - if (windowParams != null) { - String[] dimStrings = windowParams.split("x"); - - if (windowParams.equalsIgnoreCase("max")) { - maximize = true; - - winSizeW = DEFAULT_WINDOW_WIDTH; - winSizeH = DEFAULT_WINDOW_HEIGHT; - } else if (dimStrings.length == 2) { - maximize = false; - - winSizeW = Integer.parseInt(dimStrings[0]); - winSizeH = Integer.parseInt(dimStrings[1]); - } else { - throw new IllegalArgumentException("Unexpected window size parameter value: " + windowParams); - } - } else { - maximize = false; - - winSizeW = DEFAULT_WINDOW_WIDTH; - winSizeH = DEFAULT_WINDOW_HEIGHT; - } - } - - private void invokeMain(Class<?> mainClass) throws Exception { - Method method = mainClass.getMethod("main", String[].class); - - method.invoke(null, (Object) mcParams.toArray(new String[0])); - } - - private void legacyLaunch() throws Exception { - // Get the Minecraft Class and set the base folder - Class<?> minecraftClass = classLoader.loadClass(mainClass); - - Field baseDirField = Utils.getMinecraftBaseDirField(minecraftClass); - - if (baseDirField == null) { - LOGGER.warning("Could not find Minecraft path field."); - } else { - baseDirField.setAccessible(true); - - baseDirField.set(null, new File(cwd)); - } - - System.setProperty("minecraft.applet.TargetDirectory", cwd); - - if (!traits.contains("noapplet")) { - LOGGER.info("Launching with applet wrapper..."); - - try { - Class<?> mcAppletClass = classLoader.loadClass(appletClass); - - Applet mcApplet = (Applet) mcAppletClass.getConstructor().newInstance(); - - LegacyFrame mcWindow = new LegacyFrame(windowTitle, mcApplet); - - mcWindow.start( - userName, - sessionId, - winSizeW, - winSizeH, - maximize, - serverAddress, - serverPort, - mcParams.contains("--demo") - ); - - return; - } catch (Exception e) { - LOGGER.log(Level.SEVERE, "Applet wrapper failed: ", e); - - LOGGER.warning("Falling back to using main class."); - } - } - - invokeMain(minecraftClass); - } - - private void launchWithMainClass() throws Exception { - // window size, title and state, onesix - - // FIXME: there is no good way to maximize the minecraft window in onesix. - // the following often breaks linux screen setups - // mcparams.add("--fullscreen"); - - if (!maximize) { - mcParams.add("--width"); - mcParams.add(Integer.toString(winSizeW)); - mcParams.add("--height"); - mcParams.add(Integer.toString(winSizeH)); - } - - if (serverAddress != null) { - mcParams.add("--server"); - mcParams.add(serverAddress); - mcParams.add("--port"); - mcParams.add(serverPort); - } - - invokeMain(classLoader.loadClass(mainClass)); - } - - @Override - public void launch() throws Exception { - if (traits.contains("legacyLaunch") || traits.contains("alphaLaunch")) { - // legacy launch uses the applet wrapper - legacyLaunch(); - } else { - // normal launch just calls main() - launchWithMainClass(); - } - } - -} diff --git a/libraries/launcher/org/prismlauncher/launcher/Launcher.java b/libraries/launcher/org/prismlauncher/launcher/Launcher.java new file mode 100644 index 00000000..049a83d8 --- /dev/null +++ b/libraries/launcher/org/prismlauncher/launcher/Launcher.java @@ -0,0 +1,44 @@ +// SPDX-License-Identifier: GPL-3.0-only +/* + * Prism Launcher - Minecraft Launcher + * Copyright (C) 2022 icelimetea <fr3shtea@outlook.com> + * Copyright (C) 2022 TheKodeToad <TheKodeToad@proton.me> + * Copyright (C) 2022 solonovamax <solonovamax@12oclockpoint.com> + * + * 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. + * + * Linking this library statically or dynamically with other modules is + * making a combined work based on this library. Thus, the terms and + * conditions of the GNU General Public License cover the whole + * combination. + * + * As a special exception, the copyright holders of this library give + * you permission to link this library with independent modules to + * produce an executable, regardless of the license terms of these + * independent modules, and to copy and distribute the resulting + * executable under terms of your choice, provided that you also meet, + * for each linked independent module, the terms and conditions of the + * license of that module. An independent module is a module which is + * not derived from or based on this library. If you modify this + * library, you may extend this exception to your version of the + * library, but you are not obliged to do so. If you do not wish to do + * so, delete this exception statement from your version. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +package org.prismlauncher.launcher; + +public interface Launcher { + + void launch() throws Throwable; + +} diff --git a/libraries/launcher/org/prismlauncher/launcher/impl/AbstractLauncher.java b/libraries/launcher/org/prismlauncher/launcher/impl/AbstractLauncher.java new file mode 100644 index 00000000..0c2153a9 --- /dev/null +++ b/libraries/launcher/org/prismlauncher/launcher/impl/AbstractLauncher.java @@ -0,0 +1,110 @@ +// SPDX-License-Identifier: GPL-3.0-only +/* + * Prism Launcher - Minecraft Launcher + * Copyright (C) 2022 icelimetea <fr3shtea@outlook.com> + * Copyright (C) 2022 TheKodeToad <TheKodeToad@proton.me> + * Copyright (C) 2022 solonovamax <solonovamax@12oclockpoint.com> + * + * 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. + * + * Linking this library statically or dynamically with other modules is + * making a combined work based on this library. Thus, the terms and + * conditions of the GNU General Public License cover the whole + * combination. + * + * As a special exception, the copyright holders of this library give + * you permission to link this library with independent modules to + * produce an executable, regardless of the license terms of these + * independent modules, and to copy and distribute the resulting + * executable under terms of your choice, provided that you also meet, + * for each linked independent module, the terms and conditions of the + * license of that module. An independent module is a module which is + * not derived from or based on this library. If you modify this + * library, you may extend this exception to your version of the + * library, but you are not obliged to do so. If you do not wish to do + * so, delete this exception statement from your version. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + * + * 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. + */ + +package org.prismlauncher.launcher.impl; + +import java.util.ArrayList; +import java.util.List; + +import org.prismlauncher.exception.ParseException; +import org.prismlauncher.launcher.Launcher; +import org.prismlauncher.utils.Parameters; + +public abstract class AbstractLauncher implements Launcher { + + private static final int DEFAULT_WINDOW_WIDTH = 854, DEFAULT_WINDOW_HEIGHT = 480; + + // parameters, separated from ParamBucket + protected final List<String> gameArgs; + + // secondary parameters + protected final int width, height; + protected final boolean maximize; + protected final String serverAddress, serverPort; + + protected final String mainClassName; + + protected AbstractLauncher(Parameters params) { + gameArgs = params.getList("param", new ArrayList<String>()); + mainClassName = params.getString("mainClass", "net.minecraft.client.Minecraft"); + + serverAddress = params.getString("serverAddress", null); + serverPort = params.getString("serverPort", null); + + String windowParams = params.getString("windowParams", null); + + if ("max".equals(windowParams) || windowParams == null) { + maximize = windowParams != null; + + width = DEFAULT_WINDOW_WIDTH; + height = DEFAULT_WINDOW_HEIGHT; + } else { + maximize = false; + + String[] sizePair = windowParams.split("x", 2); + + if (sizePair.length == 2) { + try { + width = Integer.parseInt(sizePair[0]); + height = Integer.parseInt(sizePair[1]); + return; + } catch (NumberFormatException ignored) { + } + } + + throw new ParseException(windowParams, "[width]x[height]"); + } + } + +} diff --git a/libraries/launcher/org/prismlauncher/launcher/impl/StandardLauncher.java b/libraries/launcher/org/prismlauncher/launcher/impl/StandardLauncher.java new file mode 100644 index 00000000..9436ff15 --- /dev/null +++ b/libraries/launcher/org/prismlauncher/launcher/impl/StandardLauncher.java @@ -0,0 +1,91 @@ +// SPDX-License-Identifier: GPL-3.0-only +/* + * Prism Launcher - Minecraft Launcher + * Copyright (C) 2022 icelimetea <fr3shtea@outlook.com> + * Copyright (C) 2022 TheKodeToad <TheKodeToad@proton.me> + * Copyright (C) 2022 solonovamax <solonovamax@12oclockpoint.com> + * + * 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. + * + * Linking this library statically or dynamically with other modules is + * making a combined work based on this library. Thus, the terms and + * conditions of the GNU General Public License cover the whole + * combination. + * + * As a special exception, the copyright holders of this library give + * you permission to link this library with independent modules to + * produce an executable, regardless of the license terms of these + * independent modules, and to copy and distribute the resulting + * executable under terms of your choice, provided that you also meet, + * for each linked independent module, the terms and conditions of the + * license of that module. An independent module is a module which is + * not derived from or based on this library. If you modify this + * library, you may extend this exception to your version of the + * library, but you are not obliged to do so. If you do not wish to do + * so, delete this exception statement from your version. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + * + * 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. + */ + +package org.prismlauncher.launcher.impl; + +import java.lang.invoke.MethodHandle; + +import org.prismlauncher.utils.Parameters; +import org.prismlauncher.utils.ReflectionUtils; + +public final class StandardLauncher extends AbstractLauncher { + + public StandardLauncher(Parameters params) { + super(params); + } + + @Override + public void launch() throws Throwable { + // window size, title and state + // FIXME doesn't support maximisation + if (!maximize) { + gameArgs.add("--width"); + gameArgs.add(Integer.toString(width)); + gameArgs.add("--height"); + gameArgs.add(Integer.toString(height)); + } + + if (serverAddress != null) { + gameArgs.add("--server"); + gameArgs.add(serverAddress); + gameArgs.add("--port"); + gameArgs.add(serverPort); + } + + // find and invoke the main method + MethodHandle method = ReflectionUtils.findMainMethod(mainClassName); + method.invokeExact(gameArgs.toArray(new String[0])); + } + +} diff --git a/libraries/launcher/org/prismlauncher/launcher/impl/legacy/LegacyFrame.java b/libraries/launcher/org/prismlauncher/launcher/impl/legacy/LegacyFrame.java new file mode 100644 index 00000000..c215e7fe --- /dev/null +++ b/libraries/launcher/org/prismlauncher/launcher/impl/legacy/LegacyFrame.java @@ -0,0 +1,190 @@ +// SPDX-License-Identifier: GPL-3.0-only +/* + * Prism Launcher - Minecraft Launcher + * Copyright (C) 2022 icelimetea <fr3shtea@outlook.com> + * Copyright (C) 2022 flow <flowlnlnln@gmail.com> + * Copyright (C) 2022 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. + * + * Linking this library statically or dynamically with other modules is + * making a combined work based on this library. Thus, the terms and + * conditions of the GNU General Public License cover the whole + * combination. + * + * As a special exception, the copyright holders of this library give + * you permission to link this library with independent modules to + * produce an executable, regardless of the license terms of these + * independent modules, and to copy and distribute the resulting + * executable under terms of your choice, provided that you also meet, + * for each linked independent module, the terms and conditions of the + * license of that module. An independent module is a module which is + * not derived from or based on this library. If you modify this + * library, you may extend this exception to your version of the + * library, but you are not obliged to do so. If you do not wish to do + * so, delete this exception statement from your version. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + * + * 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. + */ + +package org.prismlauncher.launcher.impl.legacy; + +import java.applet.Applet; +import java.awt.Dimension; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; +import java.util.List; + +import javax.imageio.ImageIO; +import javax.swing.JFrame; + +import org.prismlauncher.utils.logging.Log; + +import net.minecraft.Launcher; + +public final class LegacyFrame extends JFrame { + + private static final long serialVersionUID = 1L; + + private final Launcher launcher; + + public LegacyFrame(String title, Applet applet) { + super(title); + + launcher = new Launcher(applet); + + applet.setStub(launcher); + + try { + setIconImage(ImageIO.read(new File("icon.png"))); + } catch (IOException e) { + Log.error("Failed to read window icon", e); + } + + addWindowListener(new ForceExitHandler()); + } + + public void start(String user, String session, int width, int height, boolean maximize, String serverAddress, + String serverPort, boolean demo) { + // Implements support for launching in to multiplayer on classic servers using a + // mpticket file generated by an external program and stored in the instance's + // root folder. + Path instanceFolder = Paths.get(".."); + Path mpticket = instanceFolder.resolve("mpticket"); + Path mpticketCorrupt = instanceFolder.resolve("mpticket.corrupt"); + + if (Files.exists(mpticket)) { + try { + List<String> lines = Files.readAllLines(mpticket, StandardCharsets.UTF_8); + + if (lines.size() < 3) { + Files.move(mpticket, mpticketCorrupt, StandardCopyOption.REPLACE_EXISTING); + + Log.warning("mpticket file is corrupted"); + } else { + // Assumes parameters are valid and in the correct order + launcher.setParameter("server", lines.get(0)); + launcher.setParameter("port", lines.get(1)); + launcher.setParameter("mppass", lines.get(2)); + } + } catch (IOException e) { + Log.error("Failed to read mpticket file", e); + } + } + + if (serverAddress != null) { + launcher.setParameter("server", serverAddress); + launcher.setParameter("port", serverPort); + } + + launcher.setParameter("username", user); + launcher.setParameter("sessionid", session); + launcher.setParameter("stand-alone", true); // Show the quit button. TODO: why won't this work? + launcher.setParameter("haspaid", true); // Some old versions need this for world saves to work. + launcher.setParameter("demo", demo); + launcher.setParameter("fullscreen", false); + + add(launcher); + + launcher.setPreferredSize(new Dimension(width, height)); + + pack(); + + setLocationRelativeTo(null); + setResizable(true); + + if (maximize) + setExtendedState(MAXIMIZED_BOTH); + + validate(); + + launcher.init(); + launcher.start(); + + setVisible(true); + } + + private final class ForceExitHandler extends WindowAdapter { + + @Override + public void windowClosing(WindowEvent event) { + // FIXME better solution + + new Thread(new Runnable() { + @Override + public void run() { + try { + Thread.sleep(30000L); + } catch (InterruptedException e) { + Log.error("Thread interrupted", e); + } + + Log.warning("Forcing exit"); + System.exit(0); + } + }).start(); + + if (launcher != null) { + launcher.stop(); + launcher.destroy(); + } + + // old minecraft versions can hang without this >_< + System.exit(0); + } + + } + +} diff --git a/libraries/launcher/org/prismlauncher/launcher/impl/legacy/LegacyLauncher.java b/libraries/launcher/org/prismlauncher/launcher/impl/legacy/LegacyLauncher.java new file mode 100644 index 00000000..d349177b --- /dev/null +++ b/libraries/launcher/org/prismlauncher/launcher/impl/legacy/LegacyLauncher.java @@ -0,0 +1,126 @@ +// SPDX-License-Identifier: GPL-3.0-only +/* + * Prism Launcher - Minecraft Launcher + * Copyright (C) 2022 icelimetea <fr3shtea@outlook.com> + * Copyright (C) 2022 flow <flowlnlnln@gmail.com> + * Copyright (C) 2022 TheKodeToad <TheKodeToad@proton.me> + * Copyright (C) 2022 solonovamax <solonovamax@12oclockpoint.com> + * + * 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. + * + * Linking this library statically or dynamically with other modules is + * making a combined work based on this library. Thus, the terms and + * conditions of the GNU General Public License cover the whole + * combination. + * + * As a special exception, the copyright holders of this library give + * you permission to link this library with independent modules to + * produce an executable, regardless of the license terms of these + * independent modules, and to copy and distribute the resulting + * executable under terms of your choice, provided that you also meet, + * for each linked independent module, the terms and conditions of the + * license of that module. An independent module is a module which is + * not derived from or based on this library. If you modify this + * library, you may extend this exception to your version of the + * library, but you are not obliged to do so. If you do not wish to do + * so, delete this exception statement from your version. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + * + * 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. + */ + +package org.prismlauncher.launcher.impl.legacy; + +import java.io.File; +import java.lang.invoke.MethodHandle; +import java.lang.reflect.Field; +import java.util.Collections; +import java.util.List; + +import org.prismlauncher.launcher.impl.AbstractLauncher; +import org.prismlauncher.utils.Parameters; +import org.prismlauncher.utils.ReflectionUtils; +import org.prismlauncher.utils.logging.Log; + +/** + * Used to launch old versions that support applets. + */ +public final class LegacyLauncher extends AbstractLauncher { + + private final String user, session; + private final String title; + private final String appletClass; + private final boolean useApplet; + private final String gameDir; + + public LegacyLauncher(Parameters params) { + super(params); + + user = params.getString("userName"); + session = params.getString("sessionId"); + title = params.getString("windowTitle", "Minecraft"); + appletClass = params.getString("appletClass", "net.minecraft.client.MinecraftApplet"); + + List<String> traits = params.getList("traits", Collections.<String>emptyList()); + useApplet = !traits.contains("noapplet"); + + gameDir = System.getProperty("user.dir"); + } + + @Override + public void launch() throws Throwable { + Class<?> main = ClassLoader.getSystemClassLoader().loadClass(mainClassName); + Field gameDirField = ReflectionUtils.findMinecraftGameDirField(main); + + if (gameDirField == null) + Log.warning("Could not find Minecraft folder field"); + else { + gameDirField.setAccessible(true); + gameDirField.set(null, new File(gameDir)); + } + + if (useApplet) { + System.setProperty("minecraft.applet.TargetDirectory", gameDir); + + try { + LegacyFrame window = new LegacyFrame(title, ReflectionUtils.createAppletClass(appletClass)); + + window.start(user, session, width, height, maximize, serverAddress, serverPort, + gameArgs.contains("--demo")); + return; + } catch (Throwable e) { + Log.error("Running applet wrapper failed with exception; falling back to main class", e); + } + } + + // find and invoke the main method, this time without size parameters + // in all versions that support applets, these are ignored + MethodHandle method = ReflectionUtils.findMainMethod(main); + method.invokeExact(gameArgs.toArray(new String[0])); + } + +} diff --git a/libraries/launcher/org/prismlauncher/utils/Parameters.java b/libraries/launcher/org/prismlauncher/utils/Parameters.java index 98a40c28..6365753e 100644 --- a/libraries/launcher/org/prismlauncher/utils/Parameters.java +++ b/libraries/launcher/org/prismlauncher/utils/Parameters.java @@ -1,46 +1,84 @@ +// SPDX-License-Identifier: GPL-3.0-only /* - * Copyright 2012-2021 MultiMC Contributors + * Prism Launcher - Minecraft Launcher + * Copyright (C) 2022 icelimetea <fr3shtea@outlook.com> + * Copyright (C) 2022 TheKodeToad <TheKodeToad@proton.me> + * Copyright (C) 2022 solonovamax <solonovamax@12oclockpoint.com> * - * 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 + * 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. * - * http://www.apache.org/licenses/LICENSE-2.0 + * 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. * - * 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. + * Linking this library statically or dynamically with other modules is + * making a combined work based on this library. Thus, the terms and + * conditions of the GNU General Public License cover the whole + * combination. + * + * As a special exception, the copyright holders of this library give + * you permission to link this library with independent modules to + * produce an executable, regardless of the license terms of these + * independent modules, and to copy and distribute the resulting + * executable under terms of your choice, provided that you also meet, + * for each linked independent module, the terms and conditions of the + * license of that module. An independent module is a module which is + * not derived from or based on this library. If you modify this + * library, you may extend this exception to your version of the + * library, but you are not obliged to do so. If you do not wish to do + * so, delete this exception statement from your version. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + * + * 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. */ package org.prismlauncher.utils; -import org.prismlauncher.exception.ParameterNotFoundException; - import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import org.prismlauncher.exception.ParameterNotFoundException; + public final class Parameters { - private final Map<String, List<String>> paramsMap = new HashMap<>(); + private final Map<String, List<String>> map = new HashMap<>(); public void add(String key, String value) { - List<String> params = paramsMap.get(key); + List<String> params = map.get(key); if (params == null) { params = new ArrayList<>(); - paramsMap.put(key, params); + map.put(key, params); } params.add(value); } - public List<String> all(String key) throws ParameterNotFoundException { - List<String> params = paramsMap.get(key); + public List<String> getList(String key) throws ParameterNotFoundException { + List<String> params = map.get(key); if (params == null) throw new ParameterNotFoundException(key); @@ -48,8 +86,8 @@ public final class Parameters { return params; } - public List<String> allSafe(String key, List<String> def) { - List<String> params = paramsMap.get(key); + public List<String> getList(String key, List<String> def) { + List<String> params = map.get(key); if (params == null || params.isEmpty()) return def; @@ -57,8 +95,8 @@ public final class Parameters { return params; } - public String first(String key) throws ParameterNotFoundException { - List<String> list = all(key); + public String getString(String key) throws ParameterNotFoundException { + List<String> list = getList(key); if (list.isEmpty()) throw new ParameterNotFoundException(key); @@ -66,8 +104,8 @@ public final class Parameters { return list.get(0); } - public String firstSafe(String key, String def) { - List<String> params = paramsMap.get(key); + public String getString(String key, String def) { + List<String> params = map.get(key); if (params == null || params.isEmpty()) return def; diff --git a/libraries/launcher/org/prismlauncher/utils/ReflectionUtils.java b/libraries/launcher/org/prismlauncher/utils/ReflectionUtils.java new file mode 100644 index 00000000..dd212ef9 --- /dev/null +++ b/libraries/launcher/org/prismlauncher/utils/ReflectionUtils.java @@ -0,0 +1,154 @@ +// SPDX-License-Identifier: GPL-3.0-only +/* + * Prism Launcher - Minecraft Launcher + * Copyright (C) 2022 icelimetea <fr3shtea@outlook.com> + * Copyright (C) 2022 solonovamax <solonovamax@12oclockpoint.com> + * Copyright (C) 2022 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. + * + * Linking this library statically or dynamically with other modules is + * making a combined work based on this library. Thus, the terms and + * conditions of the GNU General Public License cover the whole + * combination. + * + * As a special exception, the copyright holders of this library give + * you permission to link this library with independent modules to + * produce an executable, regardless of the license terms of these + * independent modules, and to copy and distribute the resulting + * executable under terms of your choice, provided that you also meet, + * for each linked independent module, the terms and conditions of the + * license of that module. An independent module is a module which is + * not derived from or based on this library. If you modify this + * library, you may extend this exception to your version of the + * library, but you are not obliged to do so. If you do not wish to do + * so, delete this exception statement from your version. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + * + * 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. + */ + +package org.prismlauncher.utils; + +import java.applet.Applet; +import java.io.File; +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; + +import org.prismlauncher.utils.logging.Log; + +public final class ReflectionUtils { + + private static final MethodHandles.Lookup LOOKUP = MethodHandles.lookup(); + private static final ClassLoader LOADER = ClassLoader.getSystemClassLoader(); + + /** + * Construct a Java applet by its class name. + * + * @param clazz The class name + * @return The applet instance + * @throws Throwable + */ + public static Applet createAppletClass(String clazz) throws Throwable { + Class<?> appletClass = LOADER.loadClass(clazz); + + MethodHandle appletConstructor = LOOKUP.findConstructor(appletClass, MethodType.methodType(void.class)); + return (Applet) appletConstructor.invoke(); + } + + /** + * Best guess of the game directory field within net.minecraft.client.Minecraft. + * Designed for legacy versions - newer versions do not use a static field. + * + * @param clazz The class + * @return The first field matching criteria + */ + public static Field findMinecraftGameDirField(Class<?> clazz) { + Log.debug("Resolving minecraft game directory field"); + + // search for private static File + for (Field field : clazz.getDeclaredFields()) { + if (field.getType() != File.class) { + continue; + } + + int fieldModifiers = field.getModifiers(); + + if (!Modifier.isStatic(fieldModifiers)) { + Log.debug("Rejecting field " + field.getName() + " because it is not static"); + continue; + } + + if (!Modifier.isPrivate(fieldModifiers)) { + Log.debug("Rejecting field " + field.getName() + " because it is not private"); + continue; + } + + if (Modifier.isFinal(fieldModifiers)) { + Log.debug("Rejecting field " + field.getName() + " because it is final"); + continue; + } + + Log.debug("Identified field " + field.getName() + " to match conditions for game directory field"); + + return field; + } + + return null; + } + + /** + * Gets the main method within a class. + * + * @param clazz The class + * @return A method matching the descriptor of a main method + * @throws ClassNotFoundException + * @throws NoSuchMethodException + * @throws IllegalAccessException + */ + public static MethodHandle findMainMethod(Class<?> clazz) throws NoSuchMethodException, IllegalAccessException { + return LOOKUP.findStatic(clazz, "main", MethodType.methodType(void.class, String[].class)); + } + + /** + * Gets the main method within a class by its name. + * + * @param clazz The class name + * @return A method matching the descriptor of a main method + * @throws ClassNotFoundException + * @throws NoSuchMethodException + * @throws IllegalAccessException + */ + public static MethodHandle findMainMethod(String clazz) + throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException { + return findMainMethod(LOADER.loadClass(clazz)); + } + +} diff --git a/libraries/launcher/org/prismlauncher/utils/Utils.java b/libraries/launcher/org/prismlauncher/utils/Utils.java deleted file mode 100644 index ae9a4de2..00000000 --- a/libraries/launcher/org/prismlauncher/utils/Utils.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright 2012-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. - */ - -package org.prismlauncher.utils; - -import java.io.File; -import java.lang.reflect.Field; -import java.lang.reflect.Modifier; - -public final class Utils { - - private Utils() {} - - /** - * Finds a field that looks like a Minecraft base folder in a supplied class - * - * @param clazz the class to scan - */ - public static Field getMinecraftBaseDirField(Class<?> clazz) { - for (Field f : clazz.getDeclaredFields()) { - // Has to be File - if (f.getType() != File.class) - continue; - - // And Private Static. - if (!Modifier.isStatic(f.getModifiers()) || !Modifier.isPrivate(f.getModifiers())) - continue; - - return f; - } - - return null; - } - -} - diff --git a/libraries/launcher/org/prismlauncher/LauncherFactory.java b/libraries/launcher/org/prismlauncher/utils/logging/Level.java index 98f2bbba..552b0b55 100644 --- a/libraries/launcher/org/prismlauncher/LauncherFactory.java +++ b/libraries/launcher/org/prismlauncher/utils/logging/Level.java @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-3.0-only /* - * PolyMC - Minecraft Launcher - * Copyright (C) 2022 icelimetea, <fr3shtea@outlook.com> + * Prism Launcher - Minecraft Launcher + * Copyright (C) 2022 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 @@ -33,48 +33,27 @@ * along with this program. If not, see <https://www.gnu.org/licenses/>. */ -package org.prismlauncher; +package org.prismlauncher.utils.logging; -import org.prismlauncher.impl.OneSixLauncher; -import org.prismlauncher.utils.Parameters; +public enum Level { + LAUNCHER("Launcher"), + DEBUG("Debug"), + INFO("Info"), + MESSAGE("Message"), + WARNING("Warning"), + ERROR("Error", true), + FATAL("Fatal", true); -import java.util.HashMap; -import java.util.Map; + String name; + boolean stderr; -public final class LauncherFactory { - - private static final LauncherFactory INSTANCE = new LauncherFactory(); - - private final Map<String, LauncherProvider> launcherRegistry = new HashMap<>(); - - private LauncherFactory() { - launcherRegistry.put("onesix", new LauncherProvider() { - @Override - public Launcher provide(Parameters parameters) { - return new OneSixLauncher(parameters); - } - }); - } - - public Launcher createLauncher(Parameters parameters) { - String name = parameters.first("launcher"); - - LauncherProvider launcherProvider = launcherRegistry.get(name); - - if (launcherProvider == null) - throw new IllegalArgumentException("Invalid launcher type: " + name); - - return launcherProvider.provide(parameters); - } - - public static LauncherFactory getInstance() { - return INSTANCE; + Level(String name) { + this(name, false); } - public interface LauncherProvider { - - Launcher provide(Parameters parameters); - + Level(String name, boolean stderr) { + this.name = name; + this.stderr = stderr; } } diff --git a/libraries/launcher/org/prismlauncher/utils/logging/Log.java b/libraries/launcher/org/prismlauncher/utils/logging/Log.java new file mode 100644 index 00000000..e3aa538b --- /dev/null +++ b/libraries/launcher/org/prismlauncher/utils/logging/Log.java @@ -0,0 +1,104 @@ +// SPDX-License-Identifier: GPL-3.0-only +/* + * Prism Launcher - Minecraft Launcher + * Copyright (C) 2022 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. + * + * Linking this library statically or dynamically with other modules is + * making a combined work based on this library. Thus, the terms and + * conditions of the GNU General Public License cover the whole + * combination. + * + * As a special exception, the copyright holders of this library give + * you permission to link this library with independent modules to + * produce an executable, regardless of the license terms of these + * independent modules, and to copy and distribute the resulting + * executable under terms of your choice, provided that you also meet, + * for each linked independent module, the terms and conditions of the + * license of that module. An independent module is a module which is + * not derived from or based on this library. If you modify this + * library, you may extend this exception to your version of the + * library, but you are not obliged to do so. If you do not wish to do + * so, delete this exception statement from your version. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +package org.prismlauncher.utils.logging; + +import java.io.PrintStream; + +/** + * Used to print messages with different levels used to colourise the output. + * Used instead of a logging framework, as the launcher knows how to parse these + * messages. + */ +public final class Log { + + // original before possibly overridden by MC + private static final PrintStream OUT = new PrintStream(System.out), ERR = new PrintStream(System.err); + private static final boolean DEBUG = Boolean.getBoolean("org.prismlauncher.debug"); + + public static void launcher(String message) { + log(message, Level.LAUNCHER); + } + + public static void error(String message) { + log(message, Level.ERROR); + } + + public static void debug(String message) { + log(message, Level.DEBUG); + } + + public static void warning(String message) { + log(message, Level.WARNING); + } + + public static void error(String message, Throwable e) { + error(message); + e.printStackTrace(ERR); + } + + public static void fatal(String message) { + log(message, Level.FATAL); + } + + public static void fatal(String message, Throwable e) { + fatal(message); + e.printStackTrace(ERR); + } + + /** + * Logs a message with the prefix <code>!![LEVEL]!</code>. This is picked up by + * the log viewer to give it nice colours. + * + * @param message The message + * @param level The level + */ + public static void log(String message, Level level) { + if (!DEBUG && level == Level.DEBUG) + return; + + String prefix = "!![" + level.name + "]!"; + // prefix first line + message = prefix + message; + // prefix subsequent lines + message = message.replace("\n", "\n" + prefix); + + if (level.stderr) + ERR.println(message); + else + OUT.println(message); + } + +} diff --git a/tests/FileSystem_test.cpp b/tests/FileSystem_test.cpp index 21270f6f..3a5c38d0 100644 --- a/tests/FileSystem_test.cpp +++ b/tests/FileSystem_test.cpp @@ -126,7 +126,7 @@ slots: qDebug() << tempDir.path(); qDebug() << target_dir.path(); FS::copy c(folder, target_dir.path()); - c.blacklist(new RegexpMatcher("[.]?mcmeta")); + c.matcher(new RegexpMatcher("[.]?mcmeta")); c(); for(auto entry: target_dir.entryList()) @@ -147,6 +147,41 @@ slots: f(); } + void test_copy_with_whitelist() + { + QString folder = QFINDTESTDATA("testdata/FileSystem/test_folder"); + auto f = [&folder]() + { + QTemporaryDir tempDir; + tempDir.setAutoRemove(true); + qDebug() << "From:" << folder << "To:" << tempDir.path(); + + QDir target_dir(FS::PathCombine(tempDir.path(), "test_folder")); + qDebug() << tempDir.path(); + qDebug() << target_dir.path(); + FS::copy c(folder, target_dir.path()); + c.matcher(new RegexpMatcher("[.]?mcmeta")); + c.whitelist(true); + c(); + + for(auto entry: target_dir.entryList()) + { + qDebug() << entry; + } + QVERIFY(target_dir.entryList().contains("pack.mcmeta")); + QVERIFY(!target_dir.entryList().contains("assets")); + }; + + // first try variant without trailing / + QVERIFY(!folder.endsWith('/')); + f(); + + // then variant with trailing / + folder.append('/'); + QVERIFY(folder.endsWith('/')); + f(); + } + void test_copy_with_dot_hidden() { QString folder = QFINDTESTDATA("testdata/FileSystem/test_folder"); |