From 5ee4fb3522ea2bb66ad49e1cdd91140b8d5c6a00 Mon Sep 17 00:00:00 2001 From: Sefa Eyeoglu Date: Fri, 11 Nov 2022 15:02:08 +0100 Subject: [PATCH 001/155] feat: validate maximum memory allocation Signed-off-by: Sefa Eyeoglu --- launcher/ui/pages/global/JavaPage.cpp | 25 +++- launcher/ui/pages/global/JavaPage.h | 3 + launcher/ui/pages/global/JavaPage.ui | 54 ++++---- .../pages/instance/InstanceSettingsPage.cpp | 26 +++- .../ui/pages/instance/InstanceSettingsPage.h | 3 + .../ui/pages/instance/InstanceSettingsPage.ui | 119 ++++++++++-------- 6 files changed, 151 insertions(+), 79 deletions(-) diff --git a/launcher/ui/pages/global/JavaPage.cpp b/launcher/ui/pages/global/JavaPage.cpp index 2cee15bf1..00c06cff9 100644 --- a/launcher/ui/pages/global/JavaPage.cpp +++ b/launcher/ui/pages/global/JavaPage.cpp @@ -58,9 +58,8 @@ JavaPage::JavaPage(QWidget *parent) : QWidget(parent), ui(new Ui::JavaPage) ui->setupUi(this); ui->tabWidget->tabBar()->hide(); - auto sysMiB = Sys::getSystemRam() / Sys::mebibyte; - ui->maxMemSpinBox->setMaximum(sysMiB); loadSettings(); + updateThresholds(); } JavaPage::~JavaPage() @@ -177,6 +176,11 @@ void JavaPage::on_javaTestBtn_clicked() checker->run(); } +void JavaPage::on_maxMemSpinBox_valueChanged(int i) +{ + updateThresholds(); +} + void JavaPage::checkerFinished() { checker.reset(); @@ -186,3 +190,20 @@ void JavaPage::retranslate() { ui->retranslateUi(this); } + +void JavaPage::updateThresholds() +{ + auto sysMiB = Sys::getSystemRam() / Sys::mebibyte; + unsigned int maxMem = ui->maxMemSpinBox->value(); + + if (maxMem >= sysMiB) { + ui->labelMaxMemIcon->setText(u8"✘"); + ui->labelMaxMemIcon->setToolTip(tr("Your maximum memory allocation exceeds your system memory capacity.")); + } else if (maxMem > (sysMiB * 0.9)) { + ui->labelMaxMemIcon->setText(u8"⚠"); + ui->labelMaxMemIcon->setToolTip(tr("Your maximum memory allocation approaches your system memory capacity.")); + } else { + ui->labelMaxMemIcon->setText(u8"✔"); + ui->labelMaxMemIcon->setToolTip(""); + } +} diff --git a/launcher/ui/pages/global/JavaPage.h b/launcher/ui/pages/global/JavaPage.h index 64d4098e5..2ef6d7493 100644 --- a/launcher/ui/pages/global/JavaPage.h +++ b/launcher/ui/pages/global/JavaPage.h @@ -76,6 +76,8 @@ public: bool apply() override; void retranslate() override; + void updateThresholds(); + private: void applySettings(); void loadSettings(); @@ -85,6 +87,7 @@ slots: void on_javaDetectBtn_clicked(); void on_javaTestBtn_clicked(); void on_javaBrowseBtn_clicked(); + void on_maxMemSpinBox_valueChanged(int i); void checkerFinished(); private: diff --git a/launcher/ui/pages/global/JavaPage.ui b/launcher/ui/pages/global/JavaPage.ui index 6ccffed4d..19e23eba9 100644 --- a/launcher/ui/pages/global/JavaPage.ui +++ b/launcher/ui/pages/global/JavaPage.ui @@ -44,8 +44,8 @@ Memory - - + + The maximum amount of memory Minecraft is allowed to use. @@ -67,27 +67,17 @@ - - + + - &Minimum memory allocation: + &PermGen: - minMemSpinBox + permGenSpinBox - - - - Ma&ximum memory allocation: - - - maxMemSpinBox - - - - + The amount of memory Minecraft is started with. @@ -109,17 +99,27 @@ - - + + - &PermGen: + Ma&ximum memory allocation: - permGenSpinBox + maxMemSpinBox - + + + + &Minimum memory allocation: + + + minMemSpinBox + + + + The amount of memory available to store loaded Java classes. @@ -141,6 +141,16 @@ + + + + + + + maxMemSpinBox + + + diff --git a/launcher/ui/pages/instance/InstanceSettingsPage.cpp b/launcher/ui/pages/instance/InstanceSettingsPage.cpp index 5da7f19f5..50039e879 100644 --- a/launcher/ui/pages/instance/InstanceSettingsPage.cpp +++ b/launcher/ui/pages/instance/InstanceSettingsPage.cpp @@ -59,12 +59,12 @@ InstanceSettingsPage::InstanceSettingsPage(BaseInstance *inst, QWidget *parent) { m_settings = inst->settings(); ui->setupUi(this); - auto sysMB = Sys::getSystemRam() / Sys::mebibyte; - ui->maxMemSpinBox->setMaximum(sysMB); + connect(ui->openGlobalJavaSettingsButton, &QCommandLinkButton::clicked, this, &InstanceSettingsPage::globalSettingsButtonClicked); connect(APPLICATION, &Application::globalSettingsAboutToOpen, this, &InstanceSettingsPage::applySettings); connect(APPLICATION, &Application::globalSettingsClosed, this, &InstanceSettingsPage::loadSettings); loadSettings(); + updateThresholds(); } bool InstanceSettingsPage::shouldDisplay() const @@ -437,6 +437,11 @@ void InstanceSettingsPage::on_javaTestBtn_clicked() checker->run(); } +void InstanceSettingsPage::on_maxMemSpinBox_valueChanged(int i) +{ + updateThresholds(); +} + void InstanceSettingsPage::checkerFinished() { checker.reset(); @@ -447,3 +452,20 @@ void InstanceSettingsPage::retranslate() ui->retranslateUi(this); ui->customCommands->retranslate(); // TODO: why is this seperate from the others? } + +void InstanceSettingsPage::updateThresholds() +{ + auto sysMiB = Sys::getSystemRam() / Sys::mebibyte; + unsigned int maxMem = ui->maxMemSpinBox->value(); + + if (maxMem >= sysMiB) { + ui->labelMaxMemIcon->setText(u8"✘"); + ui->labelMaxMemIcon->setToolTip(tr("Your maximum memory allocation exceeds your system memory capacity.")); + } else if (maxMem > (sysMiB * 0.9)) { + ui->labelMaxMemIcon->setText(u8"⚠"); + ui->labelMaxMemIcon->setToolTip(tr("Your maximum memory allocation approaches your system memory capacity.")); + } else { + ui->labelMaxMemIcon->setText(u8"✔"); + ui->labelMaxMemIcon->setToolTip(""); + } +} diff --git a/launcher/ui/pages/instance/InstanceSettingsPage.h b/launcher/ui/pages/instance/InstanceSettingsPage.h index 97d1296fe..7450188d5 100644 --- a/launcher/ui/pages/instance/InstanceSettingsPage.h +++ b/launcher/ui/pages/instance/InstanceSettingsPage.h @@ -77,10 +77,13 @@ public: virtual bool shouldDisplay() const override; void retranslate() override; + void updateThresholds(); + private slots: void on_javaDetectBtn_clicked(); void on_javaTestBtn_clicked(); void on_javaBrowseBtn_clicked(); + void on_maxMemSpinBox_valueChanged(int i); void applySettings(); void loadSettings(); diff --git a/launcher/ui/pages/instance/InstanceSettingsPage.ui b/launcher/ui/pages/instance/InstanceSettingsPage.ui index 8b3c33702..43488aa2c 100644 --- a/launcher/ui/pages/instance/InstanceSettingsPage.ui +++ b/launcher/ui/pages/instance/InstanceSettingsPage.ui @@ -112,59 +112,29 @@ false - - - + + + - Minimum memory allocation: + PermGen: - - - - The maximum amount of memory Minecraft is allowed to use. - - - MiB - - - 128 - - - 65536 - - - 128 - - - 1024 + + + + Maximum memory allocation: - - - - The amount of memory Minecraft is started with. - - - MiB - - - 128 - - - 65536 - - - 128 - - - 256 + + + + Note: Permgen is set automatically by Java 8 and later - + The amount of memory available to store loaded Java classes. @@ -186,24 +156,67 @@ - - - - PermGen: + + + + The maximum amount of memory Minecraft is allowed to use. + + + MiB + + + 128 + + + 65536 + + + 128 + + + 1024 - - + + - Maximum memory allocation: + Minimum memory allocation: - - + + + + The amount of memory Minecraft is started with. + + + MiB + + + 128 + + + 65536 + + + 128 + + + 256 + + + + + - Note: Permgen is set automatically by Java 8 and later + + + + Qt::AlignCenter + + + maxMemSpinBox From 863a168cb5cb7332ae9782c3967d563f7f98316d Mon Sep 17 00:00:00 2001 From: Sefa Eyeoglu Date: Fri, 11 Nov 2022 15:04:18 +0100 Subject: [PATCH 002/155] feat: raise memory limits to 1TiB Signed-off-by: Sefa Eyeoglu --- launcher/ui/pages/global/JavaPage.ui | 4 ++-- launcher/ui/pages/instance/InstanceSettingsPage.ui | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/launcher/ui/pages/global/JavaPage.ui b/launcher/ui/pages/global/JavaPage.ui index 19e23eba9..734612375 100644 --- a/launcher/ui/pages/global/JavaPage.ui +++ b/launcher/ui/pages/global/JavaPage.ui @@ -57,7 +57,7 @@ 128 - 65536 + 1048576 128 @@ -89,7 +89,7 @@ 128 - 65536 + 1048576 128 diff --git a/launcher/ui/pages/instance/InstanceSettingsPage.ui b/launcher/ui/pages/instance/InstanceSettingsPage.ui index 43488aa2c..2063dc559 100644 --- a/launcher/ui/pages/instance/InstanceSettingsPage.ui +++ b/launcher/ui/pages/instance/InstanceSettingsPage.ui @@ -168,7 +168,7 @@ 128 - 65536 + 1048576 128 @@ -197,7 +197,7 @@ 128 - 65536 + 1048576 128 From cabd887866929103f635a2640589ce95570f8573 Mon Sep 17 00:00:00 2001 From: Sefa Eyeoglu Date: Fri, 11 Nov 2022 15:22:16 +0100 Subject: [PATCH 003/155] feat: use icons to show memory allocation state Signed-off-by: Sefa Eyeoglu --- launcher/ui/pages/global/JavaPage.cpp | 15 ++++++++++++--- .../ui/pages/instance/InstanceSettingsPage.cpp | 15 ++++++++++++--- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/launcher/ui/pages/global/JavaPage.cpp b/launcher/ui/pages/global/JavaPage.cpp index 00c06cff9..81dd4cc12 100644 --- a/launcher/ui/pages/global/JavaPage.cpp +++ b/launcher/ui/pages/global/JavaPage.cpp @@ -196,14 +196,23 @@ void JavaPage::updateThresholds() auto sysMiB = Sys::getSystemRam() / Sys::mebibyte; unsigned int maxMem = ui->maxMemSpinBox->value(); + QString iconName; + if (maxMem >= sysMiB) { - ui->labelMaxMemIcon->setText(u8"✘"); + iconName = "status-bad"; ui->labelMaxMemIcon->setToolTip(tr("Your maximum memory allocation exceeds your system memory capacity.")); } else if (maxMem > (sysMiB * 0.9)) { - ui->labelMaxMemIcon->setText(u8"⚠"); + iconName = "status-yellow"; ui->labelMaxMemIcon->setToolTip(tr("Your maximum memory allocation approaches your system memory capacity.")); } else { - ui->labelMaxMemIcon->setText(u8"✔"); + iconName = "status-good"; ui->labelMaxMemIcon->setToolTip(""); } + + { + auto height = ui->labelMaxMemIcon->fontInfo().pixelSize(); + QIcon icon = APPLICATION->getThemedIcon(iconName); + QPixmap pix = icon.pixmap(height, height); + ui->labelMaxMemIcon->setPixmap(pix); + } } diff --git a/launcher/ui/pages/instance/InstanceSettingsPage.cpp b/launcher/ui/pages/instance/InstanceSettingsPage.cpp index 50039e879..af2ba7c80 100644 --- a/launcher/ui/pages/instance/InstanceSettingsPage.cpp +++ b/launcher/ui/pages/instance/InstanceSettingsPage.cpp @@ -458,14 +458,23 @@ void InstanceSettingsPage::updateThresholds() auto sysMiB = Sys::getSystemRam() / Sys::mebibyte; unsigned int maxMem = ui->maxMemSpinBox->value(); + QString iconName; + if (maxMem >= sysMiB) { - ui->labelMaxMemIcon->setText(u8"✘"); + iconName = "status-bad"; ui->labelMaxMemIcon->setToolTip(tr("Your maximum memory allocation exceeds your system memory capacity.")); } else if (maxMem > (sysMiB * 0.9)) { - ui->labelMaxMemIcon->setText(u8"⚠"); + iconName = "status-yellow"; ui->labelMaxMemIcon->setToolTip(tr("Your maximum memory allocation approaches your system memory capacity.")); } else { - ui->labelMaxMemIcon->setText(u8"✔"); + iconName = "status-good"; ui->labelMaxMemIcon->setToolTip(""); } + + { + auto height = ui->labelMaxMemIcon->fontInfo().pixelSize(); + QIcon icon = APPLICATION->getThemedIcon(iconName); + QPixmap pix = icon.pixmap(height, height); + ui->labelMaxMemIcon->setPixmap(pix); + } } From b57fee1a444bef22f6a0f8f268dc1d11be31a0db Mon Sep 17 00:00:00 2001 From: Sefa Eyeoglu Date: Fri, 11 Nov 2022 15:24:14 +0100 Subject: [PATCH 004/155] fix: swap spin box and state icon Signed-off-by: Sefa Eyeoglu --- launcher/ui/pages/global/JavaPage.ui | 68 +++++------ .../ui/pages/instance/InstanceSettingsPage.ui | 106 +++++++++--------- 2 files changed, 87 insertions(+), 87 deletions(-) diff --git a/launcher/ui/pages/global/JavaPage.ui b/launcher/ui/pages/global/JavaPage.ui index 734612375..6749cbe41 100644 --- a/launcher/ui/pages/global/JavaPage.ui +++ b/launcher/ui/pages/global/JavaPage.ui @@ -44,26 +44,14 @@ Memory - - - - - The maximum amount of memory Minecraft is allowed to use. + + + + + Ma&ximum memory allocation: - - MiB - - - 128 - - - 1048576 - - - 128 - - - 1024 + + maxMemSpinBox @@ -77,6 +65,16 @@ + + + + &Minimum memory allocation: + + + minMemSpinBox + + + @@ -99,23 +97,25 @@ - - - - Ma&ximum memory allocation: + + + + The maximum amount of memory Minecraft is allowed to use. - - maxMemSpinBox + + MiB - - - - - - &Minimum memory allocation: + + 128 - - minMemSpinBox + + 1048576 + + + 128 + + + 1024 @@ -141,7 +141,7 @@ - + diff --git a/launcher/ui/pages/instance/InstanceSettingsPage.ui b/launcher/ui/pages/instance/InstanceSettingsPage.ui index 2063dc559..b064367d1 100644 --- a/launcher/ui/pages/instance/InstanceSettingsPage.ui +++ b/launcher/ui/pages/instance/InstanceSettingsPage.ui @@ -112,7 +112,7 @@ false - + @@ -120,6 +120,13 @@ + + + + Minimum memory allocation: + + + @@ -134,57 +141,6 @@ - - - - The amount of memory available to store loaded Java classes. - - - MiB - - - 64 - - - 999999999 - - - 8 - - - 64 - - - - - - - The maximum amount of memory Minecraft is allowed to use. - - - MiB - - - 128 - - - 1048576 - - - 128 - - - 1024 - - - - - - - Minimum memory allocation: - - - @@ -207,7 +163,51 @@ - + + + + The maximum amount of memory Minecraft is allowed to use. + + + MiB + + + 128 + + + 1048576 + + + 128 + + + 1024 + + + + + + + The amount of memory available to store loaded Java classes. + + + MiB + + + 64 + + + 999999999 + + + 8 + + + 64 + + + + From 30b266622c9457a825d38ba084c9391437a2c87a Mon Sep 17 00:00:00 2001 From: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> Date: Sat, 22 Oct 2022 15:39:53 +0300 Subject: [PATCH 005/155] Add 'Create shortcut' button to instance toolbar Implemented on Windows only rn! Signed-off-by: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> --- launcher/ui/MainWindow.cpp | 86 ++++++++++++++++++++++++++++++++++++++ launcher/ui/MainWindow.h | 2 + 2 files changed, 88 insertions(+) diff --git a/launcher/ui/MainWindow.cpp b/launcher/ui/MainWindow.cpp index 85b00b677..419bb9bd3 100644 --- a/launcher/ui/MainWindow.cpp +++ b/launcher/ui/MainWindow.cpp @@ -237,6 +237,7 @@ public: TranslatedAction actionLaunchInstanceOffline; TranslatedAction actionLaunchInstanceDemo; TranslatedAction actionExportInstance; + TranslatedAction actionCreateInstanceShortcut; QVector all_actions; LabeledToolButton *renameButton = nullptr; @@ -597,6 +598,7 @@ public: actionExportInstance->setEnabled(enabled); actionDeleteInstance->setEnabled(enabled); actionCopyInstance->setEnabled(enabled); + actionCreateInstanceShortcut->setEnabled(enabled); } void createStatusBar(QMainWindow *MainWindow) @@ -735,6 +737,14 @@ public: actionCopyInstance->setIcon(APPLICATION->getThemedIcon("copy")); all_actions.append(&actionCopyInstance); + actionCreateInstanceShortcut = TranslatedAction(MainWindow); + actionCreateInstanceShortcut->setObjectName(QStringLiteral("actionCreateInstanceShortcut")); + actionCreateInstanceShortcut.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Create shortcut")); + actionCreateInstanceShortcut.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Creates a shortcut on your desktop to launch the selected instance.")); + actionCreateInstanceShortcut->setShortcut(QKeySequence(tr("Ctrl+D"))); + //actionCreateInstanceShortcut->setIcon(APPLICATION->getThemedIcon("copy")); // TODO + all_actions.append(&actionCreateInstanceShortcut); + setInstanceActionsEnabled(false); } @@ -783,6 +793,8 @@ public: } } + instanceToolBar->addAction(actionCreateInstanceShortcut); + all_toolbars.append(&instanceToolBar); MainWindow->addToolBar(Qt::RightToolBarArea, instanceToolBar); } @@ -2075,6 +2087,80 @@ void MainWindow::on_actionKillInstance_triggered() } } +#ifdef Q_OS_WIN +#define WIN32_LEAN_AND_MEAN +#include "windows.h" +#include "winnls.h" +#include "shobjidl.h" +#include "objbase.h" +#include "objidl.h" +#include "shlguid.h" +#endif + +void MainWindow::on_actionCreateInstanceShortcut_triggered() +{ + if (m_selectedInstance) + { + auto desktopDir = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation); + if (desktopDir.isEmpty()) { + // TODO come up with an alternative solution (open "save file" dialog) + QMessageBox::critical(this, tr("Create instance shortcut"), tr("Couldn't find desktop!")); + return; + } + +#if defined(Q_OS_WIN) + // Windows + WCHAR wsz[MAX_PATH]; + + // ...yes, you need to initialize the entire COM stack to make a shortcut in Windows. + // I hate it. + CoInitialize(nullptr); + + HRESULT hres; + IShellLink* psl; + + hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*)&psl); + if (SUCCEEDED(hres)) + { + IPersistFile* ppf; + + QApplication::applicationFilePath().left(MAX_PATH - 1).toWCharArray(wsz); + psl->SetPath(wsz); + + wmemset(wsz, 0, MAX_PATH); + QStringLiteral("--launch %1").arg(m_selectedInstance->id()).left(MAX_PATH - 1).toWCharArray(wsz); + psl->SetArguments(wsz); + + // TODO set icon + + hres = psl->QueryInterface(IID_IPersistFile, (LPVOID*)&ppf); + + if (SUCCEEDED(hres)) + { + wmemset(wsz, 0, MAX_PATH); + + desktopDir + .append('/') + .append(QStringLiteral("%1.lnk").arg(m_selectedInstance->name())) + .left(MAX_PATH - 1).toWCharArray(wsz); + + hres = ppf->Save(wsz, TRUE); + ppf->Release(); + } + psl->Release(); + } + + CoUninitialize(); +#elif defined(Q_OS_LINUX) + // Linux +#elif defined(Q_OS_MACOS) + // macOSX + // TODO actually write this path + QMessageBox::critical(this, tr("Create instance shortcut"), tr("Not supported on macOSX yet!")); +#endif + } +} + void MainWindow::taskEnd() { QObject *sender = QObject::sender(); diff --git a/launcher/ui/MainWindow.h b/launcher/ui/MainWindow.h index f9d1f1c73..b23ba1460 100644 --- a/launcher/ui/MainWindow.h +++ b/launcher/ui/MainWindow.h @@ -157,6 +157,8 @@ private slots: void on_actionEditInstance_triggered(); + void on_actionCreateInstanceShortcut_triggered(); + void taskEnd(); /** From 70768189bae0f4d5cfb24b57347cf7207dfc5496 Mon Sep 17 00:00:00 2001 From: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> Date: Sat, 22 Oct 2022 17:56:27 +0300 Subject: [PATCH 006/155] Windows: implement FS::createShortcut Signed-off-by: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> --- launcher/FileSystem.cpp | 145 +++++++++++++++++++++++++++++++------ launcher/FileSystem.h | 5 ++ launcher/ui/MainWindow.cpp | 88 +++++++--------------- 3 files changed, 154 insertions(+), 84 deletions(-) diff --git a/launcher/FileSystem.cpp b/launcher/FileSystem.cpp index 4a8f4bd3d..90f0313f6 100644 --- a/launcher/FileSystem.cpp +++ b/launcher/FileSystem.cpp @@ -49,6 +49,7 @@ #include "StringUtils.h" #if defined Q_OS_WIN32 +#define WIN32_LEAN_AND_MEAN #include #include #include @@ -339,12 +340,12 @@ QString getDesktopDir() } // Cross-platform Shortcut creation -bool createShortCut(QString location, QString dest, QStringList args, QString name, QString icon) +bool createShortcut(QString destination, QString target, QStringList args, QString name, QString icon) { #if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) - location = PathCombine(location, name + ".desktop"); + destination = PathCombine(destination, name + ".desktop"); - QFile f(location); + QFile f(destination); f.open(QIODevice::WriteOnly | QIODevice::Text); QTextStream stream(&f); @@ -356,10 +357,13 @@ bool createShortCut(QString location, QString dest, QStringList args, QString na << "\n"; stream << "Type=Application" << "\n"; - stream << "TryExec=" << dest.toLocal8Bit() << "\n"; - stream << "Exec=" << dest.toLocal8Bit() << argstring.toLocal8Bit() << "\n"; + stream << "TryExec=" << target.toLocal8Bit() << "\n"; + stream << "Exec=" << target.toLocal8Bit() << argstring.toLocal8Bit() << "\n"; stream << "Name=" << name.toLocal8Bit() << "\n"; - stream << "Icon=" << icon.toLocal8Bit() << "\n"; + if (!icon.isEmpty()) + { + stream << "Icon=" << icon.toLocal8Bit() << "\n"; + } stream.flush(); f.close(); @@ -368,24 +372,121 @@ bool createShortCut(QString location, QString dest, QStringList args, QString na return true; #elif defined Q_OS_WIN - // TODO: Fix - // QFile file(PathCombine(location, name + ".lnk")); - // WCHAR *file_w; - // WCHAR *dest_w; - // WCHAR *args_w; - // file.fileName().toWCharArray(file_w); - // dest.toWCharArray(dest_w); + QFileInfo targetInfo(target); - // QString argStr; - // for (int i = 0; i < args.count(); i++) - // { - // argStr.append(args[i]); - // argStr.append(" "); - // } - // argStr.toWCharArray(args_w); + if (!targetInfo.exists()) + { + qWarning() << "Target file does not exist!"; + return false; + } - // return SUCCEEDED(CreateLink(file_w, dest_w, args_w)); - return false; + target = targetInfo.absoluteFilePath(); + + if (target.length() >= MAX_PATH) + { + qWarning() << "Target file path is too long!"; + return false; + } + + if (!icon.isEmpty() && icon.length() >= MAX_PATH) + { + qWarning() << "Icon path is too long!"; + return false; + } + + destination += ".lnk"; + + if (destination.length() >= MAX_PATH) + { + qWarning() << "Destination path is too long!"; + return false; + } + + QString argStr; + int argCount = args.count(); + for (int i = 0; i < argCount; i++) + { + if (args[i].contains(' ')) + { + argStr.append('"').append(args[i]).append('"'); + } + else + { + argStr.append(args[i]); + } + + if (i < argCount - 1) + { + argStr.append(" "); + } + } + + if (argStr.length() >= MAX_PATH) + { + qWarning() << "Arguments string is too long!"; + return false; + } + + WCHAR wsz[MAX_PATH]; + + // ...yes, you need to initialize the entire COM stack to make a shortcut in Windows + CoInitialize(nullptr); + + HRESULT hres; + IShellLink* psl; + + hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*)&psl); + if (SUCCEEDED(hres)) + { + wmemset(wsz, 0, MAX_PATH); + target.toWCharArray(wsz); + psl->SetPath(wsz); + + wmemset(wsz, 0, MAX_PATH); + argStr.toWCharArray(wsz); + psl->SetArguments(wsz); + + wmemset(wsz, 0, MAX_PATH); + targetInfo.absolutePath().toWCharArray(wsz); + psl->SetWorkingDirectory(wsz); + + if (!icon.isEmpty()) + { + wmemset(wsz, 0, MAX_PATH); + icon.toWCharArray(wsz); + psl->SetIconLocation(wsz, 0); + } + + IPersistFile* ppf; + hres = psl->QueryInterface(IID_IPersistFile, (LPVOID*)&ppf); + if (SUCCEEDED(hres)) + { + wmemset(wsz, 0, MAX_PATH); + destination.toWCharArray(wsz); + hres = ppf->Save(wsz, TRUE); + if (FAILED(hres)) + { + qWarning() << "IPresistFile->Save() failed"; + qWarning() << "hres = " << hres; + } + ppf->Release(); + } + else + { + qWarning() << "Failed to query IPersistFile interface from IShellLink instance"; + qWarning() << "hres = " << hres; + } + psl->Release(); + } + else + { + qWarning() << "Failed to create IShellLink instance"; + qWarning() << "hres = " << hres; + } + + CoUninitialize(); + + return SUCCEEDED(hres); #else qWarning("Desktop Shortcuts not supported on your platform!"); return false; diff --git a/launcher/FileSystem.h b/launcher/FileSystem.h index b7e175fdf..23cc575b8 100644 --- a/launcher/FileSystem.h +++ b/launcher/FileSystem.h @@ -156,4 +156,9 @@ QString getDesktopDir(); // Overrides one folder with the contents of another, preserving items exclusive to the first folder // Equivalent to doing QDir::rename, but allowing for overrides bool overrideFolder(QString overwritten_path, QString override_path); + +/** + * Creates a shortcut to the specified target file at the specified destination path. + */ +bool createShortcut(QString destination, QString target, QStringList args, QString name, QString icon); } diff --git a/launcher/ui/MainWindow.cpp b/launcher/ui/MainWindow.cpp index 419bb9bd3..1ad9713a9 100644 --- a/launcher/ui/MainWindow.cpp +++ b/launcher/ui/MainWindow.cpp @@ -39,6 +39,7 @@ #include "Application.h" #include "BuildConfig.h" +#include "FileSystem.h" #include "MainWindow.h" @@ -739,9 +740,9 @@ public: actionCreateInstanceShortcut = TranslatedAction(MainWindow); actionCreateInstanceShortcut->setObjectName(QStringLiteral("actionCreateInstanceShortcut")); - actionCreateInstanceShortcut.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Create shortcut")); + actionCreateInstanceShortcut.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Create Shortcut")); actionCreateInstanceShortcut.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Creates a shortcut on your desktop to launch the selected instance.")); - actionCreateInstanceShortcut->setShortcut(QKeySequence(tr("Ctrl+D"))); + //actionCreateInstanceShortcut->setShortcut(QKeySequence(tr("Ctrl+D"))); // TODO //actionCreateInstanceShortcut->setIcon(APPLICATION->getThemedIcon("copy")); // TODO all_actions.append(&actionCreateInstanceShortcut); @@ -793,7 +794,7 @@ public: } } - instanceToolBar->addAction(actionCreateInstanceShortcut); + instanceToolBar->addAction(actionCreateInstanceShortcut); // TODO find better position for this all_toolbars.append(&instanceToolBar); MainWindow->addToolBar(Qt::RightToolBarArea, instanceToolBar); @@ -2087,76 +2088,39 @@ void MainWindow::on_actionKillInstance_triggered() } } -#ifdef Q_OS_WIN -#define WIN32_LEAN_AND_MEAN -#include "windows.h" -#include "winnls.h" -#include "shobjidl.h" -#include "objbase.h" -#include "objidl.h" -#include "shlguid.h" -#endif - void MainWindow::on_actionCreateInstanceShortcut_triggered() { if (m_selectedInstance) { - auto desktopDir = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation); - if (desktopDir.isEmpty()) { + auto desktopPath = FS::getDesktopDir(); + if (desktopPath.isEmpty()) { // TODO come up with an alternative solution (open "save file" dialog) - QMessageBox::critical(this, tr("Create instance shortcut"), tr("Couldn't find desktop!")); + QMessageBox::critical(this, tr("Create instance shortcut"), tr("Couldn't find desktop?!")); return; } -#if defined(Q_OS_WIN) - // Windows - WCHAR wsz[MAX_PATH]; - - // ...yes, you need to initialize the entire COM stack to make a shortcut in Windows. - // I hate it. - CoInitialize(nullptr); - - HRESULT hres; - IShellLink* psl; - - hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*)&psl); - if (SUCCEEDED(hres)) - { - IPersistFile* ppf; - - QApplication::applicationFilePath().left(MAX_PATH - 1).toWCharArray(wsz); - psl->SetPath(wsz); - - wmemset(wsz, 0, MAX_PATH); - QStringLiteral("--launch %1").arg(m_selectedInstance->id()).left(MAX_PATH - 1).toWCharArray(wsz); - psl->SetArguments(wsz); - - // TODO set icon - - hres = psl->QueryInterface(IID_IPersistFile, (LPVOID*)&ppf); - - if (SUCCEEDED(hres)) - { - wmemset(wsz, 0, MAX_PATH); - - desktopDir - .append('/') - .append(QStringLiteral("%1.lnk").arg(m_selectedInstance->name())) - .left(MAX_PATH - 1).toWCharArray(wsz); - - hres = ppf->Save(wsz, TRUE); - ppf->Release(); - } - psl->Release(); - } - - CoUninitialize(); -#elif defined(Q_OS_LINUX) - // Linux -#elif defined(Q_OS_MACOS) +#if defined(Q_OS_MACOS) // macOSX // TODO actually write this path QMessageBox::critical(this, tr("Create instance shortcut"), tr("Not supported on macOSX yet!")); +#else + QString iconPath; + +#if defined(Q_OS_WIN) + // TODO + // need to convert icon to ICO format and save it somewhere... + iconPath = ""; +#elif defined(Q_OS_UNIX) + iconPath = ""; // TODO get instance icon path +#endif + if (FS::createShortcut(FS::PathCombine(desktopPath, m_selectedInstance->name()), + QApplication::applicationFilePath(), { "--launch", m_selectedInstance->id() }, m_selectedInstance->name(), iconPath)) { + QMessageBox::information(this, tr("Create instance shortcut"), tr("Created a shortcut to this instance on your desktop!")); + } + else + { + QMessageBox::critical(this, tr("Create instance shortcut"), tr("Failed to create instance shortcut!")); + } #endif } } From f12117c532de4bdbf74968cf173d1c288a7e426a Mon Sep 17 00:00:00 2001 From: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> Date: Tue, 25 Oct 2022 17:37:30 +0300 Subject: [PATCH 007/155] [UNTESTED] Linux: add icons to shortcuts Signed-off-by: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> --- launcher/ui/MainWindow.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/launcher/ui/MainWindow.cpp b/launcher/ui/MainWindow.cpp index 1ad9713a9..8f2196f2f 100644 --- a/launcher/ui/MainWindow.cpp +++ b/launcher/ui/MainWindow.cpp @@ -2104,6 +2104,8 @@ void MainWindow::on_actionCreateInstanceShortcut_triggered() // TODO actually write this path QMessageBox::critical(this, tr("Create instance shortcut"), tr("Not supported on macOSX yet!")); #else + auto icon = APPLICATION->icons()->icon(m_selectedInstance->iconKey()); + QString iconPath; #if defined(Q_OS_WIN) @@ -2111,7 +2113,7 @@ void MainWindow::on_actionCreateInstanceShortcut_triggered() // need to convert icon to ICO format and save it somewhere... iconPath = ""; #elif defined(Q_OS_UNIX) - iconPath = ""; // TODO get instance icon path + iconPath = icon->getFilePath(); #endif if (FS::createShortcut(FS::PathCombine(desktopPath, m_selectedInstance->name()), QApplication::applicationFilePath(), { "--launch", m_selectedInstance->id() }, m_selectedInstance->name(), iconPath)) { From 6ae3b183fdb1f6e4887617fc7230d52c803e63fd Mon Sep 17 00:00:00 2001 From: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> Date: Tue, 25 Oct 2022 21:18:53 +0300 Subject: [PATCH 008/155] Remove unnessecary "is defined" check Signed-off-by: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> --- launcher/ui/MainWindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/launcher/ui/MainWindow.cpp b/launcher/ui/MainWindow.cpp index 8f2196f2f..34c51ec67 100644 --- a/launcher/ui/MainWindow.cpp +++ b/launcher/ui/MainWindow.cpp @@ -2112,7 +2112,7 @@ void MainWindow::on_actionCreateInstanceShortcut_triggered() // TODO // need to convert icon to ICO format and save it somewhere... iconPath = ""; -#elif defined(Q_OS_UNIX) +#else iconPath = icon->getFilePath(); #endif if (FS::createShortcut(FS::PathCombine(desktopPath, m_selectedInstance->name()), From b83f9be1bd65f784bbed603e550fbe9f650b0367 Mon Sep 17 00:00:00 2001 From: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> Date: Fri, 28 Oct 2022 15:46:54 +0300 Subject: [PATCH 009/155] Add missing fail check for CoInitialize Add a few comments Signed-off-by: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> --- launcher/FileSystem.cpp | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/launcher/FileSystem.cpp b/launcher/FileSystem.cpp index 90f0313f6..587753a0e 100644 --- a/launcher/FileSystem.cpp +++ b/launcher/FileSystem.cpp @@ -427,14 +427,21 @@ bool createShortcut(QString destination, QString target, QStringList args, QStri return false; } + HRESULT hres; + + // ...yes, you need to initialize the entire COM stack just to make a shortcut + hres = CoInitialize(nullptr); + if (FAILED(hres)) + { + qWarning() << "Failed to initialize COM!"; + return false; + } + WCHAR wsz[MAX_PATH]; - // ...yes, you need to initialize the entire COM stack to make a shortcut in Windows - CoInitialize(nullptr); - - HRESULT hres; IShellLink* psl; + // create an IShellLink instance - this stores the shortcut's attributes hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*)&psl); if (SUCCEEDED(hres)) { @@ -448,7 +455,7 @@ bool createShortcut(QString destination, QString target, QStringList args, QStri wmemset(wsz, 0, MAX_PATH); targetInfo.absolutePath().toWCharArray(wsz); - psl->SetWorkingDirectory(wsz); + psl->SetWorkingDirectory(wsz); // "Starts in" attribute if (!icon.isEmpty()) { @@ -457,6 +464,8 @@ bool createShortcut(QString destination, QString target, QStringList args, QStri psl->SetIconLocation(wsz, 0); } + // query an IPersistFile interface from our IShellLink instance + // this is the interface that will actually let us save the shortcut to disk! IPersistFile* ppf; hres = psl->QueryInterface(IID_IPersistFile, (LPVOID*)&ppf); if (SUCCEEDED(hres)) @@ -484,6 +493,7 @@ bool createShortcut(QString destination, QString target, QStringList args, QStri qWarning() << "hres = " << hres; } + // go away COM, nobody likes you CoUninitialize(); return SUCCEEDED(hres); From 4d4dfab38869bca82626e171336cbe8f7c89a1a1 Mon Sep 17 00:00:00 2001 From: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> Date: Fri, 28 Oct 2022 17:42:29 +0300 Subject: [PATCH 010/155] Windows: add instance icon to shortcut Signed-off-by: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> --- launcher/ui/MainWindow.cpp | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/launcher/ui/MainWindow.cpp b/launcher/ui/MainWindow.cpp index 34c51ec67..9743c8224 100644 --- a/launcher/ui/MainWindow.cpp +++ b/launcher/ui/MainWindow.cpp @@ -2107,11 +2107,28 @@ void MainWindow::on_actionCreateInstanceShortcut_triggered() auto icon = APPLICATION->icons()->icon(m_selectedInstance->iconKey()); QString iconPath; + bool iconGenerated = false; #if defined(Q_OS_WIN) - // TODO - // need to convert icon to ICO format and save it somewhere... - iconPath = ""; + iconPath = FS::PathCombine(m_selectedInstance->instanceRoot(), "icon.ico"); + + QFile iconFile(iconPath); + if (!iconFile.open(QFile::WriteOnly)) + { + QMessageBox::critical(this, tr("Create instance shortcut"), tr("Failed to create instance shortcut!")); + return; + } + + if (!icon->icon().pixmap(64, 64).save(&iconFile, "ICO")) + { + iconFile.close(); + iconFile.remove(); + QMessageBox::critical(this, tr("Create instance shortcut"), tr("Failed to create instance shortcut!")); + return; + } + + iconFile.close(); + iconGenerated = true; #else iconPath = icon->getFilePath(); #endif @@ -2121,6 +2138,10 @@ void MainWindow::on_actionCreateInstanceShortcut_triggered() } else { + if (iconGenerated) + { + QFile::remove(iconPath); + } QMessageBox::critical(this, tr("Create instance shortcut"), tr("Failed to create instance shortcut!")); } #endif From cc5f82bfac162becf55dfcb015f55be3c833bc32 Mon Sep 17 00:00:00 2001 From: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> Date: Fri, 28 Oct 2022 21:11:51 +0300 Subject: [PATCH 011/155] Windows: fix window icon being replaced Dunno why it happens but the fix was literally 2 lines, so whatever I guess Signed-off-by: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> --- launcher/ui/MainWindow.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/launcher/ui/MainWindow.cpp b/launcher/ui/MainWindow.cpp index 9743c8224..a87da3621 100644 --- a/launcher/ui/MainWindow.cpp +++ b/launcher/ui/MainWindow.cpp @@ -2112,6 +2112,10 @@ void MainWindow::on_actionCreateInstanceShortcut_triggered() #if defined(Q_OS_WIN) iconPath = FS::PathCombine(m_selectedInstance->instanceRoot(), "icon.ico"); + // part of fix for weird bug involving the window icon being replaced + // dunno why it happens, but this 2-line fix seems to be enough, so w/e + auto appIcon = QGuiApplication::windowIcon(); + QFile iconFile(iconPath); if (!iconFile.open(QFile::WriteOnly)) { @@ -2129,6 +2133,9 @@ void MainWindow::on_actionCreateInstanceShortcut_triggered() iconFile.close(); iconGenerated = true; + + // restore original window icon + QGuiApplication::setWindowIcon(appIcon); #else iconPath = icon->getFilePath(); #endif From 487e352642c4430f57643b53a8e9cd3d04edfeb8 Mon Sep 17 00:00:00 2001 From: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> Date: Fri, 4 Nov 2022 22:04:42 +0200 Subject: [PATCH 012/155] Fix nested #if directive Signed-off-by: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> --- launcher/ui/MainWindow.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/launcher/ui/MainWindow.cpp b/launcher/ui/MainWindow.cpp index a87da3621..15fdd6f2c 100644 --- a/launcher/ui/MainWindow.cpp +++ b/launcher/ui/MainWindow.cpp @@ -2103,7 +2103,8 @@ void MainWindow::on_actionCreateInstanceShortcut_triggered() // macOSX // TODO actually write this path QMessageBox::critical(this, tr("Create instance shortcut"), tr("Not supported on macOSX yet!")); -#else + return; +#endif auto icon = APPLICATION->icons()->icon(m_selectedInstance->iconKey()); QString iconPath; @@ -2151,7 +2152,6 @@ void MainWindow::on_actionCreateInstanceShortcut_triggered() } QMessageBox::critical(this, tr("Create instance shortcut"), tr("Failed to create instance shortcut!")); } -#endif } } From 6043444e4e11801e45ad888182c99d6f4e4e5ddc Mon Sep 17 00:00:00 2001 From: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> Date: Wed, 9 Nov 2022 21:02:40 +0200 Subject: [PATCH 013/155] Apply suggestions from code review Co-authored-by: Sefa Eyeoglu Signed-off-by: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> --- launcher/FileSystem.cpp | 2 +- launcher/ui/MainWindow.cpp | 12 +++++------- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/launcher/FileSystem.cpp b/launcher/FileSystem.cpp index 587753a0e..5a5390935 100644 --- a/launcher/FileSystem.cpp +++ b/launcher/FileSystem.cpp @@ -342,7 +342,7 @@ QString getDesktopDir() // Cross-platform Shortcut creation bool createShortcut(QString destination, QString target, QStringList args, QString name, QString icon) { -#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) +#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) || defined(Q_OS_OPENBSD) destination = PathCombine(destination, name + ".desktop"); QFile f(destination); diff --git a/launcher/ui/MainWindow.cpp b/launcher/ui/MainWindow.cpp index 15fdd6f2c..cd3c1b5b0 100644 --- a/launcher/ui/MainWindow.cpp +++ b/launcher/ui/MainWindow.cpp @@ -2099,23 +2099,21 @@ void MainWindow::on_actionCreateInstanceShortcut_triggered() return; } -#if defined(Q_OS_MACOS) - // macOSX - // TODO actually write this path - QMessageBox::critical(this, tr("Create instance shortcut"), tr("Not supported on macOSX yet!")); - return; +#ifdef Q_OS_MACOS + QMessageBox::critical(this, tr("Create instance shortcut"), tr("Not supported on macOS yet!")); + return; #endif auto icon = APPLICATION->icons()->icon(m_selectedInstance->iconKey()); QString iconPath; bool iconGenerated = false; -#if defined(Q_OS_WIN) +#ifdef Q_OS_WIN iconPath = FS::PathCombine(m_selectedInstance->instanceRoot(), "icon.ico"); // part of fix for weird bug involving the window icon being replaced // dunno why it happens, but this 2-line fix seems to be enough, so w/e - auto appIcon = QGuiApplication::windowIcon(); + auto appIcon = Application::getThemedIcon("logo"); QFile iconFile(iconPath); if (!iconFile.open(QFile::WriteOnly)) From 9be48f1dc44dc764d2131c559780624908ff636d Mon Sep 17 00:00:00 2001 From: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> Date: Wed, 9 Nov 2022 21:55:13 +0200 Subject: [PATCH 014/155] this ain't static, falco Signed-off-by: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> --- launcher/ui/MainWindow.cpp | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/launcher/ui/MainWindow.cpp b/launcher/ui/MainWindow.cpp index cd3c1b5b0..ff1982ce8 100644 --- a/launcher/ui/MainWindow.cpp +++ b/launcher/ui/MainWindow.cpp @@ -2113,7 +2113,7 @@ void MainWindow::on_actionCreateInstanceShortcut_triggered() // part of fix for weird bug involving the window icon being replaced // dunno why it happens, but this 2-line fix seems to be enough, so w/e - auto appIcon = Application::getThemedIcon("logo"); + auto appIcon = APPLICATION->getThemedIcon("logo"); QFile iconFile(iconPath); if (!iconFile.open(QFile::WriteOnly)) @@ -2121,20 +2121,22 @@ void MainWindow::on_actionCreateInstanceShortcut_triggered() QMessageBox::critical(this, tr("Create instance shortcut"), tr("Failed to create instance shortcut!")); return; } + bool success = icon->icon().pixmap(64, 64).save(&iconFile, "ICO"); + iconFile.close(); - if (!icon->icon().pixmap(64, 64).save(&iconFile, "ICO")) + // restore original window icon + QGuiApplication::setWindowIcon(appIcon); + + if (success) + { + iconGenerated = true; + } + else { - iconFile.close(); iconFile.remove(); QMessageBox::critical(this, tr("Create instance shortcut"), tr("Failed to create instance shortcut!")); return; } - - iconFile.close(); - iconGenerated = true; - - // restore original window icon - QGuiApplication::setWindowIcon(appIcon); #else iconPath = icon->getFilePath(); #endif From dbe0553b4a6100d8269f749cc4eb372e5a30cb3b Mon Sep 17 00:00:00 2001 From: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> Date: Wed, 9 Nov 2022 21:56:46 +0200 Subject: [PATCH 015/155] Move addAction call above left-align loop Signed-off-by: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> --- launcher/ui/MainWindow.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/launcher/ui/MainWindow.cpp b/launcher/ui/MainWindow.cpp index ff1982ce8..0a846b59b 100644 --- a/launcher/ui/MainWindow.cpp +++ b/launcher/ui/MainWindow.cpp @@ -784,6 +784,8 @@ public: instanceToolBar->addAction(actionCopyInstance); instanceToolBar->addAction(actionDeleteInstance); + instanceToolBar->addAction(actionCreateInstanceShortcut); // TODO find better position for this + QLayout * lay = instanceToolBar->layout(); for(int i = 0; i < lay->count(); i++) { @@ -794,8 +796,6 @@ public: } } - instanceToolBar->addAction(actionCreateInstanceShortcut); // TODO find better position for this - all_toolbars.append(&instanceToolBar); MainWindow->addToolBar(Qt::RightToolBarArea, instanceToolBar); } From 7e5076b06891f28c1b2e27befd33005d400c49c9 Mon Sep 17 00:00:00 2001 From: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> Date: Sat, 12 Nov 2022 20:13:59 +0200 Subject: [PATCH 016/155] Linux: fix path shortcut is written to Co-authored-by: flow Signed-off-by: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> --- launcher/FileSystem.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/launcher/FileSystem.cpp b/launcher/FileSystem.cpp index 5a5390935..ddd1a6e55 100644 --- a/launcher/FileSystem.cpp +++ b/launcher/FileSystem.cpp @@ -343,7 +343,7 @@ QString getDesktopDir() bool createShortcut(QString destination, QString target, QStringList args, QString name, QString icon) { #if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) || defined(Q_OS_OPENBSD) - destination = PathCombine(destination, name + ".desktop"); + destination += ".desktop"; QFile f(destination); f.open(QIODevice::WriteOnly | QIODevice::Text); From f7d7d76ee879c3bdd539e5c8c956cbd2c7328bf0 Mon Sep 17 00:00:00 2001 From: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> Date: Sat, 12 Nov 2022 20:36:49 +0200 Subject: [PATCH 017/155] Mac: now supported! [UNTESTED] Signed-off-by: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> --- launcher/FileSystem.cpp | 26 +++++++++++++++++++++++++- launcher/ui/MainWindow.cpp | 15 ++++++++++++++- libraries/tomlplusplus | 2 +- 3 files changed, 40 insertions(+), 3 deletions(-) diff --git a/launcher/FileSystem.cpp b/launcher/FileSystem.cpp index ddd1a6e55..221395bed 100644 --- a/launcher/FileSystem.cpp +++ b/launcher/FileSystem.cpp @@ -342,7 +342,31 @@ QString getDesktopDir() // Cross-platform Shortcut creation bool createShortcut(QString destination, QString target, QStringList args, QString name, QString icon) { -#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) || defined(Q_OS_OPENBSD) +#if defined(Q_OS_MACOS) + destination += ".sh"; + + QFile f(destination); + f.open(QIODevice::WriteOnly | QIODevice::Text); + QTextStream stream(&f); + + QString argstring; + if (!args.empty()) + argstring = " \"" + args.join("\" \"") + "\""; + + stream << "#!/bin/bash" + << "\n"; + stream << target + << " " + << argstring + << "\n"; + + stream.flush(); + f.close(); + + f.setPermissions(f.permissions() | QFileDevice::ExeOwner | QFileDevice::ExeGroup | QFileDevice::ExeOther); + + return true; +#elif defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) || defined(Q_OS_OPENBSD) destination += ".desktop"; QFile f(destination); diff --git a/launcher/ui/MainWindow.cpp b/launcher/ui/MainWindow.cpp index 0a846b59b..02f602335 100644 --- a/launcher/ui/MainWindow.cpp +++ b/launcher/ui/MainWindow.cpp @@ -2100,7 +2100,20 @@ void MainWindow::on_actionCreateInstanceShortcut_triggered() } #ifdef Q_OS_MACOS - QMessageBox::critical(this, tr("Create instance shortcut"), tr("Not supported on macOS yet!")); + // handle macOS bundle weirdness + QFileInfo appFileInfo(QApplication::applicationFilePath())); + QString appName = appFileInfo.baseName(); + QString exeName = FS::PathCombine(appFileInfo.filePath(), "Contents/MacOS/" + appName); + + if (FS::createShortcut(FS::PathCombine(desktopPath, m_selectedInstance->name()), + exeName, { "--launch", m_selectedInstance->id() }, m_selectedInstance->name(), "")) { + QMessageBox::information(this, tr("Create instance shortcut"), tr("Created a shortcut to this instance on your desktop!")); + } + else + { + QMessageBox::critical(this, tr("Create instance shortcut"), tr("Failed to create instance shortcut!")); + } + return; #endif auto icon = APPLICATION->icons()->icon(m_selectedInstance->iconKey()); diff --git a/libraries/tomlplusplus b/libraries/tomlplusplus index cc741c9f5..4b166b69f 160000 --- a/libraries/tomlplusplus +++ b/libraries/tomlplusplus @@ -1 +1 @@ -Subproject commit cc741c9f5f2a62856a2a2e9e275f61eb0591c09c +Subproject commit 4b166b69f28e70a416a1a04a98f365d2aeb90de8 From b813c867b505f0c1ec8125fde9916d6252cd4485 Mon Sep 17 00:00:00 2001 From: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> Date: Sat, 12 Nov 2022 20:41:52 +0200 Subject: [PATCH 018/155] refactor #if checks Signed-off-by: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> --- launcher/FileSystem.cpp | 2 +- launcher/ui/MainWindow.cpp | 46 ++++++++++++++++++-------------------- 2 files changed, 23 insertions(+), 25 deletions(-) diff --git a/launcher/FileSystem.cpp b/launcher/FileSystem.cpp index 221395bed..7a1861e73 100644 --- a/launcher/FileSystem.cpp +++ b/launcher/FileSystem.cpp @@ -395,7 +395,7 @@ bool createShortcut(QString destination, QString target, QStringList args, QStri f.setPermissions(f.permissions() | QFileDevice::ExeOwner | QFileDevice::ExeGroup | QFileDevice::ExeOther); return true; -#elif defined Q_OS_WIN +#elif defined(Q_OS_WIN) QFileInfo targetInfo(target); if (!targetInfo.exists()) diff --git a/launcher/ui/MainWindow.cpp b/launcher/ui/MainWindow.cpp index 02f602335..8e8a7c56a 100644 --- a/launcher/ui/MainWindow.cpp +++ b/launcher/ui/MainWindow.cpp @@ -2099,13 +2099,13 @@ void MainWindow::on_actionCreateInstanceShortcut_triggered() return; } -#ifdef Q_OS_MACOS +#if defined(Q_OS_MACOS) // handle macOS bundle weirdness QFileInfo appFileInfo(QApplication::applicationFilePath())); QString appName = appFileInfo.baseName(); QString exeName = FS::PathCombine(appFileInfo.filePath(), "Contents/MacOS/" + appName); - if (FS::createShortcut(FS::PathCombine(desktopPath, m_selectedInstance->name()), + if (FS::createShortcut(FS::PathCombine(desktopPath, m_selectedInstance->name()), exeName, { "--launch", m_selectedInstance->id() }, m_selectedInstance->name(), "")) { QMessageBox::information(this, tr("Create instance shortcut"), tr("Created a shortcut to this instance on your desktop!")); } @@ -2113,17 +2113,22 @@ void MainWindow::on_actionCreateInstanceShortcut_triggered() { QMessageBox::critical(this, tr("Create instance shortcut"), tr("Failed to create instance shortcut!")); } - - return; -#endif +#elif defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) || defined(Q_OS_OPENBSD) auto icon = APPLICATION->icons()->icon(m_selectedInstance->iconKey()); - - QString iconPath; - bool iconGenerated = false; - -#ifdef Q_OS_WIN - iconPath = FS::PathCombine(m_selectedInstance->instanceRoot(), "icon.ico"); - + + if (FS::createShortcut(FS::PathCombine(desktopPath, m_selectedInstance->name()), + QApplication::applicationFilePath(), { "--launch", m_selectedInstance->id() }, m_selectedInstance->name(), icon->getFilePath())) { + QMessageBox::information(this, tr("Create instance shortcut"), tr("Created a shortcut to this instance on your desktop!")); + } + else + { + QMessageBox::critical(this, tr("Create instance shortcut"), tr("Failed to create instance shortcut!")); + } +#elif defined(Q_OS_WIN) + auto icon = APPLICATION->icons()->icon(m_selectedInstance->iconKey()); + + QString iconPath = FS::PathCombine(m_selectedInstance->instanceRoot(), "icon.ico"); + // part of fix for weird bug involving the window icon being replaced // dunno why it happens, but this 2-line fix seems to be enough, so w/e auto appIcon = APPLICATION->getThemedIcon("logo"); @@ -2140,31 +2145,24 @@ void MainWindow::on_actionCreateInstanceShortcut_triggered() // restore original window icon QGuiApplication::setWindowIcon(appIcon); - if (success) - { - iconGenerated = true; - } - else + if (!success) { iconFile.remove(); QMessageBox::critical(this, tr("Create instance shortcut"), tr("Failed to create instance shortcut!")); return; } -#else - iconPath = icon->getFilePath(); -#endif + if (FS::createShortcut(FS::PathCombine(desktopPath, m_selectedInstance->name()), QApplication::applicationFilePath(), { "--launch", m_selectedInstance->id() }, m_selectedInstance->name(), iconPath)) { QMessageBox::information(this, tr("Create instance shortcut"), tr("Created a shortcut to this instance on your desktop!")); } else { - if (iconGenerated) - { - QFile::remove(iconPath); - } QMessageBox::critical(this, tr("Create instance shortcut"), tr("Failed to create instance shortcut!")); } +#else + QMessageBox::critical(this, tr("Create instance shortcut"), tr("Not supported on your platform!")); +#endif } } From 45ce72593ac29e54311219e71d47b044eda14b14 Mon Sep 17 00:00:00 2001 From: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> Date: Sat, 12 Nov 2022 20:43:58 +0200 Subject: [PATCH 019/155] Windows: remove icon if shortcut creation fails Signed-off-by: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> --- launcher/ui/MainWindow.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/launcher/ui/MainWindow.cpp b/launcher/ui/MainWindow.cpp index 8e8a7c56a..3f99ac99d 100644 --- a/launcher/ui/MainWindow.cpp +++ b/launcher/ui/MainWindow.cpp @@ -2158,6 +2158,7 @@ void MainWindow::on_actionCreateInstanceShortcut_triggered() } else { + iconFile.remove(); QMessageBox::critical(this, tr("Create instance shortcut"), tr("Failed to create instance shortcut!")); } #else From 5322155b19e68b44e879512cf46ee152045dc1b1 Mon Sep 17 00:00:00 2001 From: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> Date: Sat, 12 Nov 2022 20:48:21 +0200 Subject: [PATCH 020/155] Mac: fix build Signed-off-by: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> --- launcher/ui/MainWindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/launcher/ui/MainWindow.cpp b/launcher/ui/MainWindow.cpp index 3f99ac99d..aedd9e4f5 100644 --- a/launcher/ui/MainWindow.cpp +++ b/launcher/ui/MainWindow.cpp @@ -2101,7 +2101,7 @@ void MainWindow::on_actionCreateInstanceShortcut_triggered() #if defined(Q_OS_MACOS) // handle macOS bundle weirdness - QFileInfo appFileInfo(QApplication::applicationFilePath())); + QFileInfo appFileInfo(QApplication::applicationFilePath()); QString appName = appFileInfo.baseName(); QString exeName = FS::PathCombine(appFileInfo.filePath(), "Contents/MacOS/" + appName); From 69bbb2932848fe7509f91623bac2a648ce594ad7 Mon Sep 17 00:00:00 2001 From: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> Date: Sun, 13 Nov 2022 15:47:37 +0200 Subject: [PATCH 021/155] Mac: attempt 2 - create .command files instead of .sh - fix shortcuts not working if path to Prism Launcher contains spaces - fix path to executable in shortcutss - add check for running from extracted folder (prevents creating shortcuts) Signed-off-by: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> --- launcher/FileSystem.cpp | 7 ++++--- launcher/ui/MainWindow.cpp | 11 ++++++----- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/launcher/FileSystem.cpp b/launcher/FileSystem.cpp index 7a1861e73..80715498b 100644 --- a/launcher/FileSystem.cpp +++ b/launcher/FileSystem.cpp @@ -343,7 +343,7 @@ QString getDesktopDir() bool createShortcut(QString destination, QString target, QStringList args, QString name, QString icon) { #if defined(Q_OS_MACOS) - destination += ".sh"; + destination += ".command"; QFile f(destination); f.open(QIODevice::WriteOnly | QIODevice::Text); @@ -355,8 +355,9 @@ bool createShortcut(QString destination, QString target, QStringList args, QStri stream << "#!/bin/bash" << "\n"; - stream << target - << " " + stream << "\"" + << target + << "\" " << argstring << "\n"; diff --git a/launcher/ui/MainWindow.cpp b/launcher/ui/MainWindow.cpp index aedd9e4f5..17371149c 100644 --- a/launcher/ui/MainWindow.cpp +++ b/launcher/ui/MainWindow.cpp @@ -2100,13 +2100,14 @@ void MainWindow::on_actionCreateInstanceShortcut_triggered() } #if defined(Q_OS_MACOS) - // handle macOS bundle weirdness - QFileInfo appFileInfo(QApplication::applicationFilePath()); - QString appName = appFileInfo.baseName(); - QString exeName = FS::PathCombine(appFileInfo.filePath(), "Contents/MacOS/" + appName); + QString appPath = QApplication::applicationFilePath(); + if (appPath.startsWith("/private/var")) { + QMessageBox::critical(this, tr("Create instance shortcut"), tr("The launcher is in the folder it was extracted from, therefore it cannot create shortcuts.")); + return; + } if (FS::createShortcut(FS::PathCombine(desktopPath, m_selectedInstance->name()), - exeName, { "--launch", m_selectedInstance->id() }, m_selectedInstance->name(), "")) { + appPath, { "--launch", m_selectedInstance->id() }, m_selectedInstance->name(), "")) { QMessageBox::information(this, tr("Create instance shortcut"), tr("Created a shortcut to this instance on your desktop!")); } else From 43b9d9484da280fc209a0c9f195b0ca338eacdb9 Mon Sep 17 00:00:00 2001 From: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> Date: Sun, 13 Nov 2022 15:49:28 +0200 Subject: [PATCH 022/155] tabs -> spaces Signed-off-by: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> --- launcher/ui/MainWindow.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/launcher/ui/MainWindow.cpp b/launcher/ui/MainWindow.cpp index 17371149c..c7de46c71 100644 --- a/launcher/ui/MainWindow.cpp +++ b/launcher/ui/MainWindow.cpp @@ -2101,10 +2101,10 @@ void MainWindow::on_actionCreateInstanceShortcut_triggered() #if defined(Q_OS_MACOS) QString appPath = QApplication::applicationFilePath(); - if (appPath.startsWith("/private/var")) { + if (appPath.startsWith("/private/var")) { QMessageBox::critical(this, tr("Create instance shortcut"), tr("The launcher is in the folder it was extracted from, therefore it cannot create shortcuts.")); return; - } + } if (FS::createShortcut(FS::PathCombine(desktopPath, m_selectedInstance->name()), appPath, { "--launch", m_selectedInstance->id() }, m_selectedInstance->name(), "")) { From b0269e6dfc685cd002340e95e80942410f1b1fc5 Mon Sep 17 00:00:00 2001 From: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> Date: Sun, 13 Nov 2022 17:51:29 +0200 Subject: [PATCH 023/155] Linux: fixes - Fix shortcut icons - Possibly fix shortcut creation on AppImages - Fix shortcut not working if path to launcher contains spaces Signed-off-by: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> --- launcher/FileSystem.cpp | 4 ++-- launcher/ui/MainWindow.cpp | 48 +++++++++++++++++++++++++++++++++----- 2 files changed, 44 insertions(+), 8 deletions(-) diff --git a/launcher/FileSystem.cpp b/launcher/FileSystem.cpp index 80715498b..e1059ca95 100644 --- a/launcher/FileSystem.cpp +++ b/launcher/FileSystem.cpp @@ -382,8 +382,8 @@ bool createShortcut(QString destination, QString target, QStringList args, QStri << "\n"; stream << "Type=Application" << "\n"; - stream << "TryExec=" << target.toLocal8Bit() << "\n"; - stream << "Exec=" << target.toLocal8Bit() << argstring.toLocal8Bit() << "\n"; + stream << "TryExec=\"" << target.toLocal8Bit() << "\"\n"; + stream << "Exec=\"" << target.toLocal8Bit() << "\"" << argstring.toLocal8Bit() << "\n"; stream << "Name=" << name.toLocal8Bit() << "\n"; if (!icon.isEmpty()) { diff --git a/launcher/ui/MainWindow.cpp b/launcher/ui/MainWindow.cpp index c7de46c71..4dbac967d 100644 --- a/launcher/ui/MainWindow.cpp +++ b/launcher/ui/MainWindow.cpp @@ -2101,13 +2101,14 @@ void MainWindow::on_actionCreateInstanceShortcut_triggered() #if defined(Q_OS_MACOS) QString appPath = QApplication::applicationFilePath(); - if (appPath.startsWith("/private/var")) { + if (appPath.startsWith("/private/var/")) { QMessageBox::critical(this, tr("Create instance shortcut"), tr("The launcher is in the folder it was extracted from, therefore it cannot create shortcuts.")); return; } if (FS::createShortcut(FS::PathCombine(desktopPath, m_selectedInstance->name()), - appPath, { "--launch", m_selectedInstance->id() }, m_selectedInstance->name(), "")) { + appPath, { "--launch", m_selectedInstance->id() }, + m_selectedInstance->name(), "")) { QMessageBox::information(this, tr("Create instance shortcut"), tr("Created a shortcut to this instance on your desktop!")); } else @@ -2115,14 +2116,48 @@ void MainWindow::on_actionCreateInstanceShortcut_triggered() QMessageBox::critical(this, tr("Create instance shortcut"), tr("Failed to create instance shortcut!")); } #elif defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) || defined(Q_OS_OPENBSD) + QString appPath = QApplication::applicationFilePath(); + if (appPath.startsWith("/tmp/.mount_")) { + // AppImage! + appPath = QProcessEnvironment::systemEnvironment().value(QStringLiteral("APPIMAGE")); + if (appPath.isEmpty()) + { + QMessageBox::critical(this, tr("Create instance shortcut"), tr("Launcher is running as misconfigured AppImage? ($APPIMAGE environment variable is missing)")); + } + else if (appPath.endsWith("/")) + { + appPath.chop(1); + } + } + auto icon = APPLICATION->icons()->icon(m_selectedInstance->iconKey()); + QString iconPath = FS::PathCombine(m_selectedInstance->instanceRoot(), "icon.png"); + + QFile iconFile(iconPath); + if (!iconFile.open(QFile::WriteOnly)) + { + QMessageBox::critical(this, tr("Create instance shortcut"), tr("Failed to create icon for shortcut.")); + return; + } + bool success = icon->icon().pixmap(64, 64).save(&iconFile, "PNG"); + iconFile.close(); + + if (!success) + { + iconFile.remove(); + QMessageBox::critical(this, tr("Create instance shortcut"), tr("Failed to create icon for shortcut.")); + return; + } + if (FS::createShortcut(FS::PathCombine(desktopPath, m_selectedInstance->name()), - QApplication::applicationFilePath(), { "--launch", m_selectedInstance->id() }, m_selectedInstance->name(), icon->getFilePath())) { + appPath, { "--launch", m_selectedInstance->id() }, + m_selectedInstance->name(), iconPath)) { QMessageBox::information(this, tr("Create instance shortcut"), tr("Created a shortcut to this instance on your desktop!")); } else { + iconFile.remove(); QMessageBox::critical(this, tr("Create instance shortcut"), tr("Failed to create instance shortcut!")); } #elif defined(Q_OS_WIN) @@ -2137,7 +2172,7 @@ void MainWindow::on_actionCreateInstanceShortcut_triggered() QFile iconFile(iconPath); if (!iconFile.open(QFile::WriteOnly)) { - QMessageBox::critical(this, tr("Create instance shortcut"), tr("Failed to create instance shortcut!")); + QMessageBox::critical(this, tr("Create instance shortcut"), tr("Failed to create icon for shortcut.")); return; } bool success = icon->icon().pixmap(64, 64).save(&iconFile, "ICO"); @@ -2149,12 +2184,13 @@ void MainWindow::on_actionCreateInstanceShortcut_triggered() if (!success) { iconFile.remove(); - QMessageBox::critical(this, tr("Create instance shortcut"), tr("Failed to create instance shortcut!")); + QMessageBox::critical(this, tr("Create instance shortcut"), tr("Failed to create icon for shortcut.")); return; } if (FS::createShortcut(FS::PathCombine(desktopPath, m_selectedInstance->name()), - QApplication::applicationFilePath(), { "--launch", m_selectedInstance->id() }, m_selectedInstance->name(), iconPath)) { + QApplication::applicationFilePath(), { "--launch", m_selectedInstance->id() }, + m_selectedInstance->name(), iconPath)) { QMessageBox::information(this, tr("Create instance shortcut"), tr("Created a shortcut to this instance on your desktop!")); } else From c4cfec1e94d1665dc3c1ccd44966a34f349698ea Mon Sep 17 00:00:00 2001 From: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> Date: Sun, 13 Nov 2022 18:00:18 +0200 Subject: [PATCH 024/155] Undo accidental tomlplusplus downgrade Signed-off-by: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> --- libraries/tomlplusplus | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/tomlplusplus b/libraries/tomlplusplus index 4b166b69f..cc741c9f5 160000 --- a/libraries/tomlplusplus +++ b/libraries/tomlplusplus @@ -1 +1 @@ -Subproject commit 4b166b69f28e70a416a1a04a98f365d2aeb90de8 +Subproject commit cc741c9f5f2a62856a2a2e9e275f61eb0591c09c From acd50969e0fcb172cf5f62e5ced4d10c6a9cbbe6 Mon Sep 17 00:00:00 2001 From: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> Date: Sun, 13 Nov 2022 19:50:27 +0200 Subject: [PATCH 025/155] Linux: remove TryExec entry from .desktop files Signed-off-by: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> --- launcher/FileSystem.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/launcher/FileSystem.cpp b/launcher/FileSystem.cpp index e1059ca95..9d911fa0e 100644 --- a/launcher/FileSystem.cpp +++ b/launcher/FileSystem.cpp @@ -382,7 +382,6 @@ bool createShortcut(QString destination, QString target, QStringList args, QStri << "\n"; stream << "Type=Application" << "\n"; - stream << "TryExec=\"" << target.toLocal8Bit() << "\"\n"; stream << "Exec=\"" << target.toLocal8Bit() << "\"" << argstring.toLocal8Bit() << "\n"; stream << "Name=" << name.toLocal8Bit() << "\n"; if (!icon.isEmpty()) From 5be8545edcf53cd410d0ea14168b5675150106fc Mon Sep 17 00:00:00 2001 From: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> Date: Sun, 13 Nov 2022 20:18:51 +0200 Subject: [PATCH 026/155] Windows, Linux: prevent segfault on missing icon Signed-off-by: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> --- launcher/ui/MainWindow.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/launcher/ui/MainWindow.cpp b/launcher/ui/MainWindow.cpp index 4dbac967d..4e6ce82cd 100644 --- a/launcher/ui/MainWindow.cpp +++ b/launcher/ui/MainWindow.cpp @@ -2131,7 +2131,11 @@ void MainWindow::on_actionCreateInstanceShortcut_triggered() } auto icon = APPLICATION->icons()->icon(m_selectedInstance->iconKey()); - + if (icon == nullptr) + { + icon = APPLICATION->icons()->icon("grass"); + } + QString iconPath = FS::PathCombine(m_selectedInstance->instanceRoot(), "icon.png"); QFile iconFile(iconPath); @@ -2162,7 +2166,11 @@ void MainWindow::on_actionCreateInstanceShortcut_triggered() } #elif defined(Q_OS_WIN) auto icon = APPLICATION->icons()->icon(m_selectedInstance->iconKey()); - + if (icon == nullptr) + { + icon = APPLICATION->icons()->icon("grass"); + } + QString iconPath = FS::PathCombine(m_selectedInstance->instanceRoot(), "icon.ico"); // part of fix for weird bug involving the window icon being replaced From ce892c9e777f13de6e6298806d9fdb5c92f77af6 Mon Sep 17 00:00:00 2001 From: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> Date: Mon, 14 Nov 2022 21:02:31 +0200 Subject: [PATCH 027/155] Add icon NOTE: Currently missing on Legacy, Flat and Flat (White) Signed-off-by: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> --- launcher/resources/OSX/OSX.qrc | 4 +- launcher/resources/OSX/scalable/shortcut.svg | 14 +++++++ launcher/resources/iOS/iOS.qrc | 4 +- launcher/resources/iOS/scalable/shortcut.svg | 13 ++++++ launcher/resources/pe_blue/pe_blue.qrc | 4 +- .../resources/pe_blue/scalable/shortcut.svg | 41 +++++++++++++++++++ launcher/resources/pe_colored/pe_colored.qrc | 4 +- .../pe_colored/scalable/shortcut.svg | 13 ++++++ launcher/resources/pe_dark/pe_dark.qrc | 4 +- .../resources/pe_dark/scalable/shortcut.svg | 41 +++++++++++++++++++ launcher/resources/pe_light/pe_light.qrc | 4 +- .../resources/pe_light/scalable/shortcut.svg | 41 +++++++++++++++++++ launcher/ui/MainWindow.cpp | 3 +- 13 files changed, 177 insertions(+), 13 deletions(-) create mode 100644 launcher/resources/OSX/scalable/shortcut.svg create mode 100644 launcher/resources/iOS/scalable/shortcut.svg create mode 100644 launcher/resources/pe_blue/scalable/shortcut.svg create mode 100644 launcher/resources/pe_colored/scalable/shortcut.svg create mode 100644 launcher/resources/pe_dark/scalable/shortcut.svg create mode 100644 launcher/resources/pe_light/scalable/shortcut.svg diff --git a/launcher/resources/OSX/OSX.qrc b/launcher/resources/OSX/OSX.qrc index 19fe312b6..3f50d6cf4 100644 --- a/launcher/resources/OSX/OSX.qrc +++ b/launcher/resources/OSX/OSX.qrc @@ -1,5 +1,4 @@ - - + index.theme scalable/about.svg @@ -39,5 +38,6 @@ scalable/export.svg scalable/rename.svg scalable/launch.svg + scalable/shortcut.svg diff --git a/launcher/resources/OSX/scalable/shortcut.svg b/launcher/resources/OSX/scalable/shortcut.svg new file mode 100644 index 000000000..a2b7488e1 --- /dev/null +++ b/launcher/resources/OSX/scalable/shortcut.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + diff --git a/launcher/resources/iOS/iOS.qrc b/launcher/resources/iOS/iOS.qrc index aa08d811a..d7044fbb3 100644 --- a/launcher/resources/iOS/iOS.qrc +++ b/launcher/resources/iOS/iOS.qrc @@ -1,5 +1,4 @@ - - + index.theme scalable/about.svg @@ -39,5 +38,6 @@ scalable/export.svg scalable/rename.svg scalable/launch.svg + scalable/shortcut.svg diff --git a/launcher/resources/iOS/scalable/shortcut.svg b/launcher/resources/iOS/scalable/shortcut.svg new file mode 100644 index 000000000..16e9fa488 --- /dev/null +++ b/launcher/resources/iOS/scalable/shortcut.svg @@ -0,0 +1,13 @@ + + + + + + + + + + diff --git a/launcher/resources/pe_blue/pe_blue.qrc b/launcher/resources/pe_blue/pe_blue.qrc index 3121ffe6b..dc40103a3 100644 --- a/launcher/resources/pe_blue/pe_blue.qrc +++ b/launcher/resources/pe_blue/pe_blue.qrc @@ -1,5 +1,4 @@ - - + index.theme scalable/about.svg @@ -39,5 +38,6 @@ scalable/export.svg scalable/rename.svg scalable/launch.svg + scalable/shortcut.svg diff --git a/launcher/resources/pe_blue/scalable/shortcut.svg b/launcher/resources/pe_blue/scalable/shortcut.svg new file mode 100644 index 000000000..45b734966 --- /dev/null +++ b/launcher/resources/pe_blue/scalable/shortcut.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/launcher/resources/pe_colored/pe_colored.qrc b/launcher/resources/pe_colored/pe_colored.qrc index ce5ad8e21..bd1af6ff4 100644 --- a/launcher/resources/pe_colored/pe_colored.qrc +++ b/launcher/resources/pe_colored/pe_colored.qrc @@ -1,5 +1,4 @@ - - + index.theme scalable/about.svg @@ -39,5 +38,6 @@ scalable/export.svg scalable/rename.svg scalable/launch.svg + scalable/shortcut.svg diff --git a/launcher/resources/pe_colored/scalable/shortcut.svg b/launcher/resources/pe_colored/scalable/shortcut.svg new file mode 100644 index 000000000..1469674f6 --- /dev/null +++ b/launcher/resources/pe_colored/scalable/shortcut.svg @@ -0,0 +1,13 @@ + + + + + + + + + + diff --git a/launcher/resources/pe_dark/pe_dark.qrc b/launcher/resources/pe_dark/pe_dark.qrc index 156d8f8b4..05ef7e932 100644 --- a/launcher/resources/pe_dark/pe_dark.qrc +++ b/launcher/resources/pe_dark/pe_dark.qrc @@ -1,5 +1,4 @@ - - + index.theme scalable/about.svg @@ -39,5 +38,6 @@ scalable/export.svg scalable/rename.svg scalable/launch.svg + scalable/shortcut.svg diff --git a/launcher/resources/pe_dark/scalable/shortcut.svg b/launcher/resources/pe_dark/scalable/shortcut.svg new file mode 100644 index 000000000..29b45f26c --- /dev/null +++ b/launcher/resources/pe_dark/scalable/shortcut.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/launcher/resources/pe_light/pe_light.qrc b/launcher/resources/pe_light/pe_light.qrc index d8e4a1bd7..6acca230d 100644 --- a/launcher/resources/pe_light/pe_light.qrc +++ b/launcher/resources/pe_light/pe_light.qrc @@ -1,5 +1,4 @@ - - + index.theme scalable/about.svg @@ -39,5 +38,6 @@ scalable/export.svg scalable/rename.svg scalable/launch.svg + scalable/shortcut.svg diff --git a/launcher/resources/pe_light/scalable/shortcut.svg b/launcher/resources/pe_light/scalable/shortcut.svg new file mode 100644 index 000000000..4d232bcf1 --- /dev/null +++ b/launcher/resources/pe_light/scalable/shortcut.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/launcher/ui/MainWindow.cpp b/launcher/ui/MainWindow.cpp index 4e6ce82cd..0c6066603 100644 --- a/launcher/ui/MainWindow.cpp +++ b/launcher/ui/MainWindow.cpp @@ -743,7 +743,8 @@ public: actionCreateInstanceShortcut.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Create Shortcut")); actionCreateInstanceShortcut.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Creates a shortcut on your desktop to launch the selected instance.")); //actionCreateInstanceShortcut->setShortcut(QKeySequence(tr("Ctrl+D"))); // TODO - //actionCreateInstanceShortcut->setIcon(APPLICATION->getThemedIcon("copy")); // TODO + // FIXME missing on Legacy, Flat and Flat (White) + actionCreateInstanceShortcut->setIcon(APPLICATION->getThemedIcon("shortcut")); all_actions.append(&actionCreateInstanceShortcut); setInstanceActionsEnabled(false); From 8d6aecd9447f0740d70f7397a176bb744605c2e3 Mon Sep 17 00:00:00 2001 From: leo78913 Date: Sun, 6 Nov 2022 12:25:11 -0300 Subject: [PATCH 028/155] add the missing icons to the legacy icon theme Signed-off-by: leo78913 --- launcher/resources/multimc/multimc.qrc | 8 + .../resources/multimc/scalable/delete.svg | 282 +++++++++++ .../resources/multimc/scalable/export.svg | 466 ++++++++++++++++++ .../resources/multimc/scalable/launch.svg | 96 ++++ .../resources/multimc/scalable/rename.svg | 437 ++++++++++++++++ launcher/resources/multimc/scalable/tag.svg | 398 +++++++++++++++ 6 files changed, 1687 insertions(+) create mode 100644 launcher/resources/multimc/scalable/delete.svg create mode 100644 launcher/resources/multimc/scalable/export.svg create mode 100644 launcher/resources/multimc/scalable/launch.svg create mode 100644 launcher/resources/multimc/scalable/rename.svg create mode 100644 launcher/resources/multimc/scalable/tag.svg diff --git a/launcher/resources/multimc/multimc.qrc b/launcher/resources/multimc/multimc.qrc index 3f3d22fc1..270dd0099 100644 --- a/launcher/resources/multimc/multimc.qrc +++ b/launcher/resources/multimc/multimc.qrc @@ -312,5 +312,13 @@ scalable/instances/fox.svg scalable/instances/bee.svg scalable/instances/prismlauncher.svg + + + scalable/delete.svg + scalable/tag.svg + scalable/rename.svg + + scalable/export.svg + scalable/launch.svg diff --git a/launcher/resources/multimc/scalable/delete.svg b/launcher/resources/multimc/scalable/delete.svg new file mode 100644 index 000000000..414cbd5c6 --- /dev/null +++ b/launcher/resources/multimc/scalable/delete.svg @@ -0,0 +1,282 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/launcher/resources/multimc/scalable/export.svg b/launcher/resources/multimc/scalable/export.svg new file mode 100644 index 000000000..2605de14e --- /dev/null +++ b/launcher/resources/multimc/scalable/export.svg @@ -0,0 +1,466 @@ + + + + + + + + + + + unsorted + + + + + Open Clip Art Library, Source: Oxygen Icons, Source: Oxygen Icons, Source: Oxygen Icons, Source: Oxygen Icons + + + + + + + + + + + + + + image/svg+xml + + + en + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/launcher/resources/multimc/scalable/launch.svg b/launcher/resources/multimc/scalable/launch.svg new file mode 100644 index 000000000..321647a0b --- /dev/null +++ b/launcher/resources/multimc/scalable/launch.svg @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/launcher/resources/multimc/scalable/rename.svg b/launcher/resources/multimc/scalable/rename.svg new file mode 100644 index 000000000..a585e264b --- /dev/null +++ b/launcher/resources/multimc/scalable/rename.svg @@ -0,0 +1,437 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/launcher/resources/multimc/scalable/tag.svg b/launcher/resources/multimc/scalable/tag.svg new file mode 100644 index 000000000..81b5d545c --- /dev/null +++ b/launcher/resources/multimc/scalable/tag.svg @@ -0,0 +1,398 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From cca052ccc9d644c84384ceefe97bbce45381a9e2 Mon Sep 17 00:00:00 2001 From: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> Date: Mon, 14 Nov 2022 22:46:41 +0200 Subject: [PATCH 029/155] Restore QRC headers Signed-off-by: ADudeCalledLeo <7997354+Leo40Git@users.noreply.github.com> --- launcher/resources/OSX/OSX.qrc | 3 ++- launcher/resources/iOS/iOS.qrc | 3 ++- launcher/resources/pe_blue/pe_blue.qrc | 3 ++- launcher/resources/pe_colored/pe_colored.qrc | 3 ++- launcher/resources/pe_dark/pe_dark.qrc | 3 ++- launcher/resources/pe_light/pe_light.qrc | 3 ++- 6 files changed, 12 insertions(+), 6 deletions(-) diff --git a/launcher/resources/OSX/OSX.qrc b/launcher/resources/OSX/OSX.qrc index 3f50d6cf4..9d4511d1a 100644 --- a/launcher/resources/OSX/OSX.qrc +++ b/launcher/resources/OSX/OSX.qrc @@ -1,4 +1,5 @@ - + + index.theme scalable/about.svg diff --git a/launcher/resources/iOS/iOS.qrc b/launcher/resources/iOS/iOS.qrc index d7044fbb3..0b79efb2a 100644 --- a/launcher/resources/iOS/iOS.qrc +++ b/launcher/resources/iOS/iOS.qrc @@ -1,4 +1,5 @@ - + + index.theme scalable/about.svg diff --git a/launcher/resources/pe_blue/pe_blue.qrc b/launcher/resources/pe_blue/pe_blue.qrc index dc40103a3..639675f0a 100644 --- a/launcher/resources/pe_blue/pe_blue.qrc +++ b/launcher/resources/pe_blue/pe_blue.qrc @@ -1,4 +1,5 @@ - + + index.theme scalable/about.svg diff --git a/launcher/resources/pe_colored/pe_colored.qrc b/launcher/resources/pe_colored/pe_colored.qrc index bd1af6ff4..fac58da80 100644 --- a/launcher/resources/pe_colored/pe_colored.qrc +++ b/launcher/resources/pe_colored/pe_colored.qrc @@ -1,4 +1,5 @@ - + + index.theme scalable/about.svg diff --git a/launcher/resources/pe_dark/pe_dark.qrc b/launcher/resources/pe_dark/pe_dark.qrc index 05ef7e932..c0c6ee6cb 100644 --- a/launcher/resources/pe_dark/pe_dark.qrc +++ b/launcher/resources/pe_dark/pe_dark.qrc @@ -1,4 +1,5 @@ - + + index.theme scalable/about.svg diff --git a/launcher/resources/pe_light/pe_light.qrc b/launcher/resources/pe_light/pe_light.qrc index 6acca230d..bd6a24966 100644 --- a/launcher/resources/pe_light/pe_light.qrc +++ b/launcher/resources/pe_light/pe_light.qrc @@ -1,4 +1,5 @@ - + + index.theme scalable/about.svg From 7705f290ca69c0478f698ddf06a5f1edb731e8fc Mon Sep 17 00:00:00 2001 From: flow Date: Tue, 15 Nov 2022 12:07:11 -0300 Subject: [PATCH 030/155] fix: don't retry to load RP images that can't fit in the cache Avoids an infinite loop when the image is too big. Signed-off-by: flow --- launcher/minecraft/mod/ResourcePack.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/launcher/minecraft/mod/ResourcePack.cpp b/launcher/minecraft/mod/ResourcePack.cpp index 3fc10a2fd..b97bedf8d 100644 --- a/launcher/minecraft/mod/ResourcePack.cpp +++ b/launcher/minecraft/mod/ResourcePack.cpp @@ -47,6 +47,12 @@ void ResourcePack::setImage(QImage new_image) m_pack_image_cache_key.key = QPixmapCache::insert(QPixmap::fromImage(new_image)); m_pack_image_cache_key.was_ever_used = true; + + // This can happen if the pixmap is too big to fit in the cache :c + if (!m_pack_image_cache_key.key.isValid()) { + qWarning() << "Could not insert a image cache entry! Ignoring it."; + m_pack_image_cache_key.was_ever_used = false; + } } QPixmap ResourcePack::image(QSize size) From c4c1e75de8825a4af403046536a7b2acd72a56c3 Mon Sep 17 00:00:00 2001 From: flow Date: Tue, 15 Nov 2022 18:13:15 -0300 Subject: [PATCH 031/155] fix: use QPixmapCache only from the main thread It's a required condition. Signed-off-by: flow --- launcher/Application.cpp | 6 ++ launcher/CMakeLists.txt | 2 + launcher/MTPixmapCache.h | 95 +++++++++++++++++++++++++ launcher/minecraft/mod/ResourcePack.cpp | 8 ++- 4 files changed, 108 insertions(+), 3 deletions(-) create mode 100644 launcher/MTPixmapCache.h diff --git a/launcher/Application.cpp b/launcher/Application.cpp index 45cd94227..c3d624ad0 100644 --- a/launcher/Application.cpp +++ b/launcher/Application.cpp @@ -90,6 +90,7 @@ #include #include "InstanceList.h" +#include "MTPixmapCache.h" #include #include "icons/IconList.h" @@ -134,6 +135,8 @@ static const QLatin1String liveCheckFile("live.check"); +PixmapCache* PixmapCache::s_instance = nullptr; + namespace { void appDebugOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg) { @@ -693,6 +696,9 @@ Application::Application(int &argc, char **argv) : QApplication(argc, argv) m_globalSettingsProvider->addPage(); m_globalSettingsProvider->addPage(); } + + PixmapCache::setInstance(new PixmapCache(this)); + qDebug() << "<> Settings loaded."; } diff --git a/launcher/CMakeLists.txt b/launcher/CMakeLists.txt index 8db934298..0605be239 100644 --- a/launcher/CMakeLists.txt +++ b/launcher/CMakeLists.txt @@ -89,6 +89,8 @@ set(CORE_SOURCES # Time MMCTime.h MMCTime.cpp + + MTPixmapCache.h ) set(PATHMATCHER_SOURCES diff --git a/launcher/MTPixmapCache.h b/launcher/MTPixmapCache.h new file mode 100644 index 000000000..57847a0e1 --- /dev/null +++ b/launcher/MTPixmapCache.h @@ -0,0 +1,95 @@ +#pragma once + +#include +#include +#include + +#define GET_TYPE() \ + Qt::ConnectionType type; \ + if (QThread::currentThread() != QCoreApplication::instance()->thread()) \ + type = Qt::BlockingQueuedConnection; \ + else \ + type = Qt::DirectConnection; + +#define DEFINE_FUNC_NO_PARAM(NAME, RET_TYPE) \ + static RET_TYPE NAME() \ + { \ + RET_TYPE ret; \ + GET_TYPE() \ + QMetaObject::invokeMethod(s_instance, "_" #NAME, type, Q_RETURN_ARG(RET_TYPE, ret)); \ + return ret; \ + } +#define DEFINE_FUNC_ONE_PARAM(NAME, RET_TYPE, PARAM_1_TYPE) \ + static RET_TYPE NAME(PARAM_1_TYPE p1) \ + { \ + RET_TYPE ret; \ + GET_TYPE() \ + QMetaObject::invokeMethod(s_instance, "_" #NAME, type, Q_RETURN_ARG(RET_TYPE, ret), Q_ARG(PARAM_1_TYPE, p1)); \ + return ret; \ + } +#define DEFINE_FUNC_TWO_PARAM(NAME, RET_TYPE, PARAM_1_TYPE, PARAM_2_TYPE) \ + static RET_TYPE NAME(PARAM_1_TYPE p1, PARAM_2_TYPE p2) \ + { \ + RET_TYPE ret; \ + GET_TYPE() \ + QMetaObject::invokeMethod(s_instance, "_" #NAME, type, Q_RETURN_ARG(RET_TYPE, ret), Q_ARG(PARAM_1_TYPE, p1), \ + Q_ARG(PARAM_2_TYPE, p2)); \ + return ret; \ + } + +/** A wrapper around QPixmapCache with thread affinity with the main thread. + */ +class PixmapCache final : public QObject { + Q_OBJECT + + public: + PixmapCache(QObject* parent) : QObject(parent) {} + ~PixmapCache() override = default; + + static PixmapCache& instance() { return *s_instance; } + static void setInstance(PixmapCache* i) { s_instance = i; } + + public: + DEFINE_FUNC_NO_PARAM(cacheLimit, int) + DEFINE_FUNC_NO_PARAM(clear, bool) + DEFINE_FUNC_TWO_PARAM(find, bool, const QString&, QPixmap*) + DEFINE_FUNC_TWO_PARAM(find, bool, const QPixmapCache::Key&, QPixmap*) + DEFINE_FUNC_TWO_PARAM(insert, bool, const QString&, const QPixmap&) + DEFINE_FUNC_ONE_PARAM(insert, QPixmapCache::Key, const QPixmap&) + DEFINE_FUNC_ONE_PARAM(remove, bool, const QString&) + DEFINE_FUNC_ONE_PARAM(remove, bool, const QPixmapCache::Key&) + DEFINE_FUNC_TWO_PARAM(replace, bool, const QPixmapCache::Key&, const QPixmap&) + DEFINE_FUNC_ONE_PARAM(setCacheLimit, bool, int) + + // NOTE: Every function returns something non-void to simplify the macros. + private slots: + int _cacheLimit() { return QPixmapCache::cacheLimit(); } + bool _clear() + { + QPixmapCache::clear(); + return true; + } + bool _find(const QString& key, QPixmap* pixmap) { return QPixmapCache::find(key, pixmap); } + bool _find(const QPixmapCache::Key& key, QPixmap* pixmap) { return QPixmapCache::find(key, pixmap); } + bool _insert(const QString& key, const QPixmap& pixmap) { return QPixmapCache::insert(key, pixmap); } + QPixmapCache::Key _insert(const QPixmap& pixmap) { return QPixmapCache::insert(pixmap); } + bool _remove(const QString& key) + { + QPixmapCache::remove(key); + return true; + } + bool _remove(const QPixmapCache::Key& key) + { + QPixmapCache::remove(key); + return true; + } + bool _replace(const QPixmapCache::Key& key, const QPixmap& pixmap) { return QPixmapCache::replace(key, pixmap); } + bool _setCacheLimit(int n) + { + QPixmapCache::setCacheLimit(n); + return true; + } + + private: + static PixmapCache* s_instance; +}; diff --git a/launcher/minecraft/mod/ResourcePack.cpp b/launcher/minecraft/mod/ResourcePack.cpp index b97bedf8d..242fd9fe0 100644 --- a/launcher/minecraft/mod/ResourcePack.cpp +++ b/launcher/minecraft/mod/ResourcePack.cpp @@ -1,9 +1,11 @@ #include "ResourcePack.h" +#include #include #include #include +#include "MTPixmapCache.h" #include "Version.h" #include "minecraft/mod/tasks/LocalResourcePackParseTask.h" @@ -43,9 +45,9 @@ void ResourcePack::setImage(QImage new_image) Q_ASSERT(!new_image.isNull()); if (m_pack_image_cache_key.key.isValid()) - QPixmapCache::remove(m_pack_image_cache_key.key); + PixmapCache::instance().remove(m_pack_image_cache_key.key); - m_pack_image_cache_key.key = QPixmapCache::insert(QPixmap::fromImage(new_image)); + m_pack_image_cache_key.key = PixmapCache::instance().insert(QPixmap::fromImage(new_image)); m_pack_image_cache_key.was_ever_used = true; // This can happen if the pixmap is too big to fit in the cache :c @@ -58,7 +60,7 @@ void ResourcePack::setImage(QImage new_image) QPixmap ResourcePack::image(QSize size) { QPixmap cached_image; - if (QPixmapCache::find(m_pack_image_cache_key.key, &cached_image)) { + if (PixmapCache::instance().find(m_pack_image_cache_key.key, &cached_image)) { if (size.isNull()) return cached_image; return cached_image.scaled(size); From 8dacbafc8ba45ae6c2b770da77cc0d3d632849ba Mon Sep 17 00:00:00 2001 From: Ryan Cao <70191398+ryanccn@users.noreply.github.com> Date: Sat, 19 Nov 2022 23:04:26 +0800 Subject: [PATCH 032/155] feat: initial support for smart resource pack parsing on file handler Signed-off-by: Ryan Cao <70191398+ryanccn@users.noreply.github.com> --- launcher/Application.cpp | 23 ++++++- launcher/CMakeLists.txt | 3 + .../ui/dialogs/ImportResourcePackDialog.cpp | 61 +++++++++++++++++ .../ui/dialogs/ImportResourcePackDialog.h | 24 +++++++ .../ui/dialogs/ImportResourcePackDialog.ui | 67 +++++++++++++++++++ 5 files changed, 177 insertions(+), 1 deletion(-) create mode 100644 launcher/ui/dialogs/ImportResourcePackDialog.cpp create mode 100644 launcher/ui/dialogs/ImportResourcePackDialog.h create mode 100644 launcher/ui/dialogs/ImportResourcePackDialog.ui diff --git a/launcher/Application.cpp b/launcher/Application.cpp index 883f8968b..71cd009a5 100644 --- a/launcher/Application.cpp +++ b/launcher/Application.cpp @@ -66,6 +66,7 @@ #include "ui/setupwizard/PasteWizardPage.h" #include "ui/dialogs/CustomMessageBox.h" +#include "ui/dialogs/ImportResourcePackDialog.h" #include "ui/pagedialog/PageDialog.h" @@ -96,6 +97,10 @@ #include "net/HttpMetaCache.h" #include "java/JavaUtils.h" +#include +#include +#include +#include #include "updater/UpdateChecker.h" @@ -930,7 +935,23 @@ bool Application::event(QEvent* event) { if (event->type() == QEvent::FileOpen) { auto ev = static_cast(event); - m_mainWindow->droppedURLs({ ev->url() }); + + ResourcePack pack{ QFileInfo(ev->file()) }; + + ResourcePackUtils::process(pack); + // + + if (pack.valid()) { + ImportResourcePackDialog dlg(APPLICATION->m_mainWindow); + dlg.exec(); + if (dlg.result() == QDialog::Accepted) { + auto instance = APPLICATION->instances()->getInstanceById(dlg.selectedInstanceKey); + auto instanceButBuffed = std::dynamic_pointer_cast(instance); + instanceButBuffed->resourcePackList()->installResource(ev->file()); + } + } else { + m_mainWindow->droppedURLs({ ev->url() }); + } } return QApplication::event(event); diff --git a/launcher/CMakeLists.txt b/launcher/CMakeLists.txt index 8db934298..58d5d9648 100644 --- a/launcher/CMakeLists.txt +++ b/launcher/CMakeLists.txt @@ -791,6 +791,8 @@ SET(LAUNCHER_SOURCES ui/dialogs/ExportInstanceDialog.h ui/dialogs/IconPickerDialog.cpp ui/dialogs/IconPickerDialog.h + ui/dialogs/ImportResourcePackDialog.cpp + ui/dialogs/ImportResourcePackDialog.h ui/dialogs/LoginDialog.cpp ui/dialogs/LoginDialog.h ui/dialogs/MSALoginDialog.cpp @@ -939,6 +941,7 @@ qt_wrap_ui(LAUNCHER_UI ui/dialogs/SkinUploadDialog.ui ui/dialogs/ExportInstanceDialog.ui ui/dialogs/IconPickerDialog.ui + ui/dialogs/ImportResourcePackDialog.ui ui/dialogs/MSALoginDialog.ui ui/dialogs/OfflineLoginDialog.ui ui/dialogs/AboutDialog.ui diff --git a/launcher/ui/dialogs/ImportResourcePackDialog.cpp b/launcher/ui/dialogs/ImportResourcePackDialog.cpp new file mode 100644 index 000000000..ef76445cf --- /dev/null +++ b/launcher/ui/dialogs/ImportResourcePackDialog.cpp @@ -0,0 +1,61 @@ +#include "ImportResourcePackDialog.h" +#include "ui_ImportResourcePackDialog.h" + +#include +#include + +#include "Application.h" +#include "InstanceList.h" + +#include "ui/instanceview/InstanceDelegate.h" + +ImportResourcePackDialog::ImportResourcePackDialog(QWidget* parent) : QDialog(parent), ui(new Ui::ImportResourcePackDialog) +{ + ui->setupUi(this); + setWindowModality(Qt::WindowModal); + + auto contentsWidget = ui->instanceView; + contentsWidget->setViewMode(QListView::ListMode); + contentsWidget->setFlow(QListView::LeftToRight); + contentsWidget->setIconSize(QSize(48, 48)); + contentsWidget->setMovement(QListView::Static); + contentsWidget->setResizeMode(QListView::Adjust); + contentsWidget->setSelectionMode(QAbstractItemView::SingleSelection); + contentsWidget->setSpacing(5); + contentsWidget->setWordWrap(false); + contentsWidget->setWrapping(true); + contentsWidget->setUniformItemSizes(true); + contentsWidget->setTextElideMode(Qt::ElideRight); + contentsWidget->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel); + contentsWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); + contentsWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + contentsWidget->setItemDelegate(new ListViewDelegate()); + + contentsWidget->setModel(APPLICATION->instances().get()); + + connect(contentsWidget, SIGNAL(doubleClicked(QModelIndex)), SLOT(activated(QModelIndex))); + connect(contentsWidget->selectionModel(), SIGNAL(selectionChanged(QItemSelection, QItemSelection)), + SLOT(selectionChanged(QItemSelection, QItemSelection))); +} + +void ImportResourcePackDialog::activated(QModelIndex index) +{ + selectedInstanceKey = index.data(Qt::UserRole).toString(); + accept(); +} + +void ImportResourcePackDialog::selectionChanged(QItemSelection selected, QItemSelection deselected) +{ + if (selected.empty()) + return; + + QString key = selected.first().indexes().first().data(Qt::UserRole).toString(); + if (!key.isEmpty()) { + selectedInstanceKey = key; + } +} + +ImportResourcePackDialog::~ImportResourcePackDialog() +{ + delete ui; +} diff --git a/launcher/ui/dialogs/ImportResourcePackDialog.h b/launcher/ui/dialogs/ImportResourcePackDialog.h new file mode 100644 index 000000000..b077a811b --- /dev/null +++ b/launcher/ui/dialogs/ImportResourcePackDialog.h @@ -0,0 +1,24 @@ +#pragma once + +#include +#include + +namespace Ui { +class ImportResourcePackDialog; +} + +class ImportResourcePackDialog : public QDialog { + Q_OBJECT + + public: + explicit ImportResourcePackDialog(QWidget* parent = 0); + ~ImportResourcePackDialog(); + QString selectedInstanceKey; + + private: + Ui::ImportResourcePackDialog* ui; + + private slots: + void selectionChanged(QItemSelection, QItemSelection); + void activated(QModelIndex); +}; diff --git a/launcher/ui/dialogs/ImportResourcePackDialog.ui b/launcher/ui/dialogs/ImportResourcePackDialog.ui new file mode 100644 index 000000000..2a1de0f9b --- /dev/null +++ b/launcher/ui/dialogs/ImportResourcePackDialog.ui @@ -0,0 +1,67 @@ + + + ImportResourcePackDialog + + + + 0 + 0 + 676 + 555 + + + + Pick icon + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + buttonBox + accepted() + ImportResourcePackDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + ImportResourcePackDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + From b1bdc6f745d607af4dc1bb592003a538ee03f058 Mon Sep 17 00:00:00 2001 From: Ryan Cao <70191398+ryanccn@users.noreply.github.com> Date: Sat, 19 Nov 2022 23:38:05 +0800 Subject: [PATCH 033/155] fix resource packs and add support for texture packs Signed-off-by: Ryan Cao <70191398+ryanccn@users.noreply.github.com> --- launcher/Application.cpp | 29 ++++++++++++++++++------- launcher/minecraft/mod/ResourcePack.cpp | 5 +++++ launcher/minecraft/mod/ResourcePack.h | 2 ++ launcher/minecraft/mod/TexturePack.cpp | 5 +++++ launcher/minecraft/mod/TexturePack.h | 2 ++ 5 files changed, 35 insertions(+), 8 deletions(-) diff --git a/launcher/Application.cpp b/launcher/Application.cpp index 71cd009a5..9258aec48 100644 --- a/launcher/Application.cpp +++ b/launcher/Application.cpp @@ -101,6 +101,9 @@ #include #include #include +#include +#include +#include #include "updater/UpdateChecker.h" @@ -920,13 +923,13 @@ bool Application::createSetupWizard() return false; } -bool Application::event(QEvent* event) { +bool Application::event(QEvent* event) +{ #ifdef Q_OS_MACOS if (event->type() == QEvent::ApplicationStateChange) { auto ev = static_cast(event); - if (m_prevAppState == Qt::ApplicationActive - && ev->applicationState() == Qt::ApplicationActive) { + if (m_prevAppState == Qt::ApplicationActive && ev->applicationState() == Qt::ApplicationActive) { emit clickedOnDock(); } m_prevAppState = ev->applicationState(); @@ -936,19 +939,29 @@ bool Application::event(QEvent* event) { if (event->type() == QEvent::FileOpen) { auto ev = static_cast(event); - ResourcePack pack{ QFileInfo(ev->file()) }; + ResourcePack rp{ QFileInfo(ev->file()) }; + TexturePack tp{ QFileInfo(ev->file()) }; - ResourcePackUtils::process(pack); - // + ImportResourcePackDialog dlg(APPLICATION->m_mainWindow); - if (pack.valid()) { - ImportResourcePackDialog dlg(APPLICATION->m_mainWindow); + if (ResourcePackUtils::process(rp) && rp.valid()) { dlg.exec(); + if (dlg.result() == QDialog::Accepted) { + qDebug() << "Selected instance to import resource pack into: " << dlg.selectedInstanceKey; auto instance = APPLICATION->instances()->getInstanceById(dlg.selectedInstanceKey); auto instanceButBuffed = std::dynamic_pointer_cast(instance); instanceButBuffed->resourcePackList()->installResource(ev->file()); } + } else if (TexturePackUtils::process(tp) && tp.valid()) { + dlg.exec(); + + if (dlg.result() == QDialog::Accepted) { + qDebug() << "Selected instance to import texture pack into: " << dlg.selectedInstanceKey; + auto instance = APPLICATION->instances()->getInstanceById(dlg.selectedInstanceKey); + auto instanceButBuffed = std::dynamic_pointer_cast(instance); + instanceButBuffed->texturePackList()->installResource(ev->file()); + } } else { m_mainWindow->droppedURLs({ ev->url() }); } diff --git a/launcher/minecraft/mod/ResourcePack.cpp b/launcher/minecraft/mod/ResourcePack.cpp index 3fc10a2fd..9f46cd2c3 100644 --- a/launcher/minecraft/mod/ResourcePack.cpp +++ b/launcher/minecraft/mod/ResourcePack.cpp @@ -114,3 +114,8 @@ bool ResourcePack::applyFilter(QRegularExpression filter) const return Resource::applyFilter(filter); } + +bool ResourcePack::valid() const +{ + return m_pack_format != 0; +} diff --git a/launcher/minecraft/mod/ResourcePack.h b/launcher/minecraft/mod/ResourcePack.h index 031219081..7cb414d83 100644 --- a/launcher/minecraft/mod/ResourcePack.h +++ b/launcher/minecraft/mod/ResourcePack.h @@ -42,6 +42,8 @@ class ResourcePack : public Resource { /** Thread-safe. */ void setImage(QImage new_image); + bool valid() const override; + [[nodiscard]] auto compare(Resource const& other, SortType type) const -> std::pair override; [[nodiscard]] bool applyFilter(QRegularExpression filter) const override; diff --git a/launcher/minecraft/mod/TexturePack.cpp b/launcher/minecraft/mod/TexturePack.cpp index 796eb69d0..99d555843 100644 --- a/launcher/minecraft/mod/TexturePack.cpp +++ b/launcher/minecraft/mod/TexturePack.cpp @@ -62,3 +62,8 @@ QPixmap TexturePack::image(QSize size) TexturePackUtils::process(*this); return image(size); } + +bool TexturePack::valid() const +{ + return m_description != nullptr; +} diff --git a/launcher/minecraft/mod/TexturePack.h b/launcher/minecraft/mod/TexturePack.h index 6aa5e18ef..81bd5c699 100644 --- a/launcher/minecraft/mod/TexturePack.h +++ b/launcher/minecraft/mod/TexturePack.h @@ -48,6 +48,8 @@ class TexturePack : public Resource { /** Thread-safe. */ void setImage(QImage new_image); + bool valid() const override; + protected: mutable QMutex m_data_lock; From f527958cb35b976d88e7037bda62762c1ffe6e13 Mon Sep 17 00:00:00 2001 From: Ryan Cao <70191398+ryanccn@users.noreply.github.com> Date: Sat, 19 Nov 2022 23:42:56 +0800 Subject: [PATCH 034/155] fix: check if packFormat is valid for resourcepack parsing Signed-off-by: Ryan Cao <70191398+ryanccn@users.noreply.github.com> --- launcher/minecraft/mod/ResourcePack.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/launcher/minecraft/mod/ResourcePack.cpp b/launcher/minecraft/mod/ResourcePack.cpp index 9f46cd2c3..1e9db5969 100644 --- a/launcher/minecraft/mod/ResourcePack.cpp +++ b/launcher/minecraft/mod/ResourcePack.cpp @@ -117,5 +117,5 @@ bool ResourcePack::applyFilter(QRegularExpression filter) const bool ResourcePack::valid() const { - return m_pack_format != 0; + return s_pack_format_versions.contains(m_pack_format); } From a33b8049238329fa97545c0b2db5bb8c2f7545c6 Mon Sep 17 00:00:00 2001 From: Ryan Cao <70191398+ryanccn@users.noreply.github.com> Date: Sat, 19 Nov 2022 23:47:47 +0800 Subject: [PATCH 035/155] fix: add resource pack format for 1.19.3 Co-authored-by: Rachel Powers <508861+Ryex@users.noreply.github.com> Signed-off-by: Ryan Cao <70191398+ryanccn@users.noreply.github.com> --- launcher/minecraft/mod/ResourcePack.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/launcher/minecraft/mod/ResourcePack.cpp b/launcher/minecraft/mod/ResourcePack.cpp index 1e9db5969..ef0370d02 100644 --- a/launcher/minecraft/mod/ResourcePack.cpp +++ b/launcher/minecraft/mod/ResourcePack.cpp @@ -15,7 +15,7 @@ static const QMap> s_pack_format_versions = { { 3, { Version("1.11"), Version("1.12.2") } }, { 4, { Version("1.13"), Version("1.14.4") } }, { 5, { Version("1.15"), Version("1.16.1") } }, { 6, { Version("1.16.2"), Version("1.16.5") } }, { 7, { Version("1.17"), Version("1.17.1") } }, { 8, { Version("1.18"), Version("1.18.2") } }, - { 9, { Version("1.19"), Version("1.19.2") } }, + { 9, { Version("1.19"), Version("1.19.2") } }, { 11, { Version("1.19.3"), Version("1.19.3") } }, }; void ResourcePack::setPackFormat(int new_format_id) From 1f6b8f9d2bddd73e6cfd9d430ef9e37d1910adff Mon Sep 17 00:00:00 2001 From: Ryan Cao <70191398+ryanccn@users.noreply.github.com> Date: Sat, 19 Nov 2022 23:59:30 +0800 Subject: [PATCH 036/155] fix instance IDs and resource pack imports Signed-off-by: Ryan Cao <70191398+ryanccn@users.noreply.github.com> --- launcher/minecraft/mod/tasks/LocalResourcePackParseTask.cpp | 2 +- launcher/minecraft/mod/tasks/LocalTexturePackParseTask.cpp | 2 +- launcher/ui/dialogs/ImportResourcePackDialog.cpp | 5 +++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/launcher/minecraft/mod/tasks/LocalResourcePackParseTask.cpp b/launcher/minecraft/mod/tasks/LocalResourcePackParseTask.cpp index 4f87bc130..d744c5350 100644 --- a/launcher/minecraft/mod/tasks/LocalResourcePackParseTask.cpp +++ b/launcher/minecraft/mod/tasks/LocalResourcePackParseTask.cpp @@ -152,7 +152,7 @@ bool LocalResourcePackParseTask::abort() void LocalResourcePackParseTask::executeTask() { - Q_ASSERT(m_resource_pack.valid()); + // Q_ASSERT(m_resource_pack.valid()); if (!ResourcePackUtils::process(m_resource_pack)) return; diff --git a/launcher/minecraft/mod/tasks/LocalTexturePackParseTask.cpp b/launcher/minecraft/mod/tasks/LocalTexturePackParseTask.cpp index bf1e308fd..f23117ee2 100644 --- a/launcher/minecraft/mod/tasks/LocalTexturePackParseTask.cpp +++ b/launcher/minecraft/mod/tasks/LocalTexturePackParseTask.cpp @@ -143,7 +143,7 @@ bool LocalTexturePackParseTask::abort() void LocalTexturePackParseTask::executeTask() { - Q_ASSERT(m_texture_pack.valid()); + // Q_ASSERT(m_texture_pack.valid()); if (!TexturePackUtils::process(m_texture_pack)) return; diff --git a/launcher/ui/dialogs/ImportResourcePackDialog.cpp b/launcher/ui/dialogs/ImportResourcePackDialog.cpp index ef76445cf..4fe28540b 100644 --- a/launcher/ui/dialogs/ImportResourcePackDialog.cpp +++ b/launcher/ui/dialogs/ImportResourcePackDialog.cpp @@ -7,6 +7,7 @@ #include "Application.h" #include "InstanceList.h" +#include #include "ui/instanceview/InstanceDelegate.h" ImportResourcePackDialog::ImportResourcePackDialog(QWidget* parent) : QDialog(parent), ui(new Ui::ImportResourcePackDialog) @@ -40,7 +41,7 @@ ImportResourcePackDialog::ImportResourcePackDialog(QWidget* parent) : QDialog(pa void ImportResourcePackDialog::activated(QModelIndex index) { - selectedInstanceKey = index.data(Qt::UserRole).toString(); + selectedInstanceKey = index.data(InstanceList::InstanceIDRole).toString(); accept(); } @@ -49,7 +50,7 @@ void ImportResourcePackDialog::selectionChanged(QItemSelection selected, QItemSe if (selected.empty()) return; - QString key = selected.first().indexes().first().data(Qt::UserRole).toString(); + QString key = selected.first().indexes().first().data(InstanceList::InstanceIDRole).toString(); if (!key.isEmpty()) { selectedInstanceKey = key; } From a99cd16422bb577028a1caaa6e5bde300ac78372 Mon Sep 17 00:00:00 2001 From: Ryan Cao <70191398+ryanccn@users.noreply.github.com> Date: Sun, 20 Nov 2022 00:14:16 +0800 Subject: [PATCH 037/155] fix: resource pack import dialog icons and add message Signed-off-by: Ryan Cao <70191398+ryanccn@users.noreply.github.com> --- launcher/ui/dialogs/ImportResourcePackDialog.cpp | 6 +++++- launcher/ui/dialogs/ImportResourcePackDialog.h | 3 +++ launcher/ui/dialogs/ImportResourcePackDialog.ui | 9 ++++++++- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/launcher/ui/dialogs/ImportResourcePackDialog.cpp b/launcher/ui/dialogs/ImportResourcePackDialog.cpp index 4fe28540b..2b7466052 100644 --- a/launcher/ui/dialogs/ImportResourcePackDialog.cpp +++ b/launcher/ui/dialogs/ImportResourcePackDialog.cpp @@ -8,6 +8,7 @@ #include "InstanceList.h" #include +#include "ui/instanceview/InstanceProxyModel.h" #include "ui/instanceview/InstanceDelegate.h" ImportResourcePackDialog::ImportResourcePackDialog(QWidget* parent) : QDialog(parent), ui(new Ui::ImportResourcePackDialog) @@ -32,7 +33,10 @@ ImportResourcePackDialog::ImportResourcePackDialog(QWidget* parent) : QDialog(pa contentsWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); contentsWidget->setItemDelegate(new ListViewDelegate()); - contentsWidget->setModel(APPLICATION->instances().get()); + proxyModel = new InstanceProxyModel(this); + proxyModel->setSourceModel(APPLICATION->instances().get()); + proxyModel->sort(0); + contentsWidget->setModel(proxyModel); connect(contentsWidget, SIGNAL(doubleClicked(QModelIndex)), SLOT(activated(QModelIndex))); connect(contentsWidget->selectionModel(), SIGNAL(selectionChanged(QItemSelection, QItemSelection)), diff --git a/launcher/ui/dialogs/ImportResourcePackDialog.h b/launcher/ui/dialogs/ImportResourcePackDialog.h index b077a811b..8356f204f 100644 --- a/launcher/ui/dialogs/ImportResourcePackDialog.h +++ b/launcher/ui/dialogs/ImportResourcePackDialog.h @@ -3,6 +3,8 @@ #include #include +#include "ui/instanceview/InstanceProxyModel.h" + namespace Ui { class ImportResourcePackDialog; } @@ -13,6 +15,7 @@ class ImportResourcePackDialog : public QDialog { public: explicit ImportResourcePackDialog(QWidget* parent = 0); ~ImportResourcePackDialog(); + InstanceProxyModel* proxyModel; QString selectedInstanceKey; private: diff --git a/launcher/ui/dialogs/ImportResourcePackDialog.ui b/launcher/ui/dialogs/ImportResourcePackDialog.ui index 2a1de0f9b..20cb91770 100644 --- a/launcher/ui/dialogs/ImportResourcePackDialog.ui +++ b/launcher/ui/dialogs/ImportResourcePackDialog.ui @@ -11,9 +11,16 @@ - Pick icon + Choose instance to import + + + + Choose the instance you would like to import this resource pack to. + + + From e0e428ce38ff5662089036a6bbf017a3b39f478f Mon Sep 17 00:00:00 2001 From: Ryan Cao <70191398+ryanccn@users.noreply.github.com> Date: Sun, 20 Nov 2022 00:28:35 +0800 Subject: [PATCH 038/155] fix: add support for CLI and drag and drop Signed-off-by: Ryan Cao <70191398+ryanccn@users.noreply.github.com> --- launcher/Application.cpp | 35 +-------------------------- launcher/ui/MainWindow.cpp | 48 +++++++++++++++++++++++++++++++------- 2 files changed, 41 insertions(+), 42 deletions(-) diff --git a/launcher/Application.cpp b/launcher/Application.cpp index 9258aec48..0fbe4ae2c 100644 --- a/launcher/Application.cpp +++ b/launcher/Application.cpp @@ -66,7 +66,6 @@ #include "ui/setupwizard/PasteWizardPage.h" #include "ui/dialogs/CustomMessageBox.h" -#include "ui/dialogs/ImportResourcePackDialog.h" #include "ui/pagedialog/PageDialog.h" @@ -98,12 +97,6 @@ #include "java/JavaUtils.h" #include -#include -#include -#include -#include -#include -#include #include "updater/UpdateChecker.h" @@ -938,33 +931,7 @@ bool Application::event(QEvent* event) if (event->type() == QEvent::FileOpen) { auto ev = static_cast(event); - - ResourcePack rp{ QFileInfo(ev->file()) }; - TexturePack tp{ QFileInfo(ev->file()) }; - - ImportResourcePackDialog dlg(APPLICATION->m_mainWindow); - - if (ResourcePackUtils::process(rp) && rp.valid()) { - dlg.exec(); - - if (dlg.result() == QDialog::Accepted) { - qDebug() << "Selected instance to import resource pack into: " << dlg.selectedInstanceKey; - auto instance = APPLICATION->instances()->getInstanceById(dlg.selectedInstanceKey); - auto instanceButBuffed = std::dynamic_pointer_cast(instance); - instanceButBuffed->resourcePackList()->installResource(ev->file()); - } - } else if (TexturePackUtils::process(tp) && tp.valid()) { - dlg.exec(); - - if (dlg.result() == QDialog::Accepted) { - qDebug() << "Selected instance to import texture pack into: " << dlg.selectedInstanceKey; - auto instance = APPLICATION->instances()->getInstanceById(dlg.selectedInstanceKey); - auto instanceButBuffed = std::dynamic_pointer_cast(instance); - instanceButBuffed->texturePackList()->installResource(ev->file()); - } - } else { - m_mainWindow->droppedURLs({ ev->url() }); - } + m_mainWindow->droppedURLs({ ev->url() }); } return QApplication::event(event); diff --git a/launcher/ui/MainWindow.cpp b/launcher/ui/MainWindow.cpp index 929f2a85c..ed61777e5 100644 --- a/launcher/ui/MainWindow.cpp +++ b/launcher/ui/MainWindow.cpp @@ -106,8 +106,16 @@ #include "ui/dialogs/UpdateDialog.h" #include "ui/dialogs/EditAccountDialog.h" #include "ui/dialogs/ExportInstanceDialog.h" +#include "ui/dialogs/ImportResourcePackDialog.h" #include "ui/themes/ITheme.h" +#include +#include +#include +#include +#include +#include + #include "UpdateController.h" #include "KonamiCode.h" @@ -1794,16 +1802,40 @@ void MainWindow::on_actionAddInstance_triggered() void MainWindow::droppedURLs(QList urls) { - for(auto & url:urls) - { - if(url.isLocalFile()) - { - addInstance(url.toLocalFile()); - } - else - { + for (auto& url : urls) { + if (url.isLocalFile()) { + auto localFileName = url.toLocalFile(); + + ResourcePack rp{ QFileInfo(localFileName) }; + TexturePack tp{ QFileInfo(localFileName) }; + + ImportResourcePackDialog dlg(this); + + if (ResourcePackUtils::process(rp) && rp.valid()) { + dlg.exec(); + + if (dlg.result() == QDialog::Accepted) { + qDebug() << "Selected instance to import resource pack into: " << dlg.selectedInstanceKey; + auto instance = APPLICATION->instances()->getInstanceById(dlg.selectedInstanceKey); + auto instanceButBuffed = std::dynamic_pointer_cast(instance); + instanceButBuffed->resourcePackList()->installResource(localFileName); + } + } else if (TexturePackUtils::process(tp) && tp.valid()) { + dlg.exec(); + + if (dlg.result() == QDialog::Accepted) { + qDebug() << "Selected instance to import texture pack into: " << dlg.selectedInstanceKey; + auto instance = APPLICATION->instances()->getInstanceById(dlg.selectedInstanceKey); + auto instanceButBuffed = std::dynamic_pointer_cast(instance); + instanceButBuffed->texturePackList()->installResource(localFileName); + } + } else { + addInstance(localFileName); + } + } else { addInstance(url.toString()); } + // Only process one dropped file... break; } From d92ae530d7c585eb859d852ba1877230a82d867e Mon Sep 17 00:00:00 2001 From: Ryan Cao <70191398+ryanccn@users.noreply.github.com> Date: Sun, 20 Nov 2022 00:31:58 +0800 Subject: [PATCH 039/155] fix: stray include Signed-off-by: Ryan Cao <70191398+ryanccn@users.noreply.github.com> --- launcher/Application.cpp | 1 - launcher/ui/MainWindow.cpp | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/launcher/Application.cpp b/launcher/Application.cpp index 0fbe4ae2c..c5594b215 100644 --- a/launcher/Application.cpp +++ b/launcher/Application.cpp @@ -96,7 +96,6 @@ #include "net/HttpMetaCache.h" #include "java/JavaUtils.h" -#include #include "updater/UpdateChecker.h" diff --git a/launcher/ui/MainWindow.cpp b/launcher/ui/MainWindow.cpp index ed61777e5..98fd79be0 100644 --- a/launcher/ui/MainWindow.cpp +++ b/launcher/ui/MainWindow.cpp @@ -71,6 +71,7 @@ #include #include +#include #include #include #include From 2367903ac6c6f6778935ed1bbab88fd8342dffa0 Mon Sep 17 00:00:00 2001 From: flow Date: Sat, 19 Nov 2022 11:55:40 -0300 Subject: [PATCH 040/155] refactor: clean up WideBar a bit Signed-off-by: flow --- launcher/ui/widgets/WideBar.cpp | 130 +++++++++++++++----------------- launcher/ui/widgets/WideBar.h | 15 ++-- 2 files changed, 68 insertions(+), 77 deletions(-) diff --git a/launcher/ui/widgets/WideBar.cpp b/launcher/ui/widgets/WideBar.cpp index 79f1e0c96..ed5c5bc86 100644 --- a/launcher/ui/widgets/WideBar.cpp +++ b/launcher/ui/widgets/WideBar.cpp @@ -1,19 +1,21 @@ #include "WideBar.h" #include -#include -class ActionButton : public QToolButton -{ +class ActionButton : public QToolButton { Q_OBJECT -public: - ActionButton(QAction * action, QWidget * parent = 0) : QToolButton(parent), m_action(action) { + public: + ActionButton(QAction* action, QWidget* parent = nullptr) : QToolButton(parent), m_action(action) + { setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + connect(action, &QAction::changed, this, &ActionButton::actionChanged); connect(this, &ActionButton::clicked, action, &QAction::trigger); + actionChanged(); }; -private slots: - void actionChanged() { + private slots: + void actionChanged() + { setEnabled(m_action->isEnabled()); setChecked(m_action->isChecked()); setCheckable(m_action->isCheckable()); @@ -23,10 +25,10 @@ private slots: setHidden(!m_action->isVisible()); setFocusPolicy(Qt::NoFocus); } -private: - QAction * m_action; -}; + private: + QAction* m_action; +}; WideBar::WideBar(const QString& title, QWidget* parent) : QToolBar(title, parent) { @@ -40,116 +42,102 @@ WideBar::WideBar(QWidget* parent) : QToolBar(parent) setMovable(false); } -struct WideBar::BarEntry { - enum Type { - None, - Action, - Separator, - Spacer - } type = None; - QAction *qAction = nullptr; - QAction *wideAction = nullptr; -}; - - -WideBar::~WideBar() -{ - for(auto *iter: m_entries) { - delete iter; - } -} - void WideBar::addAction(QAction* action) { - auto entry = new BarEntry(); - entry->qAction = addWidget(new ActionButton(action, this)); - entry->wideAction = action; - entry->type = BarEntry::Action; + BarEntry entry; + entry.bar_action = addWidget(new ActionButton(action, this)); + entry.menu_action = action; + entry.type = BarEntry::Type::Action; + m_entries.push_back(entry); } void WideBar::addSeparator() { - auto entry = new BarEntry(); - entry->qAction = QToolBar::addSeparator(); - entry->type = BarEntry::Separator; + BarEntry entry; + entry.bar_action = QToolBar::addSeparator(); + entry.type = BarEntry::Type::Separator; + m_entries.push_back(entry); } -auto WideBar::getMatching(QAction* act) -> QList::iterator +auto WideBar::getMatching(QAction* act) -> QList::iterator { - auto iter = std::find_if(m_entries.begin(), m_entries.end(), [act](BarEntry * entry) { - return entry->wideAction == act; - }); - + auto iter = std::find_if(m_entries.begin(), m_entries.end(), [act](BarEntry const& entry) { return entry.menu_action == act; }); + return iter; } -void WideBar::insertActionBefore(QAction* before, QAction* action){ +void WideBar::insertActionBefore(QAction* before, QAction* action) +{ auto iter = getMatching(before); - if(iter == m_entries.end()) + if (iter == m_entries.end()) return; - auto entry = new BarEntry(); - entry->qAction = insertWidget((*iter)->qAction, new ActionButton(action, this)); - entry->wideAction = action; - entry->type = BarEntry::Action; + BarEntry entry; + entry.bar_action = insertWidget(iter->bar_action, new ActionButton(action, this)); + entry.menu_action = action; + entry.type = BarEntry::Type::Action; + m_entries.insert(iter, entry); } -void WideBar::insertActionAfter(QAction* after, QAction* action){ +void WideBar::insertActionAfter(QAction* after, QAction* action) +{ auto iter = getMatching(after); - if(iter == m_entries.end()) + if (iter == m_entries.end()) return; - auto entry = new BarEntry(); - entry->qAction = insertWidget((*(iter+1))->qAction, new ActionButton(action, this)); - entry->wideAction = action; - entry->type = BarEntry::Action; + BarEntry entry; + entry.bar_action = insertWidget((iter + 1)->bar_action, new ActionButton(action, this)); + entry.menu_action = action; + entry.type = BarEntry::Type::Action; + m_entries.insert(iter + 1, entry); } void WideBar::insertSpacer(QAction* action) { auto iter = getMatching(action); - if(iter == m_entries.end()) + if (iter == m_entries.end()) return; - QWidget* spacer = new QWidget(); + auto* spacer = new QWidget(); spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - auto entry = new BarEntry(); - entry->qAction = insertWidget((*iter)->qAction, spacer); - entry->type = BarEntry::Spacer; + BarEntry entry; + entry.bar_action = insertWidget(iter->bar_action, spacer); + entry.type = BarEntry::Type::Spacer; m_entries.insert(iter, entry); } void WideBar::insertSeparator(QAction* before) { auto iter = getMatching(before); - if(iter == m_entries.end()) + if (iter == m_entries.end()) return; - auto entry = new BarEntry(); - entry->qAction = QToolBar::insertSeparator(before); - entry->type = BarEntry::Separator; + BarEntry entry; + entry.bar_action = QToolBar::insertSeparator(before); + entry.type = BarEntry::Type::Separator; + m_entries.insert(iter, entry); } -QMenu * WideBar::createContextMenu(QWidget *parent, const QString & title) +QMenu* WideBar::createContextMenu(QWidget* parent, const QString& title) { - QMenu *contextMenu = new QMenu(title, parent); - for(auto & item: m_entries) { - switch(item->type) { + auto* contextMenu = new QMenu(title, parent); + for (auto& item : m_entries) { + switch (item.type) { default: - case BarEntry::None: + case BarEntry::Type::None: break; - case BarEntry::Separator: - case BarEntry::Spacer: + case BarEntry::Type::Separator: + case BarEntry::Type::Spacer: contextMenu->addSeparator(); break; - case BarEntry::Action: - contextMenu->addAction(item->wideAction); + case BarEntry::Type::Action: + contextMenu->addAction(item.menu_action); break; } } diff --git a/launcher/ui/widgets/WideBar.h b/launcher/ui/widgets/WideBar.h index 8ff62ef24..4a714c80c 100644 --- a/launcher/ui/widgets/WideBar.h +++ b/launcher/ui/widgets/WideBar.h @@ -2,17 +2,16 @@ #include #include +#include #include -class QMenu; - class WideBar : public QToolBar { Q_OBJECT public: explicit WideBar(const QString& title, QWidget* parent = nullptr); explicit WideBar(QWidget* parent = nullptr); - virtual ~WideBar(); + ~WideBar() override = default; void addAction(QAction* action); void addSeparator(); @@ -25,10 +24,14 @@ class WideBar : public QToolBar { QMenu* createContextMenu(QWidget* parent = nullptr, const QString& title = QString()); private: - struct BarEntry; + struct BarEntry { + enum class Type { None, Action, Separator, Spacer } type = Type::None; + QAction* bar_action = nullptr; + QAction* menu_action = nullptr; + }; - auto getMatching(QAction* act) -> QList::iterator; + auto getMatching(QAction* act) -> QList::iterator; private: - QList m_entries; + QList m_entries; }; From 6e1639551bbe98b32e9abef2d816e8abe01789e4 Mon Sep 17 00:00:00 2001 From: flow Date: Sat, 19 Nov 2022 13:39:43 -0300 Subject: [PATCH 041/155] feat(WideBar): allow hiding buttons with right-click Signed-off-by: flow --- launcher/ui/widgets/WideBar.cpp | 58 ++++++++++++++++++++++++++++++++- launcher/ui/widgets/WideBar.h | 7 ++++ 2 files changed, 64 insertions(+), 1 deletion(-) diff --git a/launcher/ui/widgets/WideBar.cpp b/launcher/ui/widgets/WideBar.cpp index ed5c5bc86..ed7dc5fa0 100644 --- a/launcher/ui/widgets/WideBar.cpp +++ b/launcher/ui/widgets/WideBar.cpp @@ -1,4 +1,6 @@ #include "WideBar.h" + +#include #include class ActionButton : public QToolButton { @@ -13,7 +15,7 @@ class ActionButton : public QToolButton { actionChanged(); }; - private slots: + public slots: void actionChanged() { setEnabled(m_action->isEnabled()); @@ -34,12 +36,16 @@ WideBar::WideBar(const QString& title, QWidget* parent) : QToolBar(title, parent { setFloatable(false); setMovable(false); + + m_bar_menu = std::make_unique(this); } WideBar::WideBar(QWidget* parent) : QToolBar(parent) { setFloatable(false); setMovable(false); + + m_bar_menu = std::make_unique(this); } void WideBar::addAction(QAction* action) @@ -50,6 +56,8 @@ void WideBar::addAction(QAction* action) entry.type = BarEntry::Type::Action; m_entries.push_back(entry); + + m_menu_state = MenuState::Dirty; } void WideBar::addSeparator() @@ -80,6 +88,8 @@ void WideBar::insertActionBefore(QAction* before, QAction* action) entry.type = BarEntry::Type::Action; m_entries.insert(iter, entry); + + m_menu_state = MenuState::Dirty; } void WideBar::insertActionAfter(QAction* after, QAction* action) @@ -94,6 +104,8 @@ void WideBar::insertActionAfter(QAction* after, QAction* action) entry.type = BarEntry::Type::Action; m_entries.insert(iter + 1, entry); + + m_menu_state = MenuState::Dirty; } void WideBar::insertSpacer(QAction* action) @@ -144,4 +156,48 @@ QMenu* WideBar::createContextMenu(QWidget* parent, const QString& title) return contextMenu; } +static void copyAction(QAction* from, QAction* to) +{ + Q_ASSERT(from); + Q_ASSERT(to); + + to->setText(from->text()); + to->setIcon(from->icon()); + to->setToolTip(from->toolTip()); +} + +void WideBar::contextMenuEvent(QContextMenuEvent* event) +{ + if (m_menu_state == MenuState::Dirty) { + for (auto* old_action : m_bar_menu->actions()) + old_action->deleteLater(); + + m_bar_menu->clear(); + + for (auto& entry : m_entries) { + if (entry.type != BarEntry::Type::Action) + continue; + + auto act = new QAction(); + copyAction(entry.menu_action, act); + + act->setCheckable(true); + act->setChecked(entry.bar_action->isVisible()); + + connect(act, &QAction::toggled, entry.bar_action, [this, &entry](bool toggled){ + entry.bar_action->setVisible(toggled); + + // NOTE: This is needed so that disabled actions get reflected on the button when it is made visible. + static_cast(widgetForAction(entry.bar_action))->actionChanged(); + }); + + m_bar_menu->addAction(act); + } + + m_menu_state = MenuState::Fresh; + } + + m_bar_menu->popup(event->globalPos()); +} + #include "WideBar.moc" diff --git a/launcher/ui/widgets/WideBar.h b/launcher/ui/widgets/WideBar.h index 4a714c80c..8421eaf4b 100644 --- a/launcher/ui/widgets/WideBar.h +++ b/launcher/ui/widgets/WideBar.h @@ -5,6 +5,8 @@ #include #include +#include + class WideBar : public QToolBar { Q_OBJECT @@ -22,6 +24,7 @@ class WideBar : public QToolBar { void insertActionAfter(QAction* after, QAction* action); QMenu* createContextMenu(QWidget* parent = nullptr, const QString& title = QString()); + void contextMenuEvent(QContextMenuEvent*) override; private: struct BarEntry { @@ -34,4 +37,8 @@ class WideBar : public QToolBar { private: QList m_entries; + + // Menu to toggle visibility from buttons in the bar + std::unique_ptr m_bar_menu = nullptr; + enum class MenuState { Fresh, Dirty } m_menu_state = MenuState::Dirty; }; From 479843f56b42d7044d3d02278a9cabc2c24e147a Mon Sep 17 00:00:00 2001 From: flow Date: Sat, 19 Nov 2022 17:10:43 -0300 Subject: [PATCH 042/155] feat(WideBar): allow loading/unloading visibility via a byte array I really wanted to use a QBitArray :c Signed-off-by: flow --- launcher/ui/widgets/WideBar.cpp | 30 ++++++++++++++++++++++++++++++ launcher/ui/widgets/WideBar.h | 6 ++++++ 2 files changed, 36 insertions(+) diff --git a/launcher/ui/widgets/WideBar.cpp b/launcher/ui/widgets/WideBar.cpp index ed7dc5fa0..2ad2caec7 100644 --- a/launcher/ui/widgets/WideBar.cpp +++ b/launcher/ui/widgets/WideBar.cpp @@ -200,4 +200,34 @@ void WideBar::contextMenuEvent(QContextMenuEvent* event) m_bar_menu->popup(event->globalPos()); } +[[nodiscard]] QByteArray WideBar::getVisibilityState() const +{ + QByteArray state; + + for (auto const& entry : m_entries) { + if (entry.type != BarEntry::Type::Action) + continue; + + state.append(entry.bar_action->isVisible() ? '1' : '0'); + } + + return state; +} + +void WideBar::setVisibilityState(QByteArray&& state) +{ + qsizetype i = 0; + for (auto& entry : m_entries) { + if (entry.type != BarEntry::Type::Action) + continue; + if (i == state.size()) + break; + + entry.bar_action->setVisible(state.at(i++) == '1'); + + // NOTE: This is needed so that disabled actions get reflected on the button when it is made visible. + static_cast(widgetForAction(entry.bar_action))->actionChanged(); + } +} + #include "WideBar.moc" diff --git a/launcher/ui/widgets/WideBar.h b/launcher/ui/widgets/WideBar.h index 8421eaf4b..0d60f8a4a 100644 --- a/launcher/ui/widgets/WideBar.h +++ b/launcher/ui/widgets/WideBar.h @@ -26,6 +26,12 @@ class WideBar : public QToolBar { QMenu* createContextMenu(QWidget* parent = nullptr, const QString& title = QString()); void contextMenuEvent(QContextMenuEvent*) override; + // Ideally we would use a QBitArray for this, but it doesn't support string conversion, + // so using it in settings is very messy. + + [[nodiscard]] QByteArray getVisibilityState() const; + void setVisibilityState(QByteArray&&); + private: struct BarEntry { enum class Type { None, Action, Separator, Spacer } type = Type::None; From 2d69d63efe12a1cfaf391a59cb6b7630a436410e Mon Sep 17 00:00:00 2001 From: flow Date: Sat, 19 Nov 2022 17:12:31 -0300 Subject: [PATCH 043/155] feat(InstancePages): save/load wide bar visibility settings Signed-off-by: flow --- .../ui/pages/instance/ExternalResourcesPage.cpp | 10 ++++++++++ .../ui/pages/instance/ExternalResourcesPage.h | 3 +++ launcher/ui/pages/instance/ScreenshotsPage.cpp | 13 +++++++++++++ launcher/ui/pages/instance/ScreenshotsPage.h | 7 ++++++- launcher/ui/pages/instance/ServersPage.cpp | 10 ++++++++++ launcher/ui/pages/instance/ServersPage.h | 4 ++++ launcher/ui/pages/instance/VersionPage.cpp | 15 +++++++++++++++ launcher/ui/pages/instance/VersionPage.h | 5 +++++ launcher/ui/pages/instance/WorldListPage.cpp | 10 ++++++++++ launcher/ui/pages/instance/WorldListPage.h | 4 ++++ 10 files changed, 80 insertions(+), 1 deletion(-) diff --git a/launcher/ui/pages/instance/ExternalResourcesPage.cpp b/launcher/ui/pages/instance/ExternalResourcesPage.cpp index b6c873cc2..381fa30cc 100644 --- a/launcher/ui/pages/instance/ExternalResourcesPage.cpp +++ b/launcher/ui/pages/instance/ExternalResourcesPage.cpp @@ -70,11 +70,21 @@ void ExternalResourcesPage::ShowContextMenu(const QPoint& pos) void ExternalResourcesPage::openedImpl() { m_model->startWatching(); + + auto const setting_name = QString("WideBarVisibility_%1").arg(id()); + if (!APPLICATION->settings()->contains(setting_name)) + m_wide_bar_setting = APPLICATION->settings()->registerSetting(setting_name); + else + m_wide_bar_setting = APPLICATION->settings()->getSetting(setting_name); + + ui->actionsToolbar->setVisibilityState(m_wide_bar_setting->get().toByteArray()); } void ExternalResourcesPage::closedImpl() { m_model->stopWatching(); + + m_wide_bar_setting->set(ui->actionsToolbar->getVisibilityState()); } void ExternalResourcesPage::retranslate() diff --git a/launcher/ui/pages/instance/ExternalResourcesPage.h b/launcher/ui/pages/instance/ExternalResourcesPage.h index 8e352cef9..b816e742a 100644 --- a/launcher/ui/pages/instance/ExternalResourcesPage.h +++ b/launcher/ui/pages/instance/ExternalResourcesPage.h @@ -4,6 +4,7 @@ #include #include "Application.h" +#include "settings/Setting.h" #include "minecraft/MinecraftInstance.h" #include "ui/pages/BasePage.h" @@ -71,4 +72,6 @@ class ExternalResourcesPage : public QMainWindow, public BasePage { QString m_viewFilter; bool m_controlsEnabled = true; + + std::shared_ptr m_wide_bar_setting = nullptr; }; diff --git a/launcher/ui/pages/instance/ScreenshotsPage.cpp b/launcher/ui/pages/instance/ScreenshotsPage.cpp index c97253e4b..0092aef33 100644 --- a/launcher/ui/pages/instance/ScreenshotsPage.cpp +++ b/launcher/ui/pages/instance/ScreenshotsPage.cpp @@ -537,6 +537,19 @@ void ScreenshotsPage::openedImpl() ui->listView->setModel(nullptr); } } + + auto const setting_name = QString("WideBarVisibility_%1").arg(id()); + if (!APPLICATION->settings()->contains(setting_name)) + m_wide_bar_setting = APPLICATION->settings()->registerSetting(setting_name); + else + m_wide_bar_setting = APPLICATION->settings()->getSetting(setting_name); + + ui->toolBar->setVisibilityState(m_wide_bar_setting->get().toByteArray()); +} + +void ScreenshotsPage::closedImpl() +{ + m_wide_bar_setting->set(ui->toolBar->getVisibilityState()); } #include "ScreenshotsPage.moc" diff --git a/launcher/ui/pages/instance/ScreenshotsPage.h b/launcher/ui/pages/instance/ScreenshotsPage.h index c22706af9..2eb0de04f 100644 --- a/launcher/ui/pages/instance/ScreenshotsPage.h +++ b/launcher/ui/pages/instance/ScreenshotsPage.h @@ -40,6 +40,8 @@ #include "ui/pages/BasePage.h" #include +#include "settings/Setting.h" + class QFileSystemModel; class QIdentityProxyModel; namespace Ui @@ -59,7 +61,8 @@ public: explicit ScreenshotsPage(QString path, QWidget *parent = 0); virtual ~ScreenshotsPage(); - virtual void openedImpl() override; + void openedImpl() override; + void closedImpl() override; enum { @@ -110,4 +113,6 @@ private: QString m_folder; bool m_valid = false; bool m_uploadActive = false; + + std::shared_ptr m_wide_bar_setting = nullptr; }; diff --git a/launcher/ui/pages/instance/ServersPage.cpp b/launcher/ui/pages/instance/ServersPage.cpp index d64bcb767..a625e20b6 100644 --- a/launcher/ui/pages/instance/ServersPage.cpp +++ b/launcher/ui/pages/instance/ServersPage.cpp @@ -765,11 +765,21 @@ void ServersPage::updateState() void ServersPage::openedImpl() { m_model->observe(); + + auto const setting_name = QString("WideBarVisibility_%1").arg(id()); + if (!APPLICATION->settings()->contains(setting_name)) + m_wide_bar_setting = APPLICATION->settings()->registerSetting(setting_name); + else + m_wide_bar_setting = APPLICATION->settings()->getSetting(setting_name); + + ui->toolBar->setVisibilityState(m_wide_bar_setting->get().toByteArray()); } void ServersPage::closedImpl() { m_model->unobserve(); + + m_wide_bar_setting->set(ui->toolBar->getVisibilityState()); } void ServersPage::on_actionAdd_triggered() diff --git a/launcher/ui/pages/instance/ServersPage.h b/launcher/ui/pages/instance/ServersPage.h index 37399d49f..548d4d1b1 100644 --- a/launcher/ui/pages/instance/ServersPage.h +++ b/launcher/ui/pages/instance/ServersPage.h @@ -42,6 +42,8 @@ #include "ui/pages/BasePage.h" #include +#include "settings/Setting.h" + namespace Ui { class ServersPage; @@ -112,5 +114,7 @@ private: // data Ui::ServersPage *ui = nullptr; ServersModel * m_model = nullptr; InstancePtr m_inst = nullptr; + + std::shared_ptr m_wide_bar_setting = nullptr; }; diff --git a/launcher/ui/pages/instance/VersionPage.cpp b/launcher/ui/pages/instance/VersionPage.cpp index a021c633f..84052f373 100644 --- a/launcher/ui/pages/instance/VersionPage.cpp +++ b/launcher/ui/pages/instance/VersionPage.cpp @@ -125,6 +125,21 @@ void VersionPage::retranslate() ui->retranslateUi(this); } +void VersionPage::openedImpl() +{ + auto const setting_name = QString("WideBarVisibility_%1").arg(id()); + if (!APPLICATION->settings()->contains(setting_name)) + m_wide_bar_setting = APPLICATION->settings()->registerSetting(setting_name); + else + m_wide_bar_setting = APPLICATION->settings()->getSetting(setting_name); + + ui->toolBar->setVisibilityState(m_wide_bar_setting->get().toByteArray()); +} +void VersionPage::closedImpl() +{ + m_wide_bar_setting->set(ui->toolBar->getVisibilityState()); +} + QMenu * VersionPage::createPopupMenu() { QMenu* filteredMenu = QMainWindow::createPopupMenu(); diff --git a/launcher/ui/pages/instance/VersionPage.h b/launcher/ui/pages/instance/VersionPage.h index 979311fcf..9996e7763 100644 --- a/launcher/ui/pages/instance/VersionPage.h +++ b/launcher/ui/pages/instance/VersionPage.h @@ -69,6 +69,9 @@ public: virtual bool shouldDisplay() const override; void retranslate() override; + void openedImpl() override; + void closedImpl() override; + private slots: void on_actionChange_version_triggered(); void on_actionInstall_Forge_triggered(); @@ -114,6 +117,8 @@ private: int currentIdx = 0; bool controlsEnabled = false; + std::shared_ptr m_wide_bar_setting = nullptr; + public slots: void versionCurrent(const QModelIndex ¤t, const QModelIndex &previous); diff --git a/launcher/ui/pages/instance/WorldListPage.cpp b/launcher/ui/pages/instance/WorldListPage.cpp index 85cc01ff0..93458ce4f 100644 --- a/launcher/ui/pages/instance/WorldListPage.cpp +++ b/launcher/ui/pages/instance/WorldListPage.cpp @@ -113,11 +113,21 @@ WorldListPage::WorldListPage(BaseInstance *inst, std::shared_ptr worl void WorldListPage::openedImpl() { m_worlds->startWatching(); + + auto const setting_name = QString("WideBarVisibility_%1").arg(id()); + if (!APPLICATION->settings()->contains(setting_name)) + m_wide_bar_setting = APPLICATION->settings()->registerSetting(setting_name); + else + m_wide_bar_setting = APPLICATION->settings()->getSetting(setting_name); + + ui->toolBar->setVisibilityState(m_wide_bar_setting->get().toByteArray()); } void WorldListPage::closedImpl() { m_worlds->stopWatching(); + + m_wide_bar_setting->set(ui->toolBar->getVisibilityState()); } WorldListPage::~WorldListPage() diff --git a/launcher/ui/pages/instance/WorldListPage.h b/launcher/ui/pages/instance/WorldListPage.h index 1dc9e53e0..925521bec 100644 --- a/launcher/ui/pages/instance/WorldListPage.h +++ b/launcher/ui/pages/instance/WorldListPage.h @@ -42,6 +42,8 @@ #include #include +#include "settings/Setting.h" + class WorldList; namespace Ui { @@ -102,6 +104,8 @@ private: unique_qobject_ptr m_mceditProcess; bool m_mceditStarting = false; + std::shared_ptr m_wide_bar_setting = nullptr; + private slots: void on_actionCopy_Seed_triggered(); void on_actionMCEdit_triggered(); From df0f9259c0bf79e10b27ad5b429b53559ffd15f0 Mon Sep 17 00:00:00 2001 From: flow Date: Sun, 20 Nov 2022 11:04:10 -0300 Subject: [PATCH 044/155] refactor: move RP/TP validation to their respective utils This makes it easier to validate individual resources, and allows the logic to be used in other places in the future, if we need to. Signed-off-by: flow --- .../mod/tasks/LocalResourcePackParseTask.cpp | 25 +++++++++--- .../mod/tasks/LocalResourcePackParseTask.h | 12 ++++-- .../mod/tasks/LocalTexturePackParseTask.cpp | 25 +++++++++--- .../mod/tasks/LocalTexturePackParseTask.h | 12 ++++-- launcher/ui/MainWindow.cpp | 40 +++++++++---------- 5 files changed, 76 insertions(+), 38 deletions(-) diff --git a/launcher/minecraft/mod/tasks/LocalResourcePackParseTask.cpp b/launcher/minecraft/mod/tasks/LocalResourcePackParseTask.cpp index d744c5350..f58a0620b 100644 --- a/launcher/minecraft/mod/tasks/LocalResourcePackParseTask.cpp +++ b/launcher/minecraft/mod/tasks/LocalResourcePackParseTask.cpp @@ -28,14 +28,14 @@ namespace ResourcePackUtils { -bool process(ResourcePack& pack) +bool process(ResourcePack& pack, ProcessingLevel level) { switch (pack.type()) { case ResourceType::FOLDER: - ResourcePackUtils::processFolder(pack); + ResourcePackUtils::processFolder(pack, level); return true; case ResourceType::ZIPFILE: - ResourcePackUtils::processZIP(pack); + ResourcePackUtils::processZIP(pack, level); return true; default: qWarning() << "Invalid type for resource pack parse task!"; @@ -43,7 +43,7 @@ bool process(ResourcePack& pack) } } -void processFolder(ResourcePack& pack) +void processFolder(ResourcePack& pack, ProcessingLevel level) { Q_ASSERT(pack.type() == ResourceType::FOLDER); @@ -60,6 +60,9 @@ void processFolder(ResourcePack& pack) mcmeta_file.close(); } + if (level == ProcessingLevel::BasicInfoOnly) + return; + QFileInfo image_file_info(FS::PathCombine(pack.fileinfo().filePath(), "pack.png")); if (image_file_info.isFile()) { QFile mcmeta_file(image_file_info.filePath()); @@ -74,7 +77,7 @@ void processFolder(ResourcePack& pack) } } -void processZIP(ResourcePack& pack) +void processZIP(ResourcePack& pack, ProcessingLevel level) { Q_ASSERT(pack.type() == ResourceType::ZIPFILE); @@ -98,6 +101,11 @@ void processZIP(ResourcePack& pack) file.close(); } + if (level == ProcessingLevel::BasicInfoOnly) { + zip.close(); + return; + } + if (zip.setCurrentFile("pack.png")) { if (!file.open(QIODevice::ReadOnly)) { qCritical() << "Failed to open file in zip."; @@ -138,6 +146,13 @@ void processPackPNG(ResourcePack& pack, QByteArray&& raw_data) qWarning() << "Failed to parse pack.png."; } } + +bool validate(QFileInfo file) +{ + ResourcePack rp{ file }; + return ResourcePackUtils::process(rp, ProcessingLevel::BasicInfoOnly) && rp.valid(); +} + } // namespace ResourcePackUtils LocalResourcePackParseTask::LocalResourcePackParseTask(int token, ResourcePack& rp) diff --git a/launcher/minecraft/mod/tasks/LocalResourcePackParseTask.h b/launcher/minecraft/mod/tasks/LocalResourcePackParseTask.h index d3c254645..69dbd6ad6 100644 --- a/launcher/minecraft/mod/tasks/LocalResourcePackParseTask.h +++ b/launcher/minecraft/mod/tasks/LocalResourcePackParseTask.h @@ -26,13 +26,19 @@ #include "tasks/Task.h" namespace ResourcePackUtils { -bool process(ResourcePack& pack); -void processZIP(ResourcePack& pack); -void processFolder(ResourcePack& pack); +enum class ProcessingLevel { Full, BasicInfoOnly }; + +bool process(ResourcePack& pack, ProcessingLevel level = ProcessingLevel::Full); + +void processZIP(ResourcePack& pack, ProcessingLevel level = ProcessingLevel::Full); +void processFolder(ResourcePack& pack, ProcessingLevel level = ProcessingLevel::Full); void processMCMeta(ResourcePack& pack, QByteArray&& raw_data); void processPackPNG(ResourcePack& pack, QByteArray&& raw_data); + +/** Checks whether a file is valid as a resource pack or not. */ +bool validate(QFileInfo file); } // namespace ResourcePackUtils class LocalResourcePackParseTask : public Task { diff --git a/launcher/minecraft/mod/tasks/LocalTexturePackParseTask.cpp b/launcher/minecraft/mod/tasks/LocalTexturePackParseTask.cpp index f23117ee2..8da366c1b 100644 --- a/launcher/minecraft/mod/tasks/LocalTexturePackParseTask.cpp +++ b/launcher/minecraft/mod/tasks/LocalTexturePackParseTask.cpp @@ -28,14 +28,14 @@ namespace TexturePackUtils { -bool process(TexturePack& pack) +bool process(TexturePack& pack, ProcessingLevel level) { switch (pack.type()) { case ResourceType::FOLDER: - TexturePackUtils::processFolder(pack); + TexturePackUtils::processFolder(pack, level); return true; case ResourceType::ZIPFILE: - TexturePackUtils::processZIP(pack); + TexturePackUtils::processZIP(pack, level); return true; default: qWarning() << "Invalid type for resource pack parse task!"; @@ -43,7 +43,7 @@ bool process(TexturePack& pack) } } -void processFolder(TexturePack& pack) +void processFolder(TexturePack& pack, ProcessingLevel level) { Q_ASSERT(pack.type() == ResourceType::FOLDER); @@ -60,6 +60,9 @@ void processFolder(TexturePack& pack) mcmeta_file.close(); } + if (level == ProcessingLevel::BasicInfoOnly) + return; + QFileInfo image_file_info(FS::PathCombine(pack.fileinfo().filePath(), "pack.png")); if (image_file_info.isFile()) { QFile mcmeta_file(image_file_info.filePath()); @@ -74,7 +77,7 @@ void processFolder(TexturePack& pack) } } -void processZIP(TexturePack& pack) +void processZIP(TexturePack& pack, ProcessingLevel level) { Q_ASSERT(pack.type() == ResourceType::ZIPFILE); @@ -98,6 +101,11 @@ void processZIP(TexturePack& pack) file.close(); } + if (level == ProcessingLevel::BasicInfoOnly) { + zip.close(); + return; + } + if (zip.setCurrentFile("pack.png")) { if (!file.open(QIODevice::ReadOnly)) { qCritical() << "Failed to open file in zip."; @@ -129,6 +137,13 @@ void processPackPNG(TexturePack& pack, QByteArray&& raw_data) qWarning() << "Failed to parse pack.png."; } } + +bool validate(QFileInfo file) +{ + TexturePack rp{ file }; + return TexturePackUtils::process(rp, ProcessingLevel::BasicInfoOnly) && rp.valid(); +} + } // namespace TexturePackUtils LocalTexturePackParseTask::LocalTexturePackParseTask(int token, TexturePack& rp) diff --git a/launcher/minecraft/mod/tasks/LocalTexturePackParseTask.h b/launcher/minecraft/mod/tasks/LocalTexturePackParseTask.h index cb0e404a7..9f7aab75f 100644 --- a/launcher/minecraft/mod/tasks/LocalTexturePackParseTask.h +++ b/launcher/minecraft/mod/tasks/LocalTexturePackParseTask.h @@ -27,13 +27,19 @@ #include "tasks/Task.h" namespace TexturePackUtils { -bool process(TexturePack& pack); -void processZIP(TexturePack& pack); -void processFolder(TexturePack& pack); +enum class ProcessingLevel { Full, BasicInfoOnly }; + +bool process(TexturePack& pack, ProcessingLevel level = ProcessingLevel::Full); + +void processZIP(TexturePack& pack, ProcessingLevel level = ProcessingLevel::Full); +void processFolder(TexturePack& pack, ProcessingLevel level = ProcessingLevel::Full); void processPackTXT(TexturePack& pack, QByteArray&& raw_data); void processPackPNG(TexturePack& pack, QByteArray&& raw_data); + +/** Checks whether a file is valid as a texture pack or not. */ +bool validate(QFileInfo file); } // namespace TexturePackUtils class LocalTexturePackParseTask : public Task { diff --git a/launcher/ui/MainWindow.cpp b/launcher/ui/MainWindow.cpp index 98fd79be0..5d2a07f32 100644 --- a/launcher/ui/MainWindow.cpp +++ b/launcher/ui/MainWindow.cpp @@ -110,10 +110,8 @@ #include "ui/dialogs/ImportResourcePackDialog.h" #include "ui/themes/ITheme.h" -#include #include #include -#include #include #include @@ -1806,32 +1804,30 @@ void MainWindow::droppedURLs(QList urls) for (auto& url : urls) { if (url.isLocalFile()) { auto localFileName = url.toLocalFile(); - - ResourcePack rp{ QFileInfo(localFileName) }; - TexturePack tp{ QFileInfo(localFileName) }; + QFileInfo localFileInfo(localFileName); ImportResourcePackDialog dlg(this); - if (ResourcePackUtils::process(rp) && rp.valid()) { - dlg.exec(); + if (ResourcePackUtils::validate(localFileInfo)) { + dlg.exec(); - if (dlg.result() == QDialog::Accepted) { - qDebug() << "Selected instance to import resource pack into: " << dlg.selectedInstanceKey; - auto instance = APPLICATION->instances()->getInstanceById(dlg.selectedInstanceKey); - auto instanceButBuffed = std::dynamic_pointer_cast(instance); - instanceButBuffed->resourcePackList()->installResource(localFileName); - } - } else if (TexturePackUtils::process(tp) && tp.valid()) { - dlg.exec(); + if (dlg.result() == QDialog::Accepted) { + qDebug() << "Selected instance to import resource pack into: " << dlg.selectedInstanceKey; + auto instance = APPLICATION->instances()->getInstanceById(dlg.selectedInstanceKey); + auto instanceButBuffed = std::dynamic_pointer_cast(instance); + instanceButBuffed->resourcePackList()->installResource(localFileName); + } + } else if (TexturePackUtils::validate(localFileInfo)) { + dlg.exec(); - if (dlg.result() == QDialog::Accepted) { - qDebug() << "Selected instance to import texture pack into: " << dlg.selectedInstanceKey; - auto instance = APPLICATION->instances()->getInstanceById(dlg.selectedInstanceKey); - auto instanceButBuffed = std::dynamic_pointer_cast(instance); - instanceButBuffed->texturePackList()->installResource(localFileName); - } + if (dlg.result() == QDialog::Accepted) { + qDebug() << "Selected instance to import texture pack into: " << dlg.selectedInstanceKey; + auto instance = APPLICATION->instances()->getInstanceById(dlg.selectedInstanceKey); + auto instanceButBuffed = std::dynamic_pointer_cast(instance); + instanceButBuffed->texturePackList()->installResource(localFileName); + } } else { - addInstance(localFileName); + addInstance(localFileName); } } else { addInstance(url.toString()); From f55fc51e9b372e00ada739cfa679387079ffca2a Mon Sep 17 00:00:00 2001 From: flow Date: Sun, 20 Nov 2022 11:09:24 -0300 Subject: [PATCH 045/155] fix: remove commented-out assertions They may not hold true at all times, and that's fine. Signed-off-by: flow --- launcher/minecraft/mod/tasks/LocalResourcePackParseTask.cpp | 2 -- launcher/minecraft/mod/tasks/LocalTexturePackParseTask.cpp | 2 -- 2 files changed, 4 deletions(-) diff --git a/launcher/minecraft/mod/tasks/LocalResourcePackParseTask.cpp b/launcher/minecraft/mod/tasks/LocalResourcePackParseTask.cpp index f58a0620b..6fd4b0245 100644 --- a/launcher/minecraft/mod/tasks/LocalResourcePackParseTask.cpp +++ b/launcher/minecraft/mod/tasks/LocalResourcePackParseTask.cpp @@ -167,8 +167,6 @@ bool LocalResourcePackParseTask::abort() void LocalResourcePackParseTask::executeTask() { - // Q_ASSERT(m_resource_pack.valid()); - if (!ResourcePackUtils::process(m_resource_pack)) return; diff --git a/launcher/minecraft/mod/tasks/LocalTexturePackParseTask.cpp b/launcher/minecraft/mod/tasks/LocalTexturePackParseTask.cpp index 8da366c1b..adb19aca9 100644 --- a/launcher/minecraft/mod/tasks/LocalTexturePackParseTask.cpp +++ b/launcher/minecraft/mod/tasks/LocalTexturePackParseTask.cpp @@ -158,8 +158,6 @@ bool LocalTexturePackParseTask::abort() void LocalTexturePackParseTask::executeTask() { - // Q_ASSERT(m_texture_pack.valid()); - if (!TexturePackUtils::process(m_texture_pack)) return; From 884fe0d5741de2a8a78f48c5d37274d8f174ba3a Mon Sep 17 00:00:00 2001 From: Sefa Eyeoglu Date: Sun, 20 Nov 2022 18:16:19 +0100 Subject: [PATCH 046/155] feat: validate maximum memory allocation in wizard Signed-off-by: Sefa Eyeoglu --- launcher/ui/widgets/JavaSettingsWidget.cpp | 42 ++++++++++++++++++---- launcher/ui/widgets/JavaSettingsWidget.h | 9 +++-- 2 files changed, 42 insertions(+), 9 deletions(-) diff --git a/launcher/ui/widgets/JavaSettingsWidget.cpp b/launcher/ui/widgets/JavaSettingsWidget.cpp index c7c4dbbd9..159943198 100644 --- a/launcher/ui/widgets/JavaSettingsWidget.cpp +++ b/launcher/ui/widgets/JavaSettingsWidget.cpp @@ -71,6 +71,7 @@ void JavaSettingsWidget::setupUi() m_memoryGroupBox->setObjectName(QStringLiteral("memoryGroupBox")); m_gridLayout_2 = new QGridLayout(m_memoryGroupBox); m_gridLayout_2->setObjectName(QStringLiteral("gridLayout_2")); + m_gridLayout_2->setColumnStretch(0, 1); m_labelMinMem = new QLabel(m_memoryGroupBox); m_labelMinMem->setObjectName(QStringLiteral("labelMinMem")); @@ -80,7 +81,7 @@ void JavaSettingsWidget::setupUi() m_minMemSpinBox->setObjectName(QStringLiteral("minMemSpinBox")); m_minMemSpinBox->setSuffix(QStringLiteral(" MiB")); m_minMemSpinBox->setMinimum(128); - m_minMemSpinBox->setMaximum(m_availableMemory); + m_minMemSpinBox->setMaximum(1048576); m_minMemSpinBox->setSingleStep(128); m_labelMinMem->setBuddy(m_minMemSpinBox); m_gridLayout_2->addWidget(m_minMemSpinBox, 0, 1, 1, 1); @@ -93,11 +94,15 @@ void JavaSettingsWidget::setupUi() m_maxMemSpinBox->setObjectName(QStringLiteral("maxMemSpinBox")); m_maxMemSpinBox->setSuffix(QStringLiteral(" MiB")); m_maxMemSpinBox->setMinimum(128); - m_maxMemSpinBox->setMaximum(m_availableMemory); + m_maxMemSpinBox->setMaximum(1048576); m_maxMemSpinBox->setSingleStep(128); m_labelMaxMem->setBuddy(m_maxMemSpinBox); m_gridLayout_2->addWidget(m_maxMemSpinBox, 1, 1, 1, 1); + m_labelMaxMemIcon = new QLabel(m_memoryGroupBox); + m_labelMaxMemIcon->setObjectName(QStringLiteral("labelMaxMemIcon")); + m_gridLayout_2->addWidget(m_labelMaxMemIcon, 1, 2, 1, 1); + m_labelPermGen = new QLabel(m_memoryGroupBox); m_labelPermGen->setObjectName(QStringLiteral("labelPermGen")); m_labelPermGen->setText(QStringLiteral("PermGen:")); @@ -108,7 +113,7 @@ void JavaSettingsWidget::setupUi() m_permGenSpinBox->setObjectName(QStringLiteral("permGenSpinBox")); m_permGenSpinBox->setSuffix(QStringLiteral(" MiB")); m_permGenSpinBox->setMinimum(64); - m_permGenSpinBox->setMaximum(m_availableMemory); + m_permGenSpinBox->setMaximum(1048576); m_permGenSpinBox->setSingleStep(8); m_gridLayout_2->addWidget(m_permGenSpinBox, 2, 1, 1, 1); m_permGenSpinBox->setVisible(false); @@ -130,6 +135,7 @@ void JavaSettingsWidget::initialize() m_minMemSpinBox->setValue(observedMinMemory); m_maxMemSpinBox->setValue(observedMaxMemory); m_permGenSpinBox->setValue(observedPermGenMemory); + updateThresholds(); } void JavaSettingsWidget::refresh() @@ -210,9 +216,9 @@ int JavaSettingsWidget::permGenSize() const void JavaSettingsWidget::memoryValueChanged(int) { bool actuallyChanged = false; - int min = m_minMemSpinBox->value(); - int max = m_maxMemSpinBox->value(); - int permgen = m_permGenSpinBox->value(); + unsigned int min = m_minMemSpinBox->value(); + unsigned int max = m_maxMemSpinBox->value(); + unsigned int permgen = m_permGenSpinBox->value(); QObject *obj = sender(); if (obj == m_minMemSpinBox && min != observedMinMemory) { @@ -242,6 +248,7 @@ void JavaSettingsWidget::memoryValueChanged(int) if(actuallyChanged) { checkJavaPathOnEdit(m_javaPathTextBox->text()); + updateThresholds(); } } @@ -435,3 +442,26 @@ void JavaSettingsWidget::retranslate() m_permGenSpinBox->setToolTip(tr("The amount of memory available to store loaded Java classes.")); m_javaBrowseBtn->setText(tr("Browse")); } + +void JavaSettingsWidget::updateThresholds() +{ + QString iconName; + + if (observedMaxMemory >= m_availableMemory) { + iconName = "status-bad"; + m_labelMaxMemIcon->setToolTip(tr("Your maximum memory allocation exceeds your system memory capacity.")); + } else if (observedMaxMemory > (m_availableMemory * 0.9)) { + iconName = "status-yellow"; + m_labelMaxMemIcon->setToolTip(tr("Your maximum memory allocation approaches your system memory capacity.")); + } else { + iconName = "status-good"; + m_labelMaxMemIcon->setToolTip(""); + } + + { + auto height = m_labelMaxMemIcon->fontInfo().pixelSize(); + QIcon icon = APPLICATION->getThemedIcon(iconName); + QPixmap pix = icon.pixmap(height, height); + m_labelMaxMemIcon->setPixmap(pix); + } +} diff --git a/launcher/ui/widgets/JavaSettingsWidget.h b/launcher/ui/widgets/JavaSettingsWidget.h index 5344e2cd1..e4b7c7129 100644 --- a/launcher/ui/widgets/JavaSettingsWidget.h +++ b/launcher/ui/widgets/JavaSettingsWidget.h @@ -56,6 +56,8 @@ public: int maxHeapSize() const; QString javaPath() const; + void updateThresholds(); + protected slots: void memoryValueChanged(int); @@ -85,6 +87,7 @@ private: /* data */ QSpinBox *m_maxMemSpinBox = nullptr; QLabel *m_labelMinMem = nullptr; QLabel *m_labelMaxMem = nullptr; + QLabel *m_labelMaxMemIcon = nullptr; QSpinBox *m_minMemSpinBox = nullptr; QLabel *m_labelPermGen = nullptr; QSpinBox *m_permGenSpinBox = nullptr; @@ -92,9 +95,9 @@ private: /* data */ QIcon yellowIcon; QIcon badIcon; - int observedMinMemory = 0; - int observedMaxMemory = 0; - int observedPermGenMemory = 0; + unsigned int observedMinMemory = 0; + unsigned int observedMaxMemory = 0; + unsigned int observedPermGenMemory = 0; QString queuedCheck; uint64_t m_availableMemory = 0ull; shared_qobject_ptr m_checker; From f601135cc0154236e3b26b2850f0cf633bcef2f8 Mon Sep 17 00:00:00 2001 From: Sefa Eyeoglu Date: Sun, 20 Nov 2022 23:49:11 +0100 Subject: [PATCH 047/155] refactor(nix): synchronize changes from nixpkgs Signed-off-by: Sefa Eyeoglu --- flake.nix | 4 +-- nix/default.nix | 95 ++++++++++++++++++++++++------------------------- 2 files changed, 49 insertions(+), 50 deletions(-) diff --git a/flake.nix b/flake.nix index d4a253388..b1e07c910 100644 --- a/flake.nix +++ b/flake.nix @@ -23,8 +23,8 @@ pkgs = forAllSystems (system: nixpkgs.legacyPackages.${system}); packagesFn = pkgs: rec { - prismlauncher = pkgs.libsForQt5.callPackage ./nix { inherit version self libnbtplusplus tomlplusplus; }; - prismlauncher-qt6 = pkgs.qt6Packages.callPackage ./nix { inherit version self libnbtplusplus tomlplusplus; }; + prismlauncher-qt5 = pkgs.libsForQt5.callPackage ./nix { inherit version self libnbtplusplus tomlplusplus; }; + prismlauncher = pkgs.qt6Packages.callPackage ./nix { inherit version self libnbtplusplus tomlplusplus; }; }; in { diff --git a/nix/default.nix b/nix/default.nix index c7fc75769..6050fd37f 100644 --- a/nix/default.nix +++ b/nix/default.nix @@ -1,100 +1,99 @@ -{ stdenv -, lib -, fetchFromGitHub +{ lib +, stdenv , cmake -, ninja , jdk8 , jdk -, ghc_filesystem , zlib , file , wrapQtAppsHook , xorg , libpulseaudio , qtbase -, quazip +, qtsvg +, qtwayland , libGL -, msaClientID ? "" -, extraJDKs ? [ ] +, quazip +, glfw +, openal , extra-cmake-modules +, ghc_filesystem +, msaClientID ? "" +, jdks ? [ jdk jdk8 ] # flake , self , version , libnbtplusplus , tomlplusplus -, enableLTO ? false }: -let - # Libraries required to run Minecraft - libpath = with xorg; lib.makeLibraryPath [ - libX11 - libXext - libXcursor - libXrandr - libXxf86vm - libpulseaudio - libGL - ]; - - # This variable will be passed to Minecraft by Prism Launcher - gameLibraryPath = libpath + ":/run/opengl-driver/lib"; - - javaPaths = lib.makeSearchPath "bin/java" ([ jdk jdk8 ] ++ extraJDKs); -in - stdenv.mkDerivation rec { pname = "prismlauncher"; inherit version; src = lib.cleanSource self; - nativeBuildInputs = [ cmake extra-cmake-modules ninja jdk ghc_filesystem file wrapQtAppsHook ]; - buildInputs = [ qtbase quazip zlib ]; + nativeBuildInputs = [ extra-cmake-modules cmake file jdk wrapQtAppsHook ]; + buildInputs = [ + qtbase + qtsvg + zlib + quazip + ghc_filesystem + ] ++ lib.optional (lib.versionAtLeast qtbase.version "6") qtwayland; + cmakeFlags = lib.optionals (msaClientID != "") [ "-DLauncher_MSA_CLIENT_ID=${msaClientID}" ] + ++ lib.optionals (lib.versionAtLeast qtbase.version "6") [ "-DLauncher_QT_VERSION_MAJOR=6" ]; dontWrapQtApps = true; postUnpack = '' - # Copy libnbtplusplus rm -rf source/libraries/libnbtplusplus mkdir source/libraries/libnbtplusplus ln -s ${libnbtplusplus}/* source/libraries/libnbtplusplus chmod -R +r+w source/libraries/libnbtplusplus - # Copy tomlplusplus + chown -R $USER: source/libraries/libnbtplusplus rm -rf source/libraries/tomlplusplus mkdir source/libraries/tomlplusplus ln -s ${tomlplusplus}/* source/libraries/tomlplusplus chmod -R +r+w source/libraries/tomlplusplus + chown -R $USER: source/libraries/tomlplusplus ''; - cmakeFlags = [ - "-GNinja" - "-DLauncher_QT_VERSION_MAJOR=${lib.versions.major qtbase.version}" - ] ++ lib.optionals enableLTO [ "-DENABLE_LTO=on" ] - ++ lib.optionals (msaClientID != "") [ "-DLauncher_MSA_CLIENT_ID=${msaClientID}" ]; + postInstall = + let + libpath = with xorg; + lib.makeLibraryPath [ + libX11 + libXext + libXcursor + libXrandr + libXxf86vm + libpulseaudio + libGL + glfw + openal + stdenv.cc.cc.lib + ]; + in + '' + # xorg.xrandr needed for LWJGL [2.9.2, 3) https://github.com/LWJGL/lwjgl/issues/128 + wrapQtApp $out/bin/prismlauncher \ + --set LD_LIBRARY_PATH /run/opengl-driver/lib:${libpath} \ + --prefix PRISMLAUNCHER_JAVA_PATHS : ${lib.makeSearchPath "bin/java" jdks} \ + --prefix PATH : ${lib.makeBinPath [xorg.xrandr]} + ''; - # we have to check if the system is NixOS before adding stdenv.cc.cc.lib (#923) - postInstall = '' - # xorg.xrandr needed for LWJGL [2.9.2, 3) https://github.com/LWJGL/lwjgl/issues/128 - wrapQtApp $out/bin/prismlauncher \ - --run '[ -f /etc/NIXOS ] && export LD_LIBRARY_PATH="${stdenv.cc.cc.lib}/lib:$LD_LIBRARY_PATH"' \ - --prefix LD_LIBRARY_PATH : ${gameLibraryPath} \ - --prefix PRISMLAUNCHER_JAVA_PATHS : ${javaPaths} \ - --prefix PATH : ${lib.makeBinPath [ xorg.xrandr ]} - ''; meta = with lib; { homepage = "https://prismlauncher.org/"; - downloadPage = "https://prismlauncher.org/download/"; - changelog = "https://github.com/PrismLauncher/PrismLauncher/releases"; description = "A free, open source launcher for Minecraft"; longDescription = '' Allows you to have multiple, separate instances of Minecraft (each with their own mods, texture packs, saves, etc) and helps you manage them and their associated options with a simple interface. ''; - platforms = platforms.unix; + platforms = platforms.linux; + changelog = "https://github.com/PrismLauncher/PrismLauncher/releases/tag/${version}"; license = licenses.gpl3Only; maintainers = with maintainers; [ minion3665 Scrumplex ]; }; From 70a11935a85325f0cf896eb301bbc342a6d3e3c8 Mon Sep 17 00:00:00 2001 From: Sefa Eyeoglu Date: Mon, 21 Nov 2022 00:02:41 +0100 Subject: [PATCH 048/155] feat(actions): add Nix build Signed-off-by: Sefa Eyeoglu --- .github/workflows/build.yml | 33 ++++++++++++++++++++++++++++ .github/workflows/trigger_builds.yml | 1 + 2 files changed, 34 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c0e5b50a5..d41dfdc2a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -15,6 +15,9 @@ on: SPARKLE_ED25519_KEY: description: Private key for signing Sparkle updates required: false + CACHIX_AUTH_TOKEN: + description: Private token for authenticating against Cachix cache + required: false jobs: build: @@ -526,3 +529,33 @@ jobs: bundle: "Prism Launcher.flatpak" manifest-path: flatpak/org.prismlauncher.PrismLauncher.yml cache-key: flatpak-${{ github.sha }}-x86_64 + + nix: + runs-on: ubuntu-latest + strategy: + matrix: + package: + - prismlauncher + - prismlauncher-qt5 + steps: + - name: Clone repository + if: inputs.build_type == 'Debug' + uses: actions/checkout@v3 + with: + submodules: 'true' + - name: Install nix + if: inputs.build_type == 'Debug' + uses: cachix/install-nix-action@v18 + with: + install_url: https://nixos.org/nix/install + extra_nix_config: | + auto-optimise-store = true + experimental-features = nix-command flakes + - uses: cachix/cachix-action@v12 + if: inputs.build_type == 'Debug' + with: + name: prismlauncher + authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}' + - name: Build + if: inputs.build_type == 'Debug' + run: nix build .#${{ matrix.package }} --print-build-logs diff --git a/.github/workflows/trigger_builds.yml b/.github/workflows/trigger_builds.yml index 44751fbc1..cf299744f 100644 --- a/.github/workflows/trigger_builds.yml +++ b/.github/workflows/trigger_builds.yml @@ -33,3 +33,4 @@ jobs: is_qt_cached: true secrets: SPARKLE_ED25519_KEY: ${{ secrets.SPARKLE_ED25519_KEY }} + CACHIX_AUTH_TOKEN: ${{ secrets.CACHIX_AUTH_TOKEN }} From 7096f02b88e982df6c770113146a07874a1e9d0f Mon Sep 17 00:00:00 2001 From: Ryan Cao <70191398+ryanccn@users.noreply.github.com> Date: Mon, 21 Nov 2022 18:15:03 +0800 Subject: [PATCH 049/155] fix: text wrapping Signed-off-by: Ryan Cao <70191398+ryanccn@users.noreply.github.com> --- launcher/ui/dialogs/ImportResourcePackDialog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/launcher/ui/dialogs/ImportResourcePackDialog.cpp b/launcher/ui/dialogs/ImportResourcePackDialog.cpp index 2b7466052..7a2152b71 100644 --- a/launcher/ui/dialogs/ImportResourcePackDialog.cpp +++ b/launcher/ui/dialogs/ImportResourcePackDialog.cpp @@ -27,7 +27,7 @@ ImportResourcePackDialog::ImportResourcePackDialog(QWidget* parent) : QDialog(pa contentsWidget->setWordWrap(false); contentsWidget->setWrapping(true); contentsWidget->setUniformItemSizes(true); - contentsWidget->setTextElideMode(Qt::ElideRight); + contentsWidget->setWordWrap(true); contentsWidget->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel); contentsWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); contentsWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); From c1b3a3adb4be8b31c23ded08f51a477bfc36d9a3 Mon Sep 17 00:00:00 2001 From: Sefa Eyeoglu Date: Mon, 21 Nov 2022 11:43:46 +0100 Subject: [PATCH 050/155] fix(actions): don't ignore nix files Signed-off-by: Sefa Eyeoglu --- .github/workflows/trigger_builds.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/trigger_builds.yml b/.github/workflows/trigger_builds.yml index cf299744f..a08193a06 100644 --- a/.github/workflows/trigger_builds.yml +++ b/.github/workflows/trigger_builds.yml @@ -8,7 +8,6 @@ on: - '**.md' - '**/LICENSE' - 'flake.lock' - - '**.nix' - 'packages/**' - '.github/ISSUE_TEMPLATE/**' - '.markdownlint**' @@ -17,7 +16,6 @@ on: - '**.md' - '**/LICENSE' - 'flake.lock' - - '**.nix' - 'packages/**' - '.github/ISSUE_TEMPLATE/**' - '.markdownlint**' From 4208c2c72a160896f63f44148c74cf24fc30d4b9 Mon Sep 17 00:00:00 2001 From: Sefa Eyeoglu Date: Mon, 21 Nov 2022 15:47:15 +0100 Subject: [PATCH 051/155] fix: actually emit fileCopied Signed-off-by: Sefa Eyeoglu --- launcher/FileSystem.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/launcher/FileSystem.cpp b/launcher/FileSystem.cpp index 0c6527b1d..987f4e747 100644 --- a/launcher/FileSystem.cpp +++ b/launcher/FileSystem.cpp @@ -188,6 +188,8 @@ bool copy::operator()(const QString& offset, bool dryRun) qDebug() << "Source file:" << src_path; qDebug() << "Destination file:" << dst_path; } + m_copied++; + emit fileCopied(relative_dst_path); }; // We can't use copy_opts::recursive because we need to take into account the From 66f9fed2f2fccfb00ee3086637a667eca60213aa Mon Sep 17 00:00:00 2001 From: Trisave <42098407+Protrikk@users.noreply.github.com> Date: Tue, 22 Nov 2022 18:30:21 +0100 Subject: [PATCH 052/155] Remove blue-ish tint from flat white icons Signed-off-by: Trisave <42098407+Protrikk@users.noreply.github.com> --- launcher/resources/flat_white/scalable/about.svg | 4 ++-- launcher/resources/flat_white/scalable/accounts.svg | 4 ++-- launcher/resources/flat_white/scalable/bug.svg | 4 ++-- launcher/resources/flat_white/scalable/cat.svg | 4 ++-- launcher/resources/flat_white/scalable/centralmods.svg | 4 ++-- launcher/resources/flat_white/scalable/checkupdate.svg | 4 ++-- launcher/resources/flat_white/scalable/copy.svg | 4 ++-- launcher/resources/flat_white/scalable/coremods.svg | 4 ++-- .../resources/flat_white/scalable/custom-commands.svg | 2 +- launcher/resources/flat_white/scalable/delete.svg | 6 +++--- launcher/resources/flat_white/scalable/discord.svg | 4 ++-- launcher/resources/flat_white/scalable/export.svg | 4 ++-- launcher/resources/flat_white/scalable/externaltools.svg | 4 ++-- launcher/resources/flat_white/scalable/help.svg | 2 +- .../resources/flat_white/scalable/instance-settings.svg | 4 ++-- launcher/resources/flat_white/scalable/jarmods.svg | 4 ++-- launcher/resources/flat_white/scalable/java.svg | 4 ++-- launcher/resources/flat_white/scalable/language.svg | 2 +- launcher/resources/flat_white/scalable/launch.svg | 2 +- launcher/resources/flat_white/scalable/launcher.svg | 2 +- launcher/resources/flat_white/scalable/loadermods.svg | 4 ++-- launcher/resources/flat_white/scalable/log.svg | 4 ++-- launcher/resources/flat_white/scalable/minecraft.svg | 4 ++-- launcher/resources/flat_white/scalable/multimc.svg | 4 ++-- launcher/resources/flat_white/scalable/new.svg | 4 ++-- launcher/resources/flat_white/scalable/news.svg | 4 ++-- launcher/resources/flat_white/scalable/notes.svg | 4 ++-- launcher/resources/flat_white/scalable/packages.svg | 4 ++-- launcher/resources/flat_white/scalable/patreon.svg | 4 ++-- launcher/resources/flat_white/scalable/proxy.svg | 4 ++-- launcher/resources/flat_white/scalable/quickmods.svg | 4 ++-- launcher/resources/flat_white/scalable/reddit-alien.svg | 4 ++-- launcher/resources/flat_white/scalable/refresh.svg | 4 ++-- launcher/resources/flat_white/scalable/rename.svg | 4 ++-- launcher/resources/flat_white/scalable/resourcepacks.svg | 4 ++-- .../flat_white/scalable/screenshot-placeholder.svg | 4 ++-- launcher/resources/flat_white/scalable/screenshots.svg | 4 ++-- launcher/resources/flat_white/scalable/settings.svg | 4 ++-- launcher/resources/flat_white/scalable/shaderpacks.svg | 8 ++++---- launcher/resources/flat_white/scalable/star.svg | 4 ++-- launcher/resources/flat_white/scalable/status-bad.svg | 4 ++-- launcher/resources/flat_white/scalable/status-good.svg | 4 ++-- launcher/resources/flat_white/scalable/status-running.svg | 4 ++-- launcher/resources/flat_white/scalable/status-yellow.svg | 4 ++-- launcher/resources/flat_white/scalable/tag.svg | 6 +++--- launcher/resources/flat_white/scalable/viewfolder.svg | 4 ++-- launcher/resources/flat_white/scalable/worlds.svg | 4 ++-- 47 files changed, 93 insertions(+), 93 deletions(-) diff --git a/launcher/resources/flat_white/scalable/about.svg b/launcher/resources/flat_white/scalable/about.svg index e42ca9481..e2071c84f 100644 --- a/launcher/resources/flat_white/scalable/about.svg +++ b/launcher/resources/flat_white/scalable/about.svg @@ -1,3 +1,3 @@ - + - \ No newline at end of file + diff --git a/launcher/resources/flat_white/scalable/accounts.svg b/launcher/resources/flat_white/scalable/accounts.svg index e714bde13..0b413e2ac 100644 --- a/launcher/resources/flat_white/scalable/accounts.svg +++ b/launcher/resources/flat_white/scalable/accounts.svg @@ -1,3 +1,3 @@ - + - \ No newline at end of file + diff --git a/launcher/resources/flat_white/scalable/bug.svg b/launcher/resources/flat_white/scalable/bug.svg index 3122702e3..1e270acdb 100644 --- a/launcher/resources/flat_white/scalable/bug.svg +++ b/launcher/resources/flat_white/scalable/bug.svg @@ -1,3 +1,3 @@ - + - \ No newline at end of file + diff --git a/launcher/resources/flat_white/scalable/cat.svg b/launcher/resources/flat_white/scalable/cat.svg index 18da097a7..93470c4ff 100644 --- a/launcher/resources/flat_white/scalable/cat.svg +++ b/launcher/resources/flat_white/scalable/cat.svg @@ -1,3 +1,3 @@ - + - \ No newline at end of file + diff --git a/launcher/resources/flat_white/scalable/centralmods.svg b/launcher/resources/flat_white/scalable/centralmods.svg index d8d10f2f5..277fe1115 100644 --- a/launcher/resources/flat_white/scalable/centralmods.svg +++ b/launcher/resources/flat_white/scalable/centralmods.svg @@ -1,3 +1,3 @@ - + - \ No newline at end of file + diff --git a/launcher/resources/flat_white/scalable/checkupdate.svg b/launcher/resources/flat_white/scalable/checkupdate.svg index 0fa66fc2f..78db2b0cc 100644 --- a/launcher/resources/flat_white/scalable/checkupdate.svg +++ b/launcher/resources/flat_white/scalable/checkupdate.svg @@ -1,3 +1,3 @@ - + - \ No newline at end of file + diff --git a/launcher/resources/flat_white/scalable/copy.svg b/launcher/resources/flat_white/scalable/copy.svg index 1aaed97b1..abcb2b696 100644 --- a/launcher/resources/flat_white/scalable/copy.svg +++ b/launcher/resources/flat_white/scalable/copy.svg @@ -1,3 +1,3 @@ - + - \ No newline at end of file + diff --git a/launcher/resources/flat_white/scalable/coremods.svg b/launcher/resources/flat_white/scalable/coremods.svg index 32c343839..f3132a5fd 100644 --- a/launcher/resources/flat_white/scalable/coremods.svg +++ b/launcher/resources/flat_white/scalable/coremods.svg @@ -1,3 +1,3 @@ - + - \ No newline at end of file + diff --git a/launcher/resources/flat_white/scalable/custom-commands.svg b/launcher/resources/flat_white/scalable/custom-commands.svg index 3d67d8f10..fe1cf9987 100644 --- a/launcher/resources/flat_white/scalable/custom-commands.svg +++ b/launcher/resources/flat_white/scalable/custom-commands.svg @@ -1,6 +1,6 @@ - + - - \ No newline at end of file + + diff --git a/launcher/resources/flat_white/scalable/discord.svg b/launcher/resources/flat_white/scalable/discord.svg index ee07ed25e..6a07d2289 100644 --- a/launcher/resources/flat_white/scalable/discord.svg +++ b/launcher/resources/flat_white/scalable/discord.svg @@ -1,4 +1,4 @@ - + - \ No newline at end of file + diff --git a/launcher/resources/flat_white/scalable/export.svg b/launcher/resources/flat_white/scalable/export.svg index a28bb2540..095952118 100644 --- a/launcher/resources/flat_white/scalable/export.svg +++ b/launcher/resources/flat_white/scalable/export.svg @@ -1,5 +1,5 @@ - + - \ No newline at end of file + diff --git a/launcher/resources/flat_white/scalable/externaltools.svg b/launcher/resources/flat_white/scalable/externaltools.svg index e7c0930c9..d641f4f21 100644 --- a/launcher/resources/flat_white/scalable/externaltools.svg +++ b/launcher/resources/flat_white/scalable/externaltools.svg @@ -1,3 +1,3 @@ - + - \ No newline at end of file + diff --git a/launcher/resources/flat_white/scalable/help.svg b/launcher/resources/flat_white/scalable/help.svg index 82b413fe5..31e8c092b 100644 --- a/launcher/resources/flat_white/scalable/help.svg +++ b/launcher/resources/flat_white/scalable/help.svg @@ -10,7 +10,7 @@ width="24" viewBox="0 0 24 24" height="24" - fill="#D8DEE9"> + fill="#eeeeee"> diff --git a/launcher/resources/flat_white/scalable/instance-settings.svg b/launcher/resources/flat_white/scalable/instance-settings.svg index 7dac7b141..95a0a8026 100644 --- a/launcher/resources/flat_white/scalable/instance-settings.svg +++ b/launcher/resources/flat_white/scalable/instance-settings.svg @@ -1,3 +1,3 @@ - + - \ No newline at end of file + diff --git a/launcher/resources/flat_white/scalable/jarmods.svg b/launcher/resources/flat_white/scalable/jarmods.svg index f0f298f32..603a8ae9a 100644 --- a/launcher/resources/flat_white/scalable/jarmods.svg +++ b/launcher/resources/flat_white/scalable/jarmods.svg @@ -1,3 +1,3 @@ - + - \ No newline at end of file + diff --git a/launcher/resources/flat_white/scalable/java.svg b/launcher/resources/flat_white/scalable/java.svg index 56bb481f2..db81128e0 100644 --- a/launcher/resources/flat_white/scalable/java.svg +++ b/launcher/resources/flat_white/scalable/java.svg @@ -1,3 +1,3 @@ - + - \ No newline at end of file + diff --git a/launcher/resources/flat_white/scalable/language.svg b/launcher/resources/flat_white/scalable/language.svg index 18c22efb5..4aef29468 100644 --- a/launcher/resources/flat_white/scalable/language.svg +++ b/launcher/resources/flat_white/scalable/language.svg @@ -7,7 +7,7 @@ xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - fill="#D8DEE9" + fill="#eeeeee" height="24" viewBox="0 0 24 24" width="24" diff --git a/launcher/resources/flat_white/scalable/launch.svg b/launcher/resources/flat_white/scalable/launch.svg index 9e7594318..ddd6d5f2c 100644 --- a/launcher/resources/flat_white/scalable/launch.svg +++ b/launcher/resources/flat_white/scalable/launch.svg @@ -1,6 +1,6 @@ - + diff --git a/launcher/resources/flat_white/scalable/loadermods.svg b/launcher/resources/flat_white/scalable/loadermods.svg index 100f7a93e..95c72084a 100644 --- a/launcher/resources/flat_white/scalable/loadermods.svg +++ b/launcher/resources/flat_white/scalable/loadermods.svg @@ -1,3 +1,3 @@ - + - \ No newline at end of file + diff --git a/launcher/resources/flat_white/scalable/log.svg b/launcher/resources/flat_white/scalable/log.svg index 69b7c1dcc..a40139d36 100644 --- a/launcher/resources/flat_white/scalable/log.svg +++ b/launcher/resources/flat_white/scalable/log.svg @@ -1,3 +1,3 @@ - + - \ No newline at end of file + diff --git a/launcher/resources/flat_white/scalable/minecraft.svg b/launcher/resources/flat_white/scalable/minecraft.svg index a0348e797..94aaebd13 100644 --- a/launcher/resources/flat_white/scalable/minecraft.svg +++ b/launcher/resources/flat_white/scalable/minecraft.svg @@ -1,3 +1,3 @@ - + - \ No newline at end of file + diff --git a/launcher/resources/flat_white/scalable/multimc.svg b/launcher/resources/flat_white/scalable/multimc.svg index 3dce2699b..9afe68d96 100644 --- a/launcher/resources/flat_white/scalable/multimc.svg +++ b/launcher/resources/flat_white/scalable/multimc.svg @@ -1,3 +1,3 @@ - + - \ No newline at end of file + diff --git a/launcher/resources/flat_white/scalable/new.svg b/launcher/resources/flat_white/scalable/new.svg index 46dc3361a..22c6a6fe3 100644 --- a/launcher/resources/flat_white/scalable/new.svg +++ b/launcher/resources/flat_white/scalable/new.svg @@ -1,3 +1,3 @@ - + - \ No newline at end of file + diff --git a/launcher/resources/flat_white/scalable/news.svg b/launcher/resources/flat_white/scalable/news.svg index 414e54540..76623f341 100644 --- a/launcher/resources/flat_white/scalable/news.svg +++ b/launcher/resources/flat_white/scalable/news.svg @@ -1,3 +1,3 @@ - + - \ No newline at end of file + diff --git a/launcher/resources/flat_white/scalable/notes.svg b/launcher/resources/flat_white/scalable/notes.svg index 4ce5f6f19..18a1265de 100644 --- a/launcher/resources/flat_white/scalable/notes.svg +++ b/launcher/resources/flat_white/scalable/notes.svg @@ -1,3 +1,3 @@ - + - \ No newline at end of file + diff --git a/launcher/resources/flat_white/scalable/packages.svg b/launcher/resources/flat_white/scalable/packages.svg index 909ad0b27..d2c879557 100644 --- a/launcher/resources/flat_white/scalable/packages.svg +++ b/launcher/resources/flat_white/scalable/packages.svg @@ -1,3 +1,3 @@ - + - \ No newline at end of file + diff --git a/launcher/resources/flat_white/scalable/patreon.svg b/launcher/resources/flat_white/scalable/patreon.svg index b745765b4..d5385eac1 100644 --- a/launcher/resources/flat_white/scalable/patreon.svg +++ b/launcher/resources/flat_white/scalable/patreon.svg @@ -1,3 +1,3 @@ - + - \ No newline at end of file + diff --git a/launcher/resources/flat_white/scalable/proxy.svg b/launcher/resources/flat_white/scalable/proxy.svg index a86703f45..30e27e8a4 100644 --- a/launcher/resources/flat_white/scalable/proxy.svg +++ b/launcher/resources/flat_white/scalable/proxy.svg @@ -1,3 +1,3 @@ - + - \ No newline at end of file + diff --git a/launcher/resources/flat_white/scalable/quickmods.svg b/launcher/resources/flat_white/scalable/quickmods.svg index 9e0045b20..599bd2bf3 100644 --- a/launcher/resources/flat_white/scalable/quickmods.svg +++ b/launcher/resources/flat_white/scalable/quickmods.svg @@ -1,3 +1,3 @@ - + - \ No newline at end of file + diff --git a/launcher/resources/flat_white/scalable/reddit-alien.svg b/launcher/resources/flat_white/scalable/reddit-alien.svg index be22148ca..291b12e0e 100644 --- a/launcher/resources/flat_white/scalable/reddit-alien.svg +++ b/launcher/resources/flat_white/scalable/reddit-alien.svg @@ -1,3 +1,3 @@ - + - \ No newline at end of file + diff --git a/launcher/resources/flat_white/scalable/refresh.svg b/launcher/resources/flat_white/scalable/refresh.svg index 08c63bdf7..e8c6c44b3 100644 --- a/launcher/resources/flat_white/scalable/refresh.svg +++ b/launcher/resources/flat_white/scalable/refresh.svg @@ -1,3 +1,3 @@ - + - \ No newline at end of file + diff --git a/launcher/resources/flat_white/scalable/rename.svg b/launcher/resources/flat_white/scalable/rename.svg index f2067c16b..e7d6634a2 100644 --- a/launcher/resources/flat_white/scalable/rename.svg +++ b/launcher/resources/flat_white/scalable/rename.svg @@ -1,4 +1,4 @@ - + - \ No newline at end of file + diff --git a/launcher/resources/flat_white/scalable/resourcepacks.svg b/launcher/resources/flat_white/scalable/resourcepacks.svg index 9dd73c3af..272af76b7 100644 --- a/launcher/resources/flat_white/scalable/resourcepacks.svg +++ b/launcher/resources/flat_white/scalable/resourcepacks.svg @@ -1,3 +1,3 @@ - + - \ No newline at end of file + diff --git a/launcher/resources/flat_white/scalable/screenshot-placeholder.svg b/launcher/resources/flat_white/scalable/screenshot-placeholder.svg index 41eb6fcfc..162b78040 100644 --- a/launcher/resources/flat_white/scalable/screenshot-placeholder.svg +++ b/launcher/resources/flat_white/scalable/screenshot-placeholder.svg @@ -1,3 +1,3 @@ - + - \ No newline at end of file + diff --git a/launcher/resources/flat_white/scalable/screenshots.svg b/launcher/resources/flat_white/scalable/screenshots.svg index 68cf89696..ae1c876df 100644 --- a/launcher/resources/flat_white/scalable/screenshots.svg +++ b/launcher/resources/flat_white/scalable/screenshots.svg @@ -1,3 +1,3 @@ - + - \ No newline at end of file + diff --git a/launcher/resources/flat_white/scalable/settings.svg b/launcher/resources/flat_white/scalable/settings.svg index 7dac7b141..95a0a8026 100644 --- a/launcher/resources/flat_white/scalable/settings.svg +++ b/launcher/resources/flat_white/scalable/settings.svg @@ -1,3 +1,3 @@ - + - \ No newline at end of file + diff --git a/launcher/resources/flat_white/scalable/shaderpacks.svg b/launcher/resources/flat_white/scalable/shaderpacks.svg index ccae221c1..bfd8b8332 100644 --- a/launcher/resources/flat_white/scalable/shaderpacks.svg +++ b/launcher/resources/flat_white/scalable/shaderpacks.svg @@ -1,6 +1,6 @@ diff --git a/launcher/resources/flat_white/scalable/star.svg b/launcher/resources/flat_white/scalable/star.svg index 116f952eb..2a573ca30 100644 --- a/launcher/resources/flat_white/scalable/star.svg +++ b/launcher/resources/flat_white/scalable/star.svg @@ -1,3 +1,3 @@ - + - \ No newline at end of file + diff --git a/launcher/resources/flat_white/scalable/status-bad.svg b/launcher/resources/flat_white/scalable/status-bad.svg index 5a121c09c..b6b42a968 100644 --- a/launcher/resources/flat_white/scalable/status-bad.svg +++ b/launcher/resources/flat_white/scalable/status-bad.svg @@ -1,3 +1,3 @@ - + - \ No newline at end of file + diff --git a/launcher/resources/flat_white/scalable/status-good.svg b/launcher/resources/flat_white/scalable/status-good.svg index ccb732ab8..aee4c5234 100644 --- a/launcher/resources/flat_white/scalable/status-good.svg +++ b/launcher/resources/flat_white/scalable/status-good.svg @@ -1,3 +1,3 @@ - + - \ No newline at end of file + diff --git a/launcher/resources/flat_white/scalable/status-running.svg b/launcher/resources/flat_white/scalable/status-running.svg index aa2d5fbff..d4d551944 100644 --- a/launcher/resources/flat_white/scalable/status-running.svg +++ b/launcher/resources/flat_white/scalable/status-running.svg @@ -1,3 +1,3 @@ - + - \ No newline at end of file + diff --git a/launcher/resources/flat_white/scalable/status-yellow.svg b/launcher/resources/flat_white/scalable/status-yellow.svg index 772699d32..00737f515 100644 --- a/launcher/resources/flat_white/scalable/status-yellow.svg +++ b/launcher/resources/flat_white/scalable/status-yellow.svg @@ -1,3 +1,3 @@ - + - \ No newline at end of file + diff --git a/launcher/resources/flat_white/scalable/tag.svg b/launcher/resources/flat_white/scalable/tag.svg index f91fb0b42..0d7661e0d 100644 --- a/launcher/resources/flat_white/scalable/tag.svg +++ b/launcher/resources/flat_white/scalable/tag.svg @@ -1,4 +1,4 @@ - - - \ No newline at end of file + + + diff --git a/launcher/resources/flat_white/scalable/viewfolder.svg b/launcher/resources/flat_white/scalable/viewfolder.svg index 145f86248..b13c8eb36 100644 --- a/launcher/resources/flat_white/scalable/viewfolder.svg +++ b/launcher/resources/flat_white/scalable/viewfolder.svg @@ -1,3 +1,3 @@ - + - \ No newline at end of file + diff --git a/launcher/resources/flat_white/scalable/worlds.svg b/launcher/resources/flat_white/scalable/worlds.svg index cea30cf81..d7aaef1d5 100644 --- a/launcher/resources/flat_white/scalable/worlds.svg +++ b/launcher/resources/flat_white/scalable/worlds.svg @@ -1,3 +1,3 @@ - + - \ No newline at end of file + From 20c281d6f8d5f25573a8c4c930a961ea9ab45380 Mon Sep 17 00:00:00 2001 From: flow Date: Tue, 22 Nov 2022 14:30:54 -0300 Subject: [PATCH 053/155] fix: reset wide bar settings when the list of actions changes This prevents changes to the actions to cause non-intuitive issues in the Wide bar, hiding items that previously weren't hidden. Signed-off-by: flow --- launcher/ui/widgets/WideBar.cpp | 35 +++++++++++++++++++++++++++++++-- launcher/ui/widgets/WideBar.h | 4 ++++ 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/launcher/ui/widgets/WideBar.cpp b/launcher/ui/widgets/WideBar.cpp index 2ad2caec7..81c445cb1 100644 --- a/launcher/ui/widgets/WideBar.cpp +++ b/launcher/ui/widgets/WideBar.cpp @@ -1,6 +1,7 @@ #include "WideBar.h" #include +#include #include class ActionButton : public QToolButton { @@ -211,23 +212,53 @@ void WideBar::contextMenuEvent(QContextMenuEvent* event) state.append(entry.bar_action->isVisible() ? '1' : '0'); } + state.append(','); + state.append(getHash()); + return state; } void WideBar::setVisibilityState(QByteArray&& state) { + auto split = state.split(','); + + auto bits = split.first(); + auto hash = split.last(); + + // If the actions changed, we better not try to load the old one to avoid unwanted hiding + if (!checkHash(hash)) + return; + qsizetype i = 0; for (auto& entry : m_entries) { if (entry.type != BarEntry::Type::Action) continue; - if (i == state.size()) + if (i == bits.size()) break; - entry.bar_action->setVisible(state.at(i++) == '1'); + entry.bar_action->setVisible(bits.at(i++) == '1'); // NOTE: This is needed so that disabled actions get reflected on the button when it is made visible. static_cast(widgetForAction(entry.bar_action))->actionChanged(); } } +QByteArray WideBar::getHash() const +{ + QCryptographicHash hash(QCryptographicHash::Sha1); + for (auto const& entry : m_entries) { + if (entry.type != BarEntry::Type::Action) + continue; + hash.addData(entry.menu_action->text().toLatin1()); + } + + return hash.result().toBase64(); +} + +bool WideBar::checkHash(QByteArray const& old_hash) const +{ + return old_hash == getHash(); +} + + #include "WideBar.moc" diff --git a/launcher/ui/widgets/WideBar.h b/launcher/ui/widgets/WideBar.h index 0d60f8a4a..ed4cb3c71 100644 --- a/launcher/ui/widgets/WideBar.h +++ b/launcher/ui/widgets/WideBar.h @@ -41,6 +41,10 @@ class WideBar : public QToolBar { auto getMatching(QAction* act) -> QList::iterator; + /** Used to distinguish between versions of the WideBar with different actions */ + [[nodiscard]] QByteArray getHash() const; + [[nodiscard]] bool checkHash(QByteArray const&) const; + private: QList m_entries; From 980f03dd206d9e15ceb111839ebc615a493c790f Mon Sep 17 00:00:00 2001 From: TheLastRar Date: Tue, 22 Nov 2022 19:17:16 +0000 Subject: [PATCH 054/155] Fix: Launcher_FORCE_BUNDLED_LIBS Failing to find bundled zlib Signed-off-by: TheLastRar --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8fc0d3265..f04b733be 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -368,11 +368,11 @@ if(NOT ZLIB_FOUND) set(SKIP_INSTALL_ALL ON) add_subdirectory(libraries/zlib EXCLUDE_FROM_ALL) - set(ZLIB_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/libraries/zlib" "${CMAKE_CURRENT_BINARY_DIR}/libraries/zlib") + set(ZLIB_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/libraries/zlib" "${CMAKE_CURRENT_BINARY_DIR}/libraries/zlib" CACHE STRING "") set_target_properties(zlibstatic PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${ZLIB_INCLUDE_DIR}") add_library(ZLIB::ZLIB ALIAS zlibstatic) - set(ZLIB_LIBRARY ZLIB::ZLIB) - set(ZLIB_FOUND true) + set(ZLIB_LIBRARY ZLIB::ZLIB CACHE STRING "zlib library name") + find_package(ZLIB REQUIRED) else() message(STATUS "Using system zlib") From 96e8217b0034a7d73c7a37881955c51d3b248dca Mon Sep 17 00:00:00 2001 From: TheKodeToad Date: Tue, 8 Nov 2022 11:20:13 +0000 Subject: [PATCH 055/155] Button to add agent Signed-off-by: TheKodeToad --- launcher/minecraft/Agent.h | 2 +- launcher/minecraft/PackProfile.cpp | 72 ++++++++++++++++++++-- launcher/minecraft/PackProfile.h | 7 ++- launcher/ui/pages/instance/VersionPage.cpp | 16 ++++- launcher/ui/pages/instance/VersionPage.h | 4 +- launcher/ui/pages/instance/VersionPage.ui | 9 +++ 6 files changed, 101 insertions(+), 9 deletions(-) diff --git a/launcher/minecraft/Agent.h b/launcher/minecraft/Agent.h index 01109dafa..374e6e94e 100644 --- a/launcher/minecraft/Agent.h +++ b/launcher/minecraft/Agent.h @@ -10,7 +10,7 @@ typedef std::shared_ptr AgentPtr; class Agent { public: - Agent(LibraryPtr library, QString &argument) + Agent(LibraryPtr library, const QString &argument) { m_library = library; m_argument = argument; diff --git a/launcher/minecraft/PackProfile.cpp b/launcher/minecraft/PackProfile.cpp index 6ce525eb1..bbdf51d88 100644 --- a/launcher/minecraft/PackProfile.cpp +++ b/launcher/minecraft/PackProfile.cpp @@ -1,7 +1,8 @@ // SPDX-License-Identifier: GPL-3.0-only /* - * PolyMC - Minecraft Launcher + * Prism Launcher - Minecraft Launcher * Copyright (C) 2022 Sefa Eyeoglu + * Copyright (C) 2022 TheKodeToad * * 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 @@ -47,7 +48,6 @@ #include "Exception.h" #include "minecraft/OneSixVersionFormat.h" #include "FileSystem.h" -#include "meta/Index.h" #include "minecraft/MinecraftInstance.h" #include "Json.h" @@ -55,7 +55,6 @@ #include "PackProfile_p.h" #include "ComponentUpdateTask.h" -#include "Application.h" #include "modplatform/ModAPI.h" static const QMap modloaderMapping{ @@ -738,6 +737,11 @@ void PackProfile::installCustomJar(QString selectedFile) installCustomJar_internal(selectedFile); } +void PackProfile::installAgents(QStringList selectedFiles) +{ + installAgents_internal(selectedFiles); +} + bool PackProfile::installEmpty(const QString& uid, const QString& name) { QString patchDir = FS::PathCombine(d->m_instance->instanceRoot(), "patches"); @@ -832,8 +836,7 @@ bool PackProfile::installJarMods_internal(QStringList filepaths) for(auto filepath:filepaths) { QFileInfo sourceInfo(filepath); - auto uuid = QUuid::createUuid(); - QString id = uuid.toString().remove('{').remove('}'); + QString id = QUuid::createUuid().toString(QUuid::WithoutBraces); QString target_filename = id + ".jar"; QString target_id = "org.multimc.jarmod." + id; QString target_name = sourceInfo.completeBaseName() + " (jar mod)"; @@ -939,6 +942,65 @@ bool PackProfile::installCustomJar_internal(QString filepath) return true; } +bool PackProfile::installAgents_internal(QStringList filepaths) +{ + // FIXME code duplication + const QString patchDir = FS::PathCombine(d->m_instance->instanceRoot(), "patches"); + if (!FS::ensureFolderPathExists(patchDir)) + return false; + + const QString libDir = d->m_instance->getLocalLibraryPath(); + if (!FS::ensureFolderPathExists(libDir)) + return false; + + for (const QString& source : filepaths) { + const QFileInfo sourceInfo(source); + const QString id = QUuid::createUuid().toString(QUuid::WithoutBraces); + const QString targetBaseName = id + ".jar"; + const QString targetId = "org.prismlauncher.agent." + id; + const QString targetName = sourceInfo.completeBaseName() + " (agent)"; + const QString target = FS::PathCombine(d->m_instance->getLocalLibraryPath(), targetBaseName); + + const QFileInfo targetInfo(target); + if (targetInfo.exists()) + return false; + + if (!QFile::copy(source, target)) + return false; + + auto versionFile = std::make_shared(); + + auto agent = std::make_shared(); + + agent->setRawName("org.prismlauncher.agents:" + id + ":1"); + agent->setFilename(targetBaseName); + agent->setDisplayName(sourceInfo.completeBaseName()); + agent->setHint("local"); + + versionFile->agents.append(std::make_shared(agent, QString())); + + versionFile->name = targetName; + versionFile->uid = targetId; + + QFile patchFile(FS::PathCombine(patchDir, targetId + ".json")); + + if (!patchFile.open(QFile::WriteOnly)) { + qCritical() << "Error opening" << patchFile.fileName() << "for reading:" << patchFile.errorString(); + return false; + } + + patchFile.write(OneSixVersionFormat::versionFileToJson(versionFile).toJson()); + patchFile.close(); + + appendComponent(new Component(this, versionFile->uid, versionFile)); + } + + scheduleSave(); + invalidateLaunchProfile(); + + return true; +} + std::shared_ptr PackProfile::getProfile() const { if(!d->m_profile) diff --git a/launcher/minecraft/PackProfile.h b/launcher/minecraft/PackProfile.h index 807511a26..2330cca1c 100644 --- a/launcher/minecraft/PackProfile.h +++ b/launcher/minecraft/PackProfile.h @@ -1,7 +1,8 @@ // SPDX-License-Identifier: GPL-3.0-only /* - * PolyMC - Minecraft Launcher + * Prism Launcher - Minecraft Launcher * Copyright (C) 2022 Sefa Eyeoglu + * Copyright (C) 2022 TheKodeToad * * 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 @@ -85,6 +86,9 @@ public: /// install a jar/zip as a replacement for the main jar void installCustomJar(QString selectedFile); + /// install Java agent files + void installAgents(QStringList selectedFiles); + enum MoveDirection { MoveUp, MoveDown }; /// move component file # up or down the list void move(const int index, const MoveDirection direction); @@ -167,6 +171,7 @@ private: bool load(); bool installJarMods_internal(QStringList filepaths); bool installCustomJar_internal(QString filepath); + bool installAgents_internal(QStringList filepaths); bool removeComponent_internal(ComponentPtr patch); private: /* data */ diff --git a/launcher/ui/pages/instance/VersionPage.cpp b/launcher/ui/pages/instance/VersionPage.cpp index a021c633f..7f98cba2d 100644 --- a/launcher/ui/pages/instance/VersionPage.cpp +++ b/launcher/ui/pages/instance/VersionPage.cpp @@ -1,8 +1,9 @@ // SPDX-License-Identifier: GPL-3.0-only /* - * PolyMC - Minecraft Launcher + * Prism Launcher - Minecraft Launcher * Copyright (c) 2022 Jamie Mansfield * Copyright (C) 2022 Sefa Eyeoglu + * Copyright (C) 2022 TheKodeToad * * 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 @@ -270,6 +271,7 @@ void VersionPage::updateButtons(int row) ui->actionInstall_mods->setEnabled(controlsEnabled); ui->actionReplace_Minecraft_jar->setEnabled(controlsEnabled); ui->actionAdd_to_Minecraft_jar->setEnabled(controlsEnabled); + ui->actionAdd_Agents->setEnabled(controlsEnabled); } bool VersionPage::reloadPackProfile() @@ -342,6 +344,18 @@ void VersionPage::on_actionReplace_Minecraft_jar_triggered() updateButtons(); } + +void VersionPage::on_actionAdd_Agents_triggered() +{ + QStringList list = GuiUtil::BrowseForFiles("agent", tr("Select agents"), tr("Java agents (*.jar)"), + APPLICATION->settings()->get("CentralModsDir").toString(), this->parentWidget()); + + if (!list.isEmpty()) + m_profile->installAgents(list); + + updateButtons(); +} + void VersionPage::on_actionMove_up_triggered() { try diff --git a/launcher/ui/pages/instance/VersionPage.h b/launcher/ui/pages/instance/VersionPage.h index 979311fcf..23d2a1b3d 100644 --- a/launcher/ui/pages/instance/VersionPage.h +++ b/launcher/ui/pages/instance/VersionPage.h @@ -1,7 +1,8 @@ // SPDX-License-Identifier: GPL-3.0-only /* - * PolyMC - Minecraft Launcher + * Prism Launcher - Minecraft Launcher * Copyright (c) 2022 Jamie Mansfield + * Copyright (C) 2022 TheKodeToad * * 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 @@ -82,6 +83,7 @@ private slots: void on_actionMove_down_triggered(); void on_actionAdd_to_Minecraft_jar_triggered(); void on_actionReplace_Minecraft_jar_triggered(); + void on_actionAdd_Agents_triggered(); void on_actionRevert_triggered(); void on_actionEdit_triggered(); void on_actionInstall_mods_triggered(); diff --git a/launcher/ui/pages/instance/VersionPage.ui b/launcher/ui/pages/instance/VersionPage.ui index 14b7cd9f9..74b9568a4 100644 --- a/launcher/ui/pages/instance/VersionPage.ui +++ b/launcher/ui/pages/instance/VersionPage.ui @@ -109,6 +109,7 @@ + @@ -226,6 +227,14 @@ Replace Minecraft.jar + + + Add Agents + + + Add Java agents. + + Add Empty From 6a51eda36171d58cff9d66f4c7a2172f32fa2314 Mon Sep 17 00:00:00 2001 From: DioEgizio <83089242+DioEgizio@users.noreply.github.com> Date: Wed, 23 Nov 2022 19:53:55 +0100 Subject: [PATCH 056/155] fix: force bundled libs on win msvc Signed-off-by: DioEgizio <83089242+DioEgizio@users.noreply.github.com> --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c0e5b50a5..4dfb45d47 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -230,7 +230,7 @@ jobs: - name: Configure CMake (Windows MSVC) if: runner.os == 'Windows' && matrix.msystem == '' run: | - cmake -S . -B ${{ env.BUILD_DIR }} -DCMAKE_INSTALL_PREFIX=${{ env.INSTALL_DIR }} -DCMAKE_BUILD_TYPE=${{ inputs.build_type }} -DENABLE_LTO=ON -DLauncher_BUILD_PLATFORM=${{ matrix.name }} -DLauncher_QT_VERSION_MAJOR=${{ matrix.qt_ver }} -DCMAKE_MSVC_RUNTIME_LIBRARY="MultiThreadedDLL" -A${{ matrix.architecture}} + cmake -S . -B ${{ env.BUILD_DIR }} -DCMAKE_INSTALL_PREFIX=${{ env.INSTALL_DIR }} -DCMAKE_BUILD_TYPE=${{ inputs.build_type }} -DENABLE_LTO=ON -DLauncher_BUILD_PLATFORM=${{ matrix.name }} -DLauncher_QT_VERSION_MAJOR=${{ matrix.qt_ver }} -DCMAKE_MSVC_RUNTIME_LIBRARY="MultiThreadedDLL" -A${{ matrix.architecture}} -DLauncher_FORCE_BUNDLED_LIBS=ON # https://github.com/ccache/ccache/wiki/MS-Visual-Studio (I coudn't figure out the compiler prefix) if ("${{ env.CCACHE_VAR }}") { From 4a1d08261408b63308dc1164c687e53c4f1fd08e Mon Sep 17 00:00:00 2001 From: flow Date: Fri, 25 Nov 2022 09:33:05 -0300 Subject: [PATCH 057/155] reafctor(WideBar): connect to signal instead of overriding menu method This makes stuff more standard and closer to what we do in other places in the codebase. Signed-off-by: flow --- launcher/ui/widgets/WideBar.cpp | 13 +++++++++---- launcher/ui/widgets/WideBar.h | 2 +- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/launcher/ui/widgets/WideBar.cpp b/launcher/ui/widgets/WideBar.cpp index 81c445cb1..428be563b 100644 --- a/launcher/ui/widgets/WideBar.cpp +++ b/launcher/ui/widgets/WideBar.cpp @@ -38,7 +38,8 @@ WideBar::WideBar(const QString& title, QWidget* parent) : QToolBar(title, parent setFloatable(false); setMovable(false); - m_bar_menu = std::make_unique(this); + setContextMenuPolicy(Qt::ContextMenuPolicy::CustomContextMenu); + connect(this, &QToolBar::customContextMenuRequested, this, &WideBar::showVisibilityMenu); } WideBar::WideBar(QWidget* parent) : QToolBar(parent) @@ -46,7 +47,8 @@ WideBar::WideBar(QWidget* parent) : QToolBar(parent) setFloatable(false); setMovable(false); - m_bar_menu = std::make_unique(this); + setContextMenuPolicy(Qt::ContextMenuPolicy::CustomContextMenu); + connect(this, &QToolBar::customContextMenuRequested, this, &WideBar::showVisibilityMenu); } void WideBar::addAction(QAction* action) @@ -167,8 +169,11 @@ static void copyAction(QAction* from, QAction* to) to->setToolTip(from->toolTip()); } -void WideBar::contextMenuEvent(QContextMenuEvent* event) +void WideBar::showVisibilityMenu(QPoint const& position) { + if (!m_bar_menu) + m_bar_menu = std::make_unique(this); + if (m_menu_state == MenuState::Dirty) { for (auto* old_action : m_bar_menu->actions()) old_action->deleteLater(); @@ -198,7 +203,7 @@ void WideBar::contextMenuEvent(QContextMenuEvent* event) m_menu_state = MenuState::Fresh; } - m_bar_menu->popup(event->globalPos()); + m_bar_menu->popup(mapToGlobal(position)); } [[nodiscard]] QByteArray WideBar::getVisibilityState() const diff --git a/launcher/ui/widgets/WideBar.h b/launcher/ui/widgets/WideBar.h index ed4cb3c71..a0a7896cb 100644 --- a/launcher/ui/widgets/WideBar.h +++ b/launcher/ui/widgets/WideBar.h @@ -24,7 +24,7 @@ class WideBar : public QToolBar { void insertActionAfter(QAction* after, QAction* action); QMenu* createContextMenu(QWidget* parent = nullptr, const QString& title = QString()); - void contextMenuEvent(QContextMenuEvent*) override; + void showVisibilityMenu(const QPoint&); // Ideally we would use a QBitArray for this, but it doesn't support string conversion, // so using it in settings is very messy. From cbf4159c7e21c0dc70e36db5bbcc4162c72f31b5 Mon Sep 17 00:00:00 2001 From: Sefa Eyeoglu Date: Fri, 25 Nov 2022 13:54:13 +0100 Subject: [PATCH 058/155] fix: add missing shortcut icons Signed-off-by: Sefa Eyeoglu --- .../resources/breeze_dark/breeze_dark.qrc | 1 + .../breeze_dark/scalable/shortcut.svg | 15 ++ .../resources/breeze_light/breeze_light.qrc | 1 + .../breeze_light/scalable/shortcut.svg | 15 ++ launcher/resources/flat/flat.qrc | 1 + launcher/resources/flat/scalable/shortcut.svg | 3 + launcher/resources/flat_white/flat_white.qrc | 1 + .../flat_white/scalable/shortcut.svg | 3 + launcher/resources/multimc/multimc.qrc | 3 +- .../resources/multimc/scalable/shortcut.svg | 157 ++++++++++++++++++ 10 files changed, 199 insertions(+), 1 deletion(-) create mode 100644 launcher/resources/breeze_dark/scalable/shortcut.svg create mode 100644 launcher/resources/breeze_light/scalable/shortcut.svg create mode 100644 launcher/resources/flat/scalable/shortcut.svg create mode 100644 launcher/resources/flat_white/scalable/shortcut.svg create mode 100644 launcher/resources/multimc/scalable/shortcut.svg diff --git a/launcher/resources/breeze_dark/breeze_dark.qrc b/launcher/resources/breeze_dark/breeze_dark.qrc index 4d7a69b21..97434abc4 100644 --- a/launcher/resources/breeze_dark/breeze_dark.qrc +++ b/launcher/resources/breeze_dark/breeze_dark.qrc @@ -27,6 +27,7 @@ scalable/refresh.svg scalable/resourcepacks.svg scalable/shaderpacks.svg + scalable/shortcut.svg scalable/screenshots.svg scalable/settings.svg scalable/status-bad.svg diff --git a/launcher/resources/breeze_dark/scalable/shortcut.svg b/launcher/resources/breeze_dark/scalable/shortcut.svg new file mode 100644 index 000000000..2f24b8c08 --- /dev/null +++ b/launcher/resources/breeze_dark/scalable/shortcut.svg @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/launcher/resources/breeze_light/breeze_light.qrc b/launcher/resources/breeze_light/breeze_light.qrc index 7d9d99f5e..6d868b183 100644 --- a/launcher/resources/breeze_light/breeze_light.qrc +++ b/launcher/resources/breeze_light/breeze_light.qrc @@ -27,6 +27,7 @@ scalable/refresh.svg scalable/resourcepacks.svg scalable/shaderpacks.svg + scalable/shortcut.svg scalable/screenshots.svg scalable/settings.svg scalable/status-bad.svg diff --git a/launcher/resources/breeze_light/scalable/shortcut.svg b/launcher/resources/breeze_light/scalable/shortcut.svg new file mode 100644 index 000000000..96def1f8c --- /dev/null +++ b/launcher/resources/breeze_light/scalable/shortcut.svg @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/launcher/resources/flat/flat.qrc b/launcher/resources/flat/flat.qrc index 508e0a9f5..a846bd2dc 100644 --- a/launcher/resources/flat/flat.qrc +++ b/launcher/resources/flat/flat.qrc @@ -35,6 +35,7 @@ scalable/screenshot-placeholder.svg scalable/screenshots.svg scalable/settings.svg + scalable/shortcut.svg scalable/star.svg scalable/status-bad.svg scalable/status-good.svg diff --git a/launcher/resources/flat/scalable/shortcut.svg b/launcher/resources/flat/scalable/shortcut.svg new file mode 100644 index 000000000..83878d19f --- /dev/null +++ b/launcher/resources/flat/scalable/shortcut.svg @@ -0,0 +1,3 @@ + + + diff --git a/launcher/resources/flat_white/flat_white.qrc b/launcher/resources/flat_white/flat_white.qrc index e11d63165..b0759d8fd 100644 --- a/launcher/resources/flat_white/flat_white.qrc +++ b/launcher/resources/flat_white/flat_white.qrc @@ -35,6 +35,7 @@ scalable/screenshot-placeholder.svg scalable/screenshots.svg scalable/settings.svg + scalable/shortcut.svg scalable/star.svg scalable/status-bad.svg scalable/status-good.svg diff --git a/launcher/resources/flat_white/scalable/shortcut.svg b/launcher/resources/flat_white/scalable/shortcut.svg new file mode 100644 index 000000000..b419a77d4 --- /dev/null +++ b/launcher/resources/flat_white/scalable/shortcut.svg @@ -0,0 +1,3 @@ + + + diff --git a/launcher/resources/multimc/multimc.qrc b/launcher/resources/multimc/multimc.qrc index 270dd0099..9741267c2 100644 --- a/launcher/resources/multimc/multimc.qrc +++ b/launcher/resources/multimc/multimc.qrc @@ -313,10 +313,11 @@ scalable/instances/bee.svg scalable/instances/prismlauncher.svg - + scalable/delete.svg scalable/tag.svg scalable/rename.svg + scalable/shortcut.svg scalable/export.svg scalable/launch.svg diff --git a/launcher/resources/multimc/scalable/shortcut.svg b/launcher/resources/multimc/scalable/shortcut.svg new file mode 100644 index 000000000..549c37246 --- /dev/null +++ b/launcher/resources/multimc/scalable/shortcut.svg @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + From bae0a0530bd5334a2f41ed234a20a064b5245232 Mon Sep 17 00:00:00 2001 From: flow Date: Fri, 25 Nov 2022 11:51:08 -0300 Subject: [PATCH 059/155] fix(RPImportDialog): allow changing item size to accomodate wrapped text Signed-off-by: flow --- launcher/ui/dialogs/ImportResourcePackDialog.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/launcher/ui/dialogs/ImportResourcePackDialog.cpp b/launcher/ui/dialogs/ImportResourcePackDialog.cpp index 7a2152b71..e807e9265 100644 --- a/launcher/ui/dialogs/ImportResourcePackDialog.cpp +++ b/launcher/ui/dialogs/ImportResourcePackDialog.cpp @@ -24,10 +24,10 @@ ImportResourcePackDialog::ImportResourcePackDialog(QWidget* parent) : QDialog(pa contentsWidget->setResizeMode(QListView::Adjust); contentsWidget->setSelectionMode(QAbstractItemView::SingleSelection); contentsWidget->setSpacing(5); - contentsWidget->setWordWrap(false); - contentsWidget->setWrapping(true); - contentsWidget->setUniformItemSizes(true); contentsWidget->setWordWrap(true); + contentsWidget->setWrapping(true); + // NOTE: We can't have uniform sizes because the text may wrap if it's too long. If we set this, it will cut off the wrapped text. + contentsWidget->setUniformItemSizes(false); contentsWidget->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel); contentsWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); contentsWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); From 81d84b8d0209e771fc55bbcff696d61c7cfb3cd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Santiago=20C=C3=A9zar?= Date: Sat, 22 Oct 2022 15:43:53 -0300 Subject: [PATCH 060/155] initial icons MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Santiago Cézar --- launcher/resources/instance_icons.svg | 1411 +++++++++++++++++ .../multimc/128x128/instances/chicken.png | Bin 6369 -> 0 bytes .../multimc/128x128/instances/creeper.png | Bin 9046 -> 0 bytes .../multimc/128x128/instances/enderpearl.png | Bin 21425 -> 0 bytes .../multimc/128x128/instances/flame.png | Bin 6226 -> 0 bytes .../multimc/128x128/instances/ftb_glow.png | Bin 12708 -> 0 bytes .../multimc/128x128/instances/ftb_logo.png | Bin 7883 -> 0 bytes .../multimc/128x128/instances/gear.png | Bin 18321 -> 0 bytes .../multimc/128x128/instances/herobrine.png | Bin 4937 -> 0 bytes .../multimc/128x128/instances/infinity.png | Bin 8012 -> 0 bytes .../multimc/128x128/instances/magitech.png | Bin 23097 -> 0 bytes .../multimc/128x128/instances/meat.png | Bin 10583 -> 0 bytes .../multimc/128x128/instances/netherstar.png | Bin 14062 -> 0 bytes .../multimc/128x128/instances/skeleton.png | Bin 3673 -> 0 bytes .../128x128/instances/squarecreeper.png | Bin 9136 -> 0 bytes .../multimc/128x128/instances/steve.png | Bin 4312 -> 0 bytes .../multimc/32x32/instances/brick.png | Bin 2388 -> 0 bytes .../multimc/32x32/instances/chicken.png | Bin 1181 -> 0 bytes .../multimc/32x32/instances/creeper.png | Bin 1524 -> 0 bytes .../multimc/32x32/instances/diamond.png | Bin 2444 -> 0 bytes .../multimc/32x32/instances/dirt.png | Bin 482 -> 0 bytes .../multimc/32x32/instances/enderpearl.png | Bin 2120 -> 0 bytes .../multimc/32x32/instances/ftb_glow.png | Bin 1747 -> 0 bytes .../multimc/32x32/instances/ftb_logo.png | Bin 1607 -> 0 bytes .../multimc/32x32/instances/gear.png | Bin 2414 -> 0 bytes .../multimc/32x32/instances/gold.png | Bin 2366 -> 0 bytes .../multimc/32x32/instances/grass.png | Bin 618 -> 0 bytes .../multimc/32x32/instances/herobrine.png | Bin 1034 -> 0 bytes .../multimc/32x32/instances/infinity.png | Bin 1714 -> 0 bytes .../multimc/32x32/instances/iron.png | Bin 1772 -> 0 bytes .../multimc/32x32/instances/magitech.png | Bin 2646 -> 0 bytes .../multimc/32x32/instances/meat.png | Bin 1514 -> 0 bytes .../multimc/32x32/instances/netherstar.png | Bin 1942 -> 0 bytes .../multimc/32x32/instances/planks.png | Bin 2299 -> 0 bytes .../multimc/32x32/instances/skeleton.png | Bin 696 -> 0 bytes .../multimc/32x32/instances/squarecreeper.png | Bin 1623 -> 0 bytes .../multimc/32x32/instances/steve.png | Bin 969 -> 0 bytes .../multimc/32x32/instances/stone.png | Bin 1866 -> 0 bytes .../resources/multimc/32x32/instances/tnt.png | Bin 378 -> 0 bytes .../multimc/50x50/instances/enderman.png | Bin 2429 -> 0 bytes launcher/resources/multimc/index.theme | 2 +- launcher/resources/multimc/multimc.qrc | 74 +- .../multimc/scalable/instances/bee.svg | 253 ++- .../multimc/scalable/instances/brick.svg | 37 + .../multimc/scalable/instances/chicken.svg | 102 ++ .../multimc/scalable/instances/creeper.svg | 37 + .../multimc/scalable/instances/diamond.svg | 30 + .../multimc/scalable/instances/dirt.svg | 46 + .../multimc/scalable/instances/enderman.svg | 60 + .../multimc/scalable/instances/enderpearl.svg | 43 + .../multimc/scalable/instances/flame.svg | 30 + .../multimc/scalable/instances/fox.svg | 397 ++--- .../multimc/scalable/instances/ftb_logo.svg | 36 + .../multimc/scalable/instances/gear.svg | 90 ++ .../multimc/scalable/instances/gold.svg | 30 + .../multimc/scalable/instances/grass.svg | 52 + .../multimc/scalable/instances/herobrine.svg | 96 ++ .../multimc/scalable/instances/iron.svg | 30 + .../multimc/scalable/instances/magitech.svg | 55 + .../multimc/scalable/instances/meat.svg | 56 + .../multimc/scalable/instances/modrinth.svg | 45 +- .../multimc/scalable/instances/netherstar.svg | 33 + .../multimc/scalable/instances/planks.svg | 30 + .../multimc/scalable/instances/skeleton.svg | 69 + .../scalable/instances/squarecreeper.svg | 49 + .../multimc/scalable/instances/steve.svg | 108 ++ .../multimc/scalable/instances/stone.svg | 30 + .../multimc/scalable/instances/tnt.svg | 95 ++ 68 files changed, 2928 insertions(+), 498 deletions(-) create mode 100644 launcher/resources/instance_icons.svg delete mode 100644 launcher/resources/multimc/128x128/instances/chicken.png delete mode 100644 launcher/resources/multimc/128x128/instances/creeper.png delete mode 100644 launcher/resources/multimc/128x128/instances/enderpearl.png delete mode 100644 launcher/resources/multimc/128x128/instances/flame.png delete mode 100644 launcher/resources/multimc/128x128/instances/ftb_glow.png delete mode 100644 launcher/resources/multimc/128x128/instances/ftb_logo.png delete mode 100644 launcher/resources/multimc/128x128/instances/gear.png delete mode 100644 launcher/resources/multimc/128x128/instances/herobrine.png delete mode 100644 launcher/resources/multimc/128x128/instances/infinity.png delete mode 100644 launcher/resources/multimc/128x128/instances/magitech.png delete mode 100644 launcher/resources/multimc/128x128/instances/meat.png delete mode 100644 launcher/resources/multimc/128x128/instances/netherstar.png delete mode 100644 launcher/resources/multimc/128x128/instances/skeleton.png delete mode 100644 launcher/resources/multimc/128x128/instances/squarecreeper.png delete mode 100644 launcher/resources/multimc/128x128/instances/steve.png delete mode 100644 launcher/resources/multimc/32x32/instances/brick.png delete mode 100644 launcher/resources/multimc/32x32/instances/chicken.png delete mode 100644 launcher/resources/multimc/32x32/instances/creeper.png delete mode 100644 launcher/resources/multimc/32x32/instances/diamond.png delete mode 100644 launcher/resources/multimc/32x32/instances/dirt.png delete mode 100644 launcher/resources/multimc/32x32/instances/enderpearl.png delete mode 100644 launcher/resources/multimc/32x32/instances/ftb_glow.png delete mode 100644 launcher/resources/multimc/32x32/instances/ftb_logo.png delete mode 100644 launcher/resources/multimc/32x32/instances/gear.png delete mode 100644 launcher/resources/multimc/32x32/instances/gold.png delete mode 100644 launcher/resources/multimc/32x32/instances/grass.png delete mode 100644 launcher/resources/multimc/32x32/instances/herobrine.png delete mode 100644 launcher/resources/multimc/32x32/instances/infinity.png delete mode 100644 launcher/resources/multimc/32x32/instances/iron.png delete mode 100644 launcher/resources/multimc/32x32/instances/magitech.png delete mode 100644 launcher/resources/multimc/32x32/instances/meat.png delete mode 100644 launcher/resources/multimc/32x32/instances/netherstar.png delete mode 100644 launcher/resources/multimc/32x32/instances/planks.png delete mode 100644 launcher/resources/multimc/32x32/instances/skeleton.png delete mode 100644 launcher/resources/multimc/32x32/instances/squarecreeper.png delete mode 100644 launcher/resources/multimc/32x32/instances/steve.png delete mode 100644 launcher/resources/multimc/32x32/instances/stone.png delete mode 100644 launcher/resources/multimc/32x32/instances/tnt.png delete mode 100644 launcher/resources/multimc/50x50/instances/enderman.png create mode 100644 launcher/resources/multimc/scalable/instances/brick.svg create mode 100644 launcher/resources/multimc/scalable/instances/chicken.svg create mode 100644 launcher/resources/multimc/scalable/instances/creeper.svg create mode 100644 launcher/resources/multimc/scalable/instances/diamond.svg create mode 100644 launcher/resources/multimc/scalable/instances/dirt.svg create mode 100644 launcher/resources/multimc/scalable/instances/enderman.svg create mode 100644 launcher/resources/multimc/scalable/instances/enderpearl.svg create mode 100644 launcher/resources/multimc/scalable/instances/flame.svg create mode 100644 launcher/resources/multimc/scalable/instances/ftb_logo.svg create mode 100644 launcher/resources/multimc/scalable/instances/gear.svg create mode 100644 launcher/resources/multimc/scalable/instances/gold.svg create mode 100644 launcher/resources/multimc/scalable/instances/grass.svg create mode 100644 launcher/resources/multimc/scalable/instances/herobrine.svg create mode 100644 launcher/resources/multimc/scalable/instances/iron.svg create mode 100644 launcher/resources/multimc/scalable/instances/magitech.svg create mode 100644 launcher/resources/multimc/scalable/instances/meat.svg create mode 100644 launcher/resources/multimc/scalable/instances/netherstar.svg create mode 100644 launcher/resources/multimc/scalable/instances/planks.svg create mode 100644 launcher/resources/multimc/scalable/instances/skeleton.svg create mode 100644 launcher/resources/multimc/scalable/instances/squarecreeper.svg create mode 100644 launcher/resources/multimc/scalable/instances/steve.svg create mode 100644 launcher/resources/multimc/scalable/instances/stone.svg create mode 100644 launcher/resources/multimc/scalable/instances/tnt.svg diff --git a/launcher/resources/instance_icons.svg b/launcher/resources/instance_icons.svg new file mode 100644 index 000000000..0c2b9e202 --- /dev/null +++ b/launcher/resources/instance_icons.svg @@ -0,0 +1,1411 @@ + + + +Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism LauncherTODOTODOTODOTODOTODOTODO?TODOTODO diff --git a/launcher/resources/multimc/128x128/instances/chicken.png b/launcher/resources/multimc/128x128/instances/chicken.png deleted file mode 100644 index 71f6dedc54f470a6f8219a427bbabbae1f025a02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6369 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 Xlbl-wZ*(y*Ffe$!`njxgN@xNAtADtW diff --git a/launcher/resources/multimc/128x128/instances/creeper.png b/launcher/resources/multimc/128x128/instances/creeper.png deleted file mode 100644 index 41b7d07dbfcc841eb6dded16284b1a49fe4e8b4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9046 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

& zA9ud~G>TlK@cYWs_ni0VoIf=Ex*O*JA(aRI;m= z{;ZJ3rM=TEe-u7kCSTLUu*d(?ecvAr+qgSE1h(Wqziav9=RT7!lbsTcMGds~WTd!V zoBQkW2l->Ne;*t^rM|oE&=1AywZ6gs!hZB6?T>5H&*M9(=TO@O1b(RHJ|nU0(3hv_w>H+#m#NcW zK5>Y>NYLRx`~R>e{>pXiHA~jLgnm}XvnRQ3X69-1 zuYE9ipWOk`P48Xn78ov4_%HIX{VSv0&E?z*pa1V@kUY+~$zO(T{-W@ZsKzxMr8x%_ zx;9ULxP0{_m1H;d8gWtGUq3QW@1Osnc&~#QlZ)l8hnF3G=<&oyCV%wTnt1*z*Zdeh zPk$|24kxaa+d~-M7t*aXR2#!jJ%t0)9gIIr{r<$}k?x-zI@)1O-)*-Z^xs}k zddU3lk$v9rP49oK=KQGp;qfe|o%^m$bqEV!Ia#~tqrz=}u?P2gS^4hnv}UnO{I7f? z;D<_#ZR2_;hD~h&ahzY~OYOTO<)kF_rMW)bCWE1-pyctoM&4+NsyxN)_@~o9Fb7Ef zyT}*s%C>Yy&Z`~KWysw{@o2o;M+Ir)G3aI%erTtUE%g^cRGXJmGXn`)-~FBe*X?xH!WdE z{c+L3>cQ%Z-~Xvuu6Vtp3Ix<{SN zns$NFUT~4~{FZyaH6Oiah(9&A{l3eFe;?X!ySlPBw+I_NKV zt)*rD{PNHBonbo)lSF&Mk5u&TH)dVR)4X0eg8xU5#O*e%Qyav8s<)kwWiR<>_QT<0 zTEH3I!?jHF+YUa@3=!DWwdr%=(&vnF$FDCvuleeP2zzzZIhj8{jufsrkoPa-Yqy!N zR{fk$N9|4bzHZU)nd%(YEi?D>fy_hd`b%Q=^*&fsBhgXOQoo70&!7YKaY`#e5&zt$(1uibn|IbtVzn@AeV#iYO^X@;#Dd|CJ(G@NH zoJC1L*xoVxILJ|Ts9fQSp4k-p!+di&*)u*|cawekfLoPYVDH1*t+ETG?Y^f!+LhtL zm9cT>O}&PPpWo;G_!hyo�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 diff --git a/launcher/resources/multimc/128x128/instances/flame.png b/launcher/resources/multimc/128x128/instances/flame.png deleted file mode 100644 index 6482975c494e02522f34a10894bb434f1ccc7194..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6226 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 AZ~y=R diff --git a/launcher/resources/multimc/128x128/instances/ftb_logo.png b/launcher/resources/multimc/128x128/instances/ftb_logo.png deleted file mode 100644 index e725b7fe4da31e42ff795a39a8b41a373f96a1eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7883 zcmeAS@N?(olHy`uVBq!ia0y~yU}ykg4mJh`hQoG=rx_R+Sc;uILpV4%IBGajIv5xj zI14-?iy0VruY)k7lg8`{1_lPn64!{5;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xh zq!<|FJUm?-Ln`LHjjf&$<2v>K-0I!cRdSV+T3A{H3~QFq1CJ+%V*kuDDl=!ES-t!H z+RgQMqHAAYTMIJx*q1k7e(wAAtMqm0tMKK1bBkBanju*#wKwJMTed5i?}KC+7SDOb zAn`PW{eZ@DD+V{qtBeMxR`N9j`js;D6s=-Tm=a8?k}LP}4kTn=JXM^p{z3j1+lE(1 zAIrb#ug6~lQM|tCH5jH|f7E5kkW;b9QSHZi7nhjsNeM?79Qf=Q96nr(NebHdU~69a z!)pEbeUBXfY;`^$KcV%seWm)NPe!|@&;PJIn~|YdE&BMKf-8TnJb5#H&6HBJhPETW zBsMcHdAL?4iz!QjMVXCZQs1AiD}8zFL=0vhj@rMP^~_GfNzQ%z+|iR9>tJ>9zDN_y(8g4?HT z_4TX%L|5Ot^R=?<2w!sCp(mNo{pNG|2Q7K%s~4*NVRumUuLB(n4NfkageKTfxsrHdJ6F`E3;WMNRW5Mwx$8uV#pr8J|-x_v)>PT!_?_e15w9c}_WbN9c0 z_<>QtQS9 z?t2F|Pja{OWytv4fA7}2C*0!l1qavsP7L($^zlD)hHXR8w6+y`0mUYdR2U@OThrD) z-nRGm<PGzQ&es)4hA4F=4}1#&A~yh6w^Z zru7y(TV61@ef!GrrZjwA#f}S;>!Z)+r>^}j{i*Ghd{`Q9Q96_!|2lSH z+rR%>QOv<6J5$g7*yvSV@-nd4WD>7YCf?aVc$^HI>Pfm%%k!?M(a8Gww#l zF6U~0z15Ddl{{%|ZxqcavZr&N0&CN!kh_jd-qSTK8Fub7o$HiHtVP|V8aK9Q5f;l?I+hK$>LrLQqWu=}rC#SnNqy4WOW8pEag=XbxE z_gElq`O|Mcc|V^#Sk2%Wzz|u*th(}F&DXs;{&(e8d0tz&c%|CZ1B#Ow4sTf|$RP85 z=26M)Usq1*MFy|+sR~<_dB-wr)x#@>lhb5&E`Ka*dHCwVf&~(}e>TL{0U$4*X{$qYVC@-r8kO=Fa)c$V6}F7i{axxhW9SIzqDEDR60++^;z7WCd6S+S|6VO%U~t(g5d(&qVQIM z^K1X#I373i=MmwZ0{hz-L_`@IB4v)rFge_r%sF33o8!6W#e>f>+0U|mkUFFkDPI#A zQ^?toU;1*I*|Q=sb2Go|x4r*8pCA+R`cf$WUfF}sbs9Js(th2apUU{+?d#X^m6trf zi?{6f+-gvR{(raLf6ts{^lZ=0ty-hY_I$Z< zHqTqQ(`niqug;ul9oTuj%c$vzfZA#`1XCT*Q@sY|I?r9&9yFn^Dp_> znXMgt8C%w5bKE$8!%e}y{^q7yL59%l%3UQg39**-|Gxa)baVfCfw|d&x*jj;b|?IM z)bxCQeT?>MC50(04kx6RFHK%w|0(`W$+POh%DaaSoYjx7Ki1neKS|s6%jWC8lGd-A zpD!`$o!*$?cBi;bbI;F>)pi@6F1`Q0Ns=MUpq*9W>%VrpDI5*G^J4?W7^WD#73CJU z6E}}IGbjGTA@1Lb5wpI;woX)I{&L~t@%Vcgk=G9u>(4%Mmb38Q$J5j8GqkqL2u#_{ zdu4l~7{lzld#3JKd+K>kg`2cwjAHHEnLD<8Ys@d-_i3(i{kC`g+jVrle7|$J>2d6i z1gZKb?avioarJH8t3Ipo^c)i|ejSEw9*-K$IX0cwk{1fLo?w^w^HcS`H?OP?izWs8 z+$?K*5q`SQ_FIX>p8ltA&ImCs5M5AqhiyXALp7!Yh1{7f%{tNotSz&;_LuMZClXfk z{jvGmdmnBskJz#M(W?_ZGj}jtWSDS6p@-`YgWEKT9|_h@0W}jk8?M!x-ddp|e=dG+ z)!DPJug!hNvC($fpORyn>Z*<_w)?nT`5hs|^3;Q&_M5o%d#iPZR^}5Jm@`|Lb*`Q} zt}3d+n_d4iKY!caUq@OGmG1H_4Y0E2zo@amg3}@O7t^VSo(xQV{3c&j8>C{QvV>j) zZF;z{ukX&UdGn+ntBU(ur(Ieioxs=S$>OLw%^`M6lnz&?Z26oCEElFXiZn5LXL`1U znlfZmJohip$*F#N(fej;^%tu(KHoT0+LKo2vUmUZ*7d|Rc&dgXL&uVU;`KhUOsfJ9 zFI)0ivH0GrtM%_n?}`?dE@{}TUiDOJX@U&LDkE0z>#AZ*8&95GF2IsL>qv=AvS;Nv zwh49LKkmN&?%t1IvQ@GTrkSVy^vh>x+}B{WP*iZSE{N*tdaCw{;a+i8!^+HtJ^z~-6tjY4{Kl)lR=SZhT z$hCjJW~p=6#%h19I(F9Tna2@k1(!UhfDBGqhwFE`Yd+}ucnUe#t23;fU-Ui6%hm4A zzRJ(>vd``oe)aKQ?(h4cIgmw#so|`W;fFrXf<=4>4mmZrDM-{v?g`X#T~mE~-roPe zby|djSdRP8?cTuA%YDQnjA`<8hPmuT2{BXjg133kWyqS-D3>qs{K}(yPKmKGw!YhH zxwLF%hMW`6(i8d z@^1`kTyXr}%7x*~r=I`$weuh;djR)4?iEr&|O%b4clJg!_*SQ-{GJ0@xGeB2l$niipO z&CBo*OVgaomoMJ_d9Aq7$>oa0*B|H4IV><)x&G;GMy+V3E{B9?6|NByl?jiUJK445 zKQVlI-0`h*_44zjtwgpLsUiCMkS-hG~sn|aHvC#X}qoRvRw>Lj}^|EwM zEJxb@DGaM(Rh*jdvi%ZLs1$F=Xz88zg?Y-dn+v;+PEfh=>&o8k-0J(CcjWo6$~<(? z%RSlmP-lZ~JUhqUFpW^3nt-WZmt8bJEoyvmVMkS&DA!t!+reJ*{G@zbCVW}P=%mth zc1E;~(6*@u9){a)lIU645b<^TZM)Lh|E#AtzK!~xlzsjCIlH_6b-vu68j@4IXoh|? zLrYNwgNNRvt?PX>*RdY0tF8U@rBLj1$z^B0&-3JS@BcGdPW|q+UNg z=m1Mo0w=@qL+g8D8!Y1&yqA!U^AmIoycg{noX+s)!<(DxOBz1=o(^fOeC`{)&8Fp& z_X4X-h7e8$MVC!1E9P{}Or7nsBJ?Y>EJKz>S4 zd{oT=#+hml+6y=TudlA2zU5hwQQU=;sQ#s^7B>l(HaK>Ku*p9-9ikw~vTLGe+{HAm zJsLql0U47_ymK}SJWyn7SmJK?p>Z19qTi7nk!|yj?rLn5kNNv^*N{_DMatN+!Wo+kRC$G)(6K1WmHR0fUucwdGD^Q|!fI{G`- zIBuQ4S~e(o2P@MC56(m$9^btDooBDE_@cKUr>f#u&qrQf-umxH&dd~Nwm5qwPW;BV zlJM(G%eQUKbt`c33tOJIv~-^9tkA7|3A__oES}7-D-~(pr=7mAKC-!|HF&B+Y1`}l zFVBg6wS52ZNbUm#Rfj`D3L}4 zk(LcNFUT?G+<$EG{qF61|8}QWSIMx5C;hZ{Z%R&fRQPGIM@S)(eF3w5{p%Sar}w>I zT=L6g+najU;$<_gmZ~y5Su;(&;Y#FMx0|c19OrmjMy5+HIq*%^urNh-ieJ6nzDtXa z7{C8NBV42*eOK)FrMGY2p1%Iw+pQ0dMwlqpNO^v8-nwGeIggeVS`0g!4)`Txq@7ZH zF8}B1(&y8)+!xvEEWXjSXREQm_f5vHru9#KU$TC7p0q^KQc(@ghE*MnJH;+cS3EV} zD(%d)t9$q6a#&aWIj*EvHd&fTer{J zr}DIR+4k?ZM2gR;No8zV^G|KT{)3y?q;jp(qr(z-!5sy8dwt(&iVb8oeD(@lN$=w9Uu{Hw$!-@5jS;epY{xdz!Sw{=@CyDBg$ zu}x&?I9big?CWB}+P0(op_SO7?|+V2nksFU3EU!n&_IU4!-$pnz@u&3o^q_4{_^wW z`t-oU334n4!hPpjrIx7`I|*N0DY@u;qlfI`5bleS^X2US33Jby{r-1a_G|rb7JX6) zi>vsqsw!-&yvoqPGHL38n%~RZxBY*(YyR)KZ-XcC6bT$qx%FRuy`80L*{5=cYZs05 z*>^Ko9{41(PVbfQ_nn*8ell-!m@_$PL$%q%T}%Dky%$fF`=Yrtc%%IGZQIHiD`XB# z4)>k+XL9AuH@v*lO1r}5l{VzY7roz-d0hA9t6jfNzI&(J;U+w@q``xK^=^3wg`2yd zWqw*!8PwLHxl(!S*X{B38?&E27GL%8{|CK1GuFUkg;sgj+V{)Ms%Y?VRXug(w|u#U zn;UOBqsg6H_x3$)`hIWslDmb|W}M1ZvHG*9@bSC9F5ahIGRhSdYr>4K)K6X2&E@9Q zV=K-WZsXWou%mdzz>KQFsH@hJCMZ#RirH-kS z7>-WJpDP~VFoD@Fs zL)^-Y`{Ay+8`gYuYFTppLB_`=nVDX586TLW=`bbESIJk%@!8^+x$CmkO3i+m_0JeL z&e<*{U#m@4=7==7M97RtAg5 zUcB|oMYVTD9;b#Pqey$-8gKR{JLQ~*PxkEo!MfT<MaMsFzBFGmw4Al7Rjco@(!wv1F@I`apPO6%uIz63qgONCN=_e|CYCAN zGpA4L&A|yv=Bby*RZCsmD)md7`{8^xxiyLRl$DsKUkE(qRadCNcu0uhLhct&#|2d> z1sU=GbK>vcE&M8A@c7WPXQu^Yt&(rso;jz$=pwlO*e*|H{y%QJ4(-lh|L{)oQgEco zM7EV)tN>cDmBy5AGq)WeFixfXe^aj|S%cG5SfazXpi z)oOW{C#`(Nv66k)?(1{z-MEn{+-n|s#i!)xQem|}-;VDt-@p2*cIDw$GeYGBCW#1& zRGMZRTMvZqddFW{hU&AdC{P)A@BM|jzv7>4~06~9&WXNLIenkzhL<-VVB zc-~nj{>?#>uVzkYb&#TTiaxVhCx|cZmO7y1e(EJ$K{7(~b-bj1A>G-kd+WDD0sdQs z7&><|)XVle@9+BKz|?ZvO+)bEWQSi5Rx5?FIxe}%ao#DEXZ7vXNhO-hPg|zEKHZRM zX|mP!(Z%S=r*-WQ^zHWM@?ie_(9<;bCpOI|eniDG$ zFBJK{UTOE^)q)iXmmL$hwtnN%*vs7^u}VO8j*49Cl*9MGeBJxhNLv3)LfVoU{4*!} z`8#~^sB&pv$;FV@Ioq&>qfx<6Fr+czN=;x}e6-?S;}uN~qCeG6F8O^iwazI-P{*iv z!fl7(F6L&wrY3EdH(M>wFfwhZ&EoWTO24`ki77Vz&LN zeT{9g%&aYik^AJl1E!htYTOnO32)1^USrka)3&H7;hkSri1Fv&4?Gz}uLO1KN^M@X zjYX}JIr-bC!WZf+5ASI)>{)dtJ9VeR1@?UlrmWU(T4uXjbB|U`#ZTdbSH3-ZU@U(4 zVB>}*liupy^Pdy)T<)1&i|^T8Da-~eUJ61|3$KWnXP5Gda`3mznOWpED`vK*vA4WW zV_LcbSHeYBIyVBy~I>9bVCizhXOsf2Sp z$p0>GU~_lVI-gr*-;CDZePZ#~;~)QF#S4rxGCTU(UTREVpOx(ErTkjRV=_~f+*Y61 zon6`fbIvJ!-ngdR;>3IZjk4QK&E?aK=T8o~9d^A|@Z#M5z(=9_jFYAu_{85PviZcM zg`HYYzZaD=DCUX>$}Ya6x%#^7&)gl;7}m-$HEcX{z3|YtyNp)Td3bEPe!R`@SapY0 zC7Oxd)ALkpM%uAP|JkO$rmdRAwz~3g+X5{v-S&0tZ&vp9ZWsC-=~=o~_|ZQz{U0Xh z=E^Z0+~Cz9bo_8>SI5;Q&%HWhd?)KIzvFnhU>-L^!|vlfH`PNmbXY&TPqw;na?hK0 zG4C$6xMxK(NoOewYyY^Gwqw$M)LhC%$y5);+e&?R*`rX9LZ+puRq2-sw8!PXt zL~}Eg7~211KE89cwL#8H>*)~!Q@-{qHatsd!FV z{yp=)w8E_`Z+E@-@mkJ3x#5h(Gq>55NnIIwjP8vuG7S9nm+La!*zDLL{a)x%WJTbS zOcwFfCxS9AFI#^aaD}rl{C;dc*EJ=UCt+fIV(O7aldbPtpO5{vIJL^zz=@%N|6<9u zx33v$L=OD^<|Zw1W83V?ll5F5FG%&b8?A7as$P=p%i8ega<-|&awF#n0y{c9=0v*Q zJ}!JIIjK(COf^^Ir0-HbWktO|(&49>B3?7-mkR6t=D%LM>~i$Jr=fp}9x!fZznF4t z-3&CB^UU0Z^b7{Oq?x*A_+gVn;mScMCbSl5aX7#-ug=2cn4w4haZH}#Vo!E9& zi-V_T!n|!fO%~24+jR~F`Yt=X(9&h^oT6(l62EMc`^qx0X8pasM+!S4x5_uZnBKs# z^QyO3gHWK^(>w0Vo80=>7~cH4Q%to{@mj#%RqN(_?$)}0MZoyyUM_~Ok(Vc0T|Ldt zQZvQK zDE#+m7R-2C^|SE!iAiktOCIl9^~Lqu)2X)@OG;)bWk3BFyw6-Q+HL2mK&@A@_FFw( zz0o)QF^N6PhFSSe{nfu~nGck7dG))8EM30pOKYCEdk<4YSVV=-jLBNR9woiG!uIN8 zsoIAXf~&XsSaFo3a|?WMY@2=ZeTm(P0`tB1e|=h{wpHirUa7qG|GqbAPEd7u>cO!0 z@~`q&2TuR4`T9b-lsD*fZ?t~)%pO0{mUJb7h^J5Tmu)bs{X6~s%RParOXTh-Rj$tZ z^GnuI@oc?@AKS}iZjuQHIrvOgoPQ;FU@A-56{(kRul{CdVP5p7qw}kp*B{eg z@%3dxk-)R{ayvs}CY3(jCB*RJ)ZAUqLoTj3eq-h9DK%<#`|?sIaMexTVtiC;RZaKS zv)U<>der{CZubc(SebM`!rzi1K-cP3!Ym#CtmR*AtS-ALafGC;YF=O0cUx%lH2cg1 zpVQs5{HHG1mC_mU`^oCe?718asvDegTSU}@P6kR&+_LO-uYXp7?j$?Gkh8H`o3hp@ z3a~c3tX*mK^}L$rB$ZI1TAinQjLXh#{#3h@D|RK{l$;Ou7R=~mV0n9u*Wszgwy7mS z)5Vra%1Kt-{HC(%hzQS&?T%ARqH@>#+P7rIDpsQi=BL?0{B23q((1N8r#)P4)|kjK z7?f|jv^M4{@BQc{jSltmzr?DBba5`b&wh0OCPoGcM+1?N9EY|1`<5g=a$YKubS_u&5g6WE;C)Qkk{erQwkhA4e05Cy%3! zaYLK&-Ob;^?#9NRzWr`*<-dOg_gAl4w{F$CSMwIK-0AB1{_5WEcV}(>Pkx><&*u3O z&qvZ94UC-`w%@j6X0B}(I<;@&t*cG@7TWsTW!f;#u}d|-^XJF1|Ni+O4;-H_>hHJD z{$q=p{?E3gwtNXTgEJ1o7v?uyUf!$h-m~*Lk6h!snbSDqb{QnLv76aG{P}hLcRBI% z4Bz#;rf%91m=gcbNiq#FjQ-JmShR3UN!YpW*5Ih*mVAcH52a@rviHtY z@4dYImRx;_;+!|KoQI#sb!Mj3d(18TkSHrse0c}wnMO9{=17S?GXp32AWa7Etvda3 zr(Pt^sE&#KG)ej8)tlVsw3iy&zn5Ox_~V!AqwBiNG3<8BdzOnIJ~>q>thoK~ipWzz zxrUnOcgZeV&$D=wl7?IGUH%J>3-b=HpZ(1^waM_=%nwTf`fVfBc|VF=+HvyPC$;FD zOJ^p=eSUPv`<&pM;{`u{r8T{=FJaAl8o@6ASd+<}vpn?k#`-A{;l9@-MJk1Z@)n+3 zZIxDe^X!w*BRUa0j=sraJhP5O1A?O@)xfwW)LCqB+&S z-M={J_a}>kp%FhiDq`|x)Y=*yygrv@huoj#Ozz@`V!e+{oE|B9ta4_cNuyG>(@dsT z^HRaonIC+Vv@{damZYfUA7{~=c~oN-+nqZ$I~QKDC^cBWXz41++ZNh6HgeZO{USvd zKYjM-;iiSvrW-%>RQwVC_tiq}$F4~XuP^UWSGWBivLn0Gf+IBUxQ_nokg(+UE>Gub zMLHa_CRm*th`l)-wuAV(lvt;8k zZw}Qw*1(;U(k&R53Y_Ul5WB0(+B}6}vWL+W2i|~YH?hkTX4!O{k>a1Jc}3aynGx86 zTaFL3Y`!h2-)nfVUV!a}!m;xD9G3qte;OxPVt#awq7c=$bIW-o_zbzdFn)vT5|qx{m2-4?6P z_pVntwXyhLi$!Txmd&l5wae$tyz@Qa_s)YCSn_R*_dMj;aBa$2v0cX-mOt-tZ%99% zz=5(<*nlp zeCj*rMltWsher8J>$Evl9_j@c1)dI-lsaV^;I-OuU(?al%BaGhS$Wsiw>=JwYhU#u zE>CaS%_FBA56)-GZ(ALHd)r-Z9lfphpMUS3u9j<6;TmJB^3G!Uw8D88t&D3z^0yrQ z$eY~YTUOb8na#Z?UHlO9(KV)#*JrIU*w1=S?9>#zb#FbV@(H!Q_Y00s z^eCDv6`-1)bBV#U_GDPo^3)V>ud`j%F=vyFSFAEQw`P^`do^j^rB@pZCHCAm=50G> zlVOl|dk4!k&D6b(hc;+SughvY_OONd+|J@hx5ekC%U2!N?aSw2j!B@2TNnJJor%_1>xc@ktRW?uU8zf)wvRHmYGm)uz%jY}9mi5@gs zqIz;#(k9X6uhPZb9w!FhF1Wf@XX(cqC%iB3FzR%;8gu@EtJ>=9nJ3rk^QX>xv}69d zb5lD1$}Fkn-e!&>HXWz@ip6bnp4+a z$DVnij;?|!7e$U8%UGrwq~6KcvZ}PPkWlWqRn?+WSE)RJE@Y!JnJ8e zy+5r}l0E62!djuWUE+gArNMC(pHHT24W2W57$-K%9F|$CAUI)yi$I^|#S03vRQx5^ zRjrvY^SW45|EpPkTE3Ew?;JNd^e`?nYgf@qX}f)*#%HolrR=8*Z(c9AdhAs^weavk zBSZW5HlKSwU+hoHZ&0a-m3+{)^48_=?UUQX9-S%@UH#MMb*!hP>%{gor;bI0rHFB| zWO4V{1U!4&>}DFF7qa`|Dx0chD^|Vfuxj0NVw1=#qbnPkGY_%6vMAvQI~6+P#KFz0 z`TzCqZ%x?S@%mr;>;Lyd_-y|6|I05nx0IMPTYZk(1(zUY8`EAvXW`c_$t>rSw%iK7 zVsTVQfHz95$lO@cH#@KG)@z;YMNY||R!s}<>z}*J%3=Mf^+mjKE#1IV$vYgvIjN|9GC9utv6f=WPERmUXuR*P0kATSOZ8 zN3>YE`Uol?@0{Vfr*ns-SOW`V{-m8VudA)rO%~CXZ=bjH=U&*(s7HmRy!;GneovA4vJ&X?@GUNvYEJipcr@^K3BvapdAbqt!t(#oZ)zr^q=ScX}apO>wE;w4;Zl^(Ul9 zra7KGY$ZG+$Yau(LjTAhFE38zg>2cOm1%*p<)vqw1cS6>P8X&|aA^3lRo^lCFt-xtsb6-cTlAE~n&6{rq;*O?SGKq7E$jQh z6w;8Y#A0*w8k10l?naKC%0kaLBbAoAbodo*7FeV$`u5g3ubWdYba}bVQ8=8(UBmcp z;aqVgRU_v-ze7_~EP9&~Tg~4&=4nQXeGseB*}fnqPjX#{&W)6`e(x1qO)c!qZXR$w z{y|AHazg8|$*CK+v>6s_CZ}FFaAwiLn$J~+2X&1P_&w;K+GP}YBw?=A%Ji`BA8si3 z$9~@B-m%ntir5t8(=l=etUQx^q#Cl^oCJ?GBl>W`ef4rn8Sq zXY}qDn^{-vX5BwkZgQEHf~#X%kYaIUw(*Gr(#F$wvmZ8AezGXk^WC(^^CY<*9K1M1 zGj&2tmQRoGJwdJB36q1Kx$#_4)Qob=>vc1mUKIApaz^BnuSreO(-~&7)s*YbjePwx zbx}v?<+aJzOix!m``W`=WwNsUDBmZ($TPZ;eS(GkZ$nNSm>=FVmsNdw)6ShT;YO3K zizacrYn$Bo^hEcACq|20T1>8P-Og#J%dAk~^!l5kXP>I#8J|;voct192{RvCPMCdS zqLJs!00!32VOm@L7nz!Q%1-wx7VS%CyEv(RNy5ZiLKiok$(S{3r%BRM%{L&|B{f{z zvpaFi|3_Zd4`yqARtj`m6C8cbbbgb3wZ_>Uk=N(+^&GlW?5OsgL$N{n#FoOd2M$bX ziF%+a;p3e0;M1-JTa)&K9oLI#BVaK~i*A%Ywd!NuiOqUfmpr%LyY2bv zY&Xr#F%#H3lw38X{C+%a{{Lg|ef!_i^&i)t`*TiP-s-=z{pJNTZ}pV5p1az2_{rM0 zw;XzT4o`4jqR?S%rn9g9pRv0Ajo+_q^Y!EQz3!{|_~30r|AW)~{};cnsx+y8yK?F8 z_}@RZ`S<>M`SiE=#HO83Jg%)`agMOQ6mBAT+mKl>+=1)&VU7P!Zr8oLxc#f1yv4ll zyZ=9UvparXAL|t%#Z$IYVk-OwGYuuKZL^;#A|g69#%tQoeS%T*_N(nsnCG~C5!bgZ zVhIUvSH)Ssur_>?cKD}X+=aiS)GkKk;d_A=jwF1U1?gXT&$ZE7A=|P zk@xLzd)=G8_w7GR*BAbpxB2VGaQiQ(j@uPlzFmLoX_T)7$J!tB^ zZ^eSull0p}rU`AEv(#~ahJ@a^fQ$3 z#UiGm_Lt-Izi+Vb+3dgf?U&LA{-^D0K28+3tNS)F+>`0f#F%w$Wt_WGnbKMR%$k#Z z@K2XiY-zHgadb{l)XD6x;hWN2V%F|7xc#Q|Va9u&f?p*M7H<2_&u8jtr(u<-_S%SN z^QoL^$DRizuo)(&#Tvi&2;+Equ*1uoy*}z($np5U7qsR7{yhCPrdcKi_DK%OJKfrTwM}~xGx<{J&UG%^Ps{yXRlQ5>b4YN}V@Jb`(D-USR1o$I(vt#f)IC?1T4j ze15)O{P%6fqGfjfZk6x*azsDIv-oTM?*GC3f6o4luX~daarb)Me}4Xd$2J9gZVj$KYR9_B8%;sG z-WbO8hQ^#K`n5N;SFg{_bb>|gt@{>i51Jo7=}tL)cEbtXvSVAn>+o-`JZrbfK)t5# zSo&S3>pgu-lrHG~dL#PhS1xNkd2QUe(|;T;ZakK@B!_Q{|B>1U#V68LUq^AY zE)6-+ae_(Xjp(1Xr|b7Tc>nj_*YZCPX6DzuWRI)(U3q1l&7&+IyJ->}r zIkH1zd#jE~c(B%V?_zmnpoAJ6+y~cdUyF#goTMz1N%6u>SJht&DRS6Gq zc5`!6+H7`D?NqQy@Pb%we*2mi^Z(3jj_-eP=lYRTizL=`9OU})JITO+t@#_HvGK7p zb8elFoH5fl?OD%Z^#!+Y{`_fP{Xg%Z`-ks-|4!~L`q-?$=k22_KUAhPKP}Q%J*B|a zo@TeL7vD?w+ip{L`JTuAqAdFR+8Hx-q^?>BBz4SFy5~~aA=mMYi-mh~ z>-}zgF2Ap#gF}4Y%qfgBH_Ulr>Bc5}xm>h)*G|Lu!#j(Q zbqeo3JSp0QWof{ccb^k;($XTho}_t+8MHDi%W#{-_)VGp-^c3x?|IqwOCAoNUljLa z(~dn0q#5u3sD1qZcI~!f@#p5Y7mFWBw^x5>chBgs?RUw@ZNahm*Ve5)IKS@y@9(uQ z<#zr!_*~x3erA;0oD)~>b$mPPV%Zr6V2SL-@n`O^r%AX83m`C`Tiy=V^1HC zIbN8juEJ+3$3{qa2z-t^q=vCZEp5?{<2_@kT8F8iPR+4T0O zS=@2E81!RBjy^xS_`QK#&FZbw#{{gr6=hgP*|K2S>4{xx ze05m7?!|KZ%0KV_Jy(C+x;vi#L%8^n<@J{=|99nS9b3ryW1jOdTlR-XY>rs$6f?V% z{<`ekPMK#_=5gLl-QFK=nSQ(#x?_(@-Ou}-?EZ%q=ktq5Up>V8_7?Mx)1Oz%|N682 z@5>@t*(+W1S4MBTwfjtrk^@H)%e3^SwDT7CgqU5{vsgY`suY_5q|T2{DArZ#uO z<_X`z!BzO@lgahptKWBvzuP7ILBA&S&oh5DH|Mf9A0u1X-y7U3Vc|Q!kuxVRWlC&J zH>00SldyYFzTu8tT=7+&HE&Zbst;EFx9*u-enaf-E#)8eUv6-p_PwT8)_u=aRQzfIDf=leK+SU2wdb~txk?r&*} z9sF|DyFdPzZ~V@hZ~nigAK&$J*?x;1SigCt@T>!}$``r*9(%%D@mfxOr)KdgjnnLp zLLVIA+}NI+&tu@ZRP2&sieEzF+RV|MTfduLoui?iUN}dp^6@{(IVssc(cXt}Jx&-Ed5Zvs^uFlajbGcQupz zw^I!L_I8yASKrv@ws3Oghhwh`i;BI|HX2qIMLNCHEB45`xzp4qHt*T1_cd?j|NOc6 z>PGf%*8k@9HXoG4i8 zQu(;fR=YX6+7^xvPNe=n{4c)p^vXX|C-1)aGybRZU4~y%9^_kQ)%;kfd*Ht4g6b>3 z%~P9R&%gfmz((aZ_UP>MWl#V97XMaz|D*WxnH4U|nOc7Y-!2lk^6ZLA{<2^DGiQ~F zT{C(1Q^CM0N9SI?&1av}eQDB>b*Gcv*=E=*{L1ubilKS>7roZ1LbHmCymF@(Sg}SX zU*Wyxp~AT{+N-nAU zmf3^%ZJgVJRd4@MD`_~<$J6j2nZM@cxt(kHCf~fQqIPKVPW75!D_fpyd3SQ!QjsU8 zrm#h>vR#~MRAFjVulC``dsUs`rx`@{{C`}6BpfBev?>u{TI$Ln*q z&7PP4I;(dszg(AL?@8C}{O^O;mmTtT8#Pl^&Oe<}pvZ^(zi<=t&G&=H%+)I^lWHsVACAvz8=e zUfytV%S?-J?Ni_AfB*Mk;@ku7A70j*&U}@t^5V(wYCoy(a(5V8%%v_!&p4a+Z#Ki3 zTi1=Oojqp<$&?r*`|E*tIZ7zv9iVcE1B&lC6`9 zP8w$z7bWIeP1|4o;EQ$MvtwUB$#;KVpQH5b$!A^n?Js^-GhNAhXl}hXpZ~nJT59{u zgAZ%w{O`4nx4EIm;M*|Ws8i;9(7atj#wVWZWbR+W?8Kgwu>bV)pkq1C*OYZjBj#vI zl;&x1uA9wzN8(+n)xE7QF}t{zj_(=Q|5#-3ht`AVtzj?x(6`dUNI ztDmlg%eOwbQU1N|{ay3u8$S=n`$jj_*T~mA@ZHWBl~!=#!HTV#s*4n&Rxdi%wDDlT zhE-(=Ta`ZufA}8NUVEV6^)~<0^~K+3F1D}xc29f5wqM~2s!u%Edfqr=Tm1b{OsjP3 z(vX%XJB2q*Y1=5=W#FZKtUxZJ#rXW8$NlPl^YkHTFwu5-dkK3GZ*Ba zp&Pwd-fVX9&64+F3?;mBJOxRYqNQ&YW*RfbJLIj^Im4T#_I(W(oAj%lm#g!_+B0X` z)w@PF^*=a!_v*Rr@=-H>e{FR>t;U((9$a+h$;_Qaok5EZS1s_-+-$QW-P2HMjj*@$ z(y7xPetRo?KJP5c&9-0LL+xr$?Wixb-N`KcVYcU*`D@r0y05B!ws3Znm74b40JciK zJsYkx>HF_oq9gIJI<5Zw!np_X-9CKD|H=Cx`NKi>9>0CO6Sr$i>VDvF`Br_{>cQx?PwptZUWovyBY2x%LWyMCnJgLf?Y05XZ^Pig|*l+)Cj@@1{w{15Cw#a?Fyf$g; zCAU8<6Rb*?WM45}wx<1OkLDMH(z90$LjQ=^Iw$zWylN zuJ_jY)Usy#;Mamr)?Hd6wX)fGT4ei@zBxiC&UWavO3ZoERQM&&M852}-(5lX{$DAd zxo2-P@Ofo6^YwhQd9fVo(}LFgQhfd8(;l-^YAt=8^D3_~&o9k6_CZqI)+bi{uGz7( z-j=Ky=Hb%+RJs4(Jd^HMcEd91d8__Qwhw0?+*N;D<&@|C;^j|fw)#5eAG7aomwfW} z)seRIujBT3FDTave*M7gsf*>A{i**S@vP&~T;99*%{IdpJMEu#liyGOZIf~Df}&^p z6Dye|&hKP;eDAEkab~I7*If%W3eTU^a}^U?X2x_)f}ufuUc+*6=Do@bXMMe4vUpFJ z)+VcxH79pH`y!NiY+-v1+ePCmrjhC$LA}#0TIbxkWAr5OlgFnY5zn>N%bE7qyT5C)V_D4IF^VkVQac=myL-K^VwYl!rGIO;X@BVy=nl9Vp{FZy)>ldv%J+~CM zoyfEfJMO|B?tf{GXR(^BgH^(d1)a@BvPWi$*C}*Z&OC2%ZQ*mv>6?0#-I=(#*XkJG zez2?f*OrTOw+n}dIR{t0F;P7I)KyD!a`pA(H&Gn1!C9sKR}9yLJYE{GE@9?Eod+{N z>=0X-y{Y_3`um%m8}#cv%>@j)Kb*LGTcFr_?*D(f2kvX1Fc0Qk%sc5-n99K~x2Bab zuD$y9aJzWgM5c8e+RWz*o_eT8aFz(#?o3mCd-!j|lh2c$`P%7UuCx4|VyAp{Zr)o~ z#gsK`Sj5DZ9nN&pPMB}fC$o{gD{}Sj&5FIxl0I4GyJ}Msa#pnaA`>S? zf7XLWlhY4QO*A{ZQrw}<=8mZT_jf16_}{xcn7)74!PZ)*73}@n^`dVJ6@UI2%*gkS z>CfF)|KEBs_k3gcGVSQC!UJXxlq+7J$*No<@!ZE~@&&eQDISvVEY~rGvtKkdQ8w(p z!G25sM*cZF&&?LLq1V11>yF&qb1v)2yp10#cIV#urSQQpBkoO9l0=o*;}u+y8cu#e zj*DFG8Af&ndc-}@%6zB|TMIC)d6RZ|{ge9L3l*zhMd_WqfgU&|=|Y|@gH6_c`AuDQ?RjJV!Bz3a)m zV-t(a4E7}Pi1S>V^?}9a@0L&-SsOXtm0u!Ki~~dG3U7*OnKPm2`-H_)*tf2{;j`g+);fFVJ9hF)+`#0=eDA)bm`tk9)|G(?Lzp03Kot2{OnYX{-XQS(# zw<#M#>YmND|2>cS>5d&MRU%lQZC`o0@9Q?+X2<62ecD#J-ofE^Ki{#LF3Mh{9;AO_ zSJC^FpobTYj!H=KGQH$moK@~OyJWVf)i+`FfHS_Kf>(MLFIqIkXyv)7Q`)ZyOw82% z$S6I@;H_*8i*|Ua?Zk#^zFTKGcL#pIzq$3r{SypL_kW(c`}}?FtNp*%ZhrjtdgFN& z*EKD3W#6rS|LaZt*PHRy_2-YyUe)%m_v=1O;he1S%H;F+g@5SYz1^sEZ&vqH)u2ud z)u~)sDn+5wR<2Sy*}E!g_0?T>-jwO;>fADU<#-0klj;w$nSa=wl(|>;?`pc;pRL)C z&+=){zBT>9r=xEh?ybr>c;)D`!UJ&!+fVK~n6hmFk9vFAs}39W$hJzAss)~n_j(Ff z#4UdIwd?Z@!!1?@PN`f6Pn>-s_eAl;)n!G@i+x|GO}2TqoyV@};Hj@iPA9+KzTeo; ze2TF34igTE1MGF**Vis%t^SlWf5t;KN%wWHUrzok|Km`({o1p+x2|lP9$z+VW&fkR zkgLzKf8NX38ai>=#_26zGas8IPCGiy(rLGUP~feoNxc^{7IV$G@buKAjrsCi7gtDM z-od59dS#39Z?&zva~llL?yQ%7p!~xB?IU5OxfUA^=GUty`RzadR_C97{HwmWmES^z zXYca8qp3D?f6b@=ZF`y3ZXS($bN;IM@x2$n z?68v8zuErsGDw{%eWP~dPRTy)ZMH1?>wlhOz4fGL?ThO!?=QcqU1r^$k$kJdob&gi zQwOiky;ZcqWZw@PbFap^U;dS9IaDvYI_>D*+FM(6bDtat3A+7j%AaGoJqgn70=??Z zEidm?*%iJiSX;j>ru=s04>sml_YHS<7yJ8_ZJWq2`T74NKilJ@um9f1_~7-|e=e?T z8vA$uJ^eX<=ayjUXWWJ|-Pgs+R^0bHvwJej4P9T?+luCIYA>h-#Uz(3NjvnyoUK3a zy=YASt%pgk?ry%8oHKWIo?y+EPKBJq4AEk{hXXY0&?(>w& zkz>BYWPbik%zF9svZoJsKQv!#>J?M(|a&FBAkxb2*B&}z;F zrA-BiD|_$ueB32htjxS-&4p*1mT#@r*2vxS&L`;B(%IerV@)#Bu3h6i&L+CS?abL! z;ll9k6BwlD)gPZ&_x|3wtwp|H@^2Y%t-Jm^ShPHUXO!G|x2Jw@cV63|$5^)byZQFa z#Vj{i*KXUN&tl%ED`m5A6M}WukoX^_GXniXsi#-PFF9Rm+%g zp3C0pT^Id8dB#nVJ(aQN#_k=0Z(=J#b7p(Yk1OxC%FDRC?Tq2P zef8o`+kS8Prs=6>`Hu5qgZYlE1&&!hiVx?l&=PDu@%gOKgTli9f4ja0Ov`FrRK%^~ zt+M$-1Xr)+$+;?@Ih8%`5!rsi_HChova-=Ku66j*UQ%a z)c>=Y|4yWic=YSq?bX)WPgnQ<{jylz?$4*b)7LrX$={T^UuvDR_IvrN?S*^WKj=2{ zZ`oAAWV3aFQ;%V9;jy$3kF7_i=$scid`Giu>vF$kjs8sK0;?)p_40V*Ohb)=n}d2o zoLBIyFO)hy`J~XcOw$7GNAGWF6#mHDu;bd#b<-Jczx;dlNR8v#>+gM?Ht@;Gi2wh0 z*#7H3@9VoB-;cG}_Cr{I|JNY%D<9X-|MC6!y?yUrz4@4QVPmGrWj+OyCjFcbadrmf zlYixw-fKL4OLguxR(a3fho+01q!ioIc&3<`m^j&~9pOstH7!-@JNi?!@Y9ln#j*)c zbx&0UUgZCE;kagZrSPW0qZhPX<)zKsq?AujOg*&Nvhd&0|IghsZmo@S;ab9LUA(JZ zIC10WGqv)6^>esC2$t;5)!J74Jn9h7>f8hO`z8bj{@Qf7HqpDVHumJh7k@VVc~_g> zU;lk?djI<6aS7S$A4)SctmjF%kg+!IyWi$bZ{6PepBBBf@}}7V?}A77_r3l!wXosk zHd9YC$#Tx0CbKhKyU#jYIKJi8rB#xvJL;5poU)FIea;Ga+BwT*+L4LMO=k1EA8>Bm zut2>3T*VvxN}B-l$nC2Zul724JV<8O?-O_34!O4-^AN4b?N$F^ChqZxx5-nXWSyOX zUATP29j-r_m6w?lduKFf=6!hke|@&cD4OeRS!qABU!X{q`Vr{|mqFYbAc|W-=+EylE>0~!yBUhB!cGbzclG~mn9eu*= zZ6+lxx_8+^ow=Jtmfy~if8BiGxV-pb*VvlVcQyH@xE&r=Oo+r8D?&G+uTLFc=zEX{B z9;**cE7YACF=eUi64wi+PElr8)^9RMadBNG#iys|WvMLF=e^qh^G?|VWeux> z@3Oi2yLK3HYV4nR@BX7dC!0Uqyxe(k>s!Y?k|%C6Udn%PKd#~7tQYy$Pu;7`;&0xc z85tzqw(ab0fj^gaGAmEM^W@|c-bHRw-aQ3v9GV#O4N!QV)ze$3+ar9ftX~}4{+vyx_14WewDrPy@tjGXu7 z-{tK5+bNtipFA!0Dm=S4?UZUz+|gZJKP^7j%vfp=FfB}Vt=rA6JK-u}D$!G~O#gi# z#@X1dO{*vB!h;I?r)SgIzwh56%zWqbGf%y^TQ)V-uL7k{&3@N#)2Zf_@VV#z=1yKU zn_<6mrqG|0qCc)~zIEX%_~H%BCG&{GKP_SoZZY{vT;d(GBlwu2@tt?EA#}vH1U~pOfu{{{B15IDb{! zuEzCoZT>Z)cJ+QsOpCTYIRE8=eogj{osUn2UEjB?v$M83?a$HA>}|Pi0#_%k5~~R- z)b)-rE;+j4^dvpcT`9}FpY3|`qe(Knw_@$OTG8|DDXWubtdG1mf5-oSTkq977rfX~ z=+UJ9Q0U*Qi@|etIQcGLwyL-*W-AVb^YYs>y$61CWF!C3qGbLPSSec#(VKc-LrI(u5^!R}jv zf7Y*?ayCDHmh9rKDuJQ~POrGvN<}$FP0W!@z8T}aY{Qff+0XXLEYc4zjdFe3U?VTc zAKK&QtNqJ={mXxvPp%s_+^Rjr<7xA4$>%GA=kEF!KRTl%#(j0=`lg9eto;WkX-x{4 zwA@8`Cg=2J2h!D^R#=;sJWv;tuYFc;_vK3UHsuCJ`HJ-)Pw&^;_ob`ijpFW!CvFS= zVpB8N_xbJ?p8{Wx53edezG{8B_tvlNIsYra1l<0-`}WJfv#-9@uB#3Cp!Q+nkB#De zycx!awrDZjigjM%$ZdCBWtzkFGqoo$BzRWQvI)vSoul{H4G4^|DXG(Ij zHDO8uC2`~wR5X|{tCrR&TV__M4sg>waEFQn|_d zV8DzVA;IYW_}R~Rg)}CvQ8Q{w3o%V>xjp03>aqjoUURIbZoBkzcUpt=j0W|&%jdO< zf6RI2k>z$!ch~InEZ)W~6W4sw$o_koRWO`KspDF2%}wwBjotUZ9hJBImw#{j<&Hm3 z<{tYY`(dZOXuoaFZk7XiTz+B?&Mhu@zA<;+&e*VzZx7siX>(w{h0YruyQckr&&)l1 z)ym*zZHZCar>}n)GNj7pEAlw2lq;)UvM@~M{hODxXG+EM&z+ag-w~;~(dz%;31`-I zZokf{+FXkp*Q~sCux}h8E%bs2=o-co=vQV9k zq2l%5V-KB=-R#}T{A~?i-gEQY1}F38f8TTM`JbG;$5ub~Z#4*?U-#Bwvshj`Q^jmC zzsY}+)(P!da@KU3zg6^tbq9RDEPhck=kM?3!FywK<#v8A`FNcFWcaUTIVrESMb;^B z2RhE2^!&lj0J&Q`rt28+`emp#s8|cI{p<<7>G!~Yzx^MvE(u-%`FJ2&T|MQ)( z@#aY3TMMM~%jKpU#jpl727A5oC}}XWxvw+%xW}ixk1Z_oUbaU?nx?jDYOdgWYxcpc zHz2exqf|7CTg`RTPlFTorSJFuII!~3rF94A*V&f|{0VdYx7Mra?Yi9ZxC8RmHHF_F z_@AzR{`+J2{m)6|W`5^{ z--Rn{SYjM!GM!vBX;Dm|?hDDF5Nlx$i-!$gyZ!I}{(n#C$K_4a)CIPQU%eiC`{>Wv zw)xx71TyY_UGVLhRsHU5``;f>sQYBAUz(mg>)21%TZSR4xqK{@+~=LPO_%z;d{b%K z+U(hEweP;&uw}OSnezKVcX)3z`)#Y^XE;u(Fa)R^s`PMtXp7HDUzITtd&i(op04zx#yGX8BeJlDI-aB0R2Y2Peim(60Ua!y2TtUtg1NAY^@ zAJV61m}z-b&7EtU?*6CN1zHQ#2h@8#sjXc~pPjtF143-h6cF+Pyh9Yx1T)@b_k3v*BIr zZ?{)}dsEkxwfvuQ_^0i*=V@yIr9hew%>Of=luWsXnuX1=f`@hFTeTszkA^SzBFp$9w+VVR&2Jn zo}AfGzSq9?zf!@;heEN* zue9gM`8)-$rd0ehZkf3|rER*5Op#7w}FFXHo*4*m6 z<*JZz;Fbh$aBd6Rcb6jda`#l}kDC==rJEmrC;6aL{m9FHiR1Edf6b1c z7oUGy-uboG=zd`C|N8RhLdiEvr#{SoTYGMAXzcrUdfP8Y98#L*n0JUpD20(rNWnuv za-zbslv6!CkKY+~IV7DB==5-5Qk%i(5h3ZK#y=rxx~GiD@q>lCcki0_z4qL_*XbM1 z?+v}0XMgH$ZpQjB@2lJM=dP;$_kYdaZ@04luD-%@#$cI*@f^t&hON^wI*-laPF`N_ zX~O$_BfptNQLd|*Tvfn1&B->vxCdzTR&4_f~lR|5x>M z+5b#GHob4ZWkt>ZWD{cOSocpYvRy;o#QnM-P0jdS7%tvV5!R;ppO76HJ36 zRhOSKGtJCe8nWkW<@yGJn>#;V%P&!>crX2b@5iT$@BcpdJnrAz_x}%S$5*|*y#7v( zp3nV{ZU5w(|4%N||9`Q*uI9t<`&CsxZsyyY)_hD*-TTTKVsZ3_0Hb^?brPKzpi}0FZ;*aeg4mb&*SW}Uh{m|UOw;E z|E1IaeX!s6>zR6-ea3y){(oEZ?X`VP(vQykKaURD-?=kO(J-Ug?)TdM{`fob zC*QOGab=(2aU%N2m4u$#0goguPwaGdcW+}8`_z#zd8SEn=E|ps6z0GCQF(vEKL15? z&ItedCC(hvEfbLYq;CJ)^V3!fgzIG5rsmGNv1N_!6m#C_?{lv6glRDM|61x7Fn7+L zL*a72pG~g+c4K?pzk3hr|2TlxOokK19o$LoJR>DRN_ZP}O4UT^*P>1yen zHtUM^l>7+#rE~1S#svAy^G9;c^JZ3Xmsls1-;&_lV3Qzr+{E{Au>aQgp^RS|IT;dW z6h7YdF_X!D*{(N_tETCF(cW>P>*|9wlWPwr3jbW@DcyF>Hv8-o?Mb?d?;pPsotxPI zPHunE)1&kMeoDSy_lxJp`nrEh7jNENqUo&JJzXcNU(SbX{>_Ty*Zul?xBcDyIzKLo zH@9ZSgZ+jtmp?Dxu2%p5+O;3|->va~-g2b2u0dF(-(sWp!?vk29(|r)Q~UGg+Cm%V zfBfdcpN!P6OkG&=LrO}y@A=pN3u1$J=sp(vu}<*ak~w?5Doa$48g+LiyA z%z}CS49oW(IGE4A&F$(n$IID=J_gOLI?Wk&Hq!ii@0vZCH_d%>c5KPJv})&i51nAO z#H(7Do(qQmIQ3Zn-<#?3zt3Hsd;9;rz;{pcUSw>SK6iJSN37Bj-_J6YiosibR@rU- z`RrQ$+WU8YeBF9?>+)%B-evP2cz-zc!Rhy(cSld!-`i#K@7zPL;H+<&k0kdgEG=y} zUMh9Uc9rz+ChaxHMCSj$;y-QvUW?B7y2{-@yXEs#t!A<=aeY0#^z~oPA7#fcL>;C_D?;Zc%cPsAQkrfR^i&gbE zg}++W+np4-^XAR$1;_SI_Edc&w?5?Yz3ly;&hIa<_y2b_-=?}aKP>f0iRiA>xn-$d z=i{dBKDBbr^oM-wq$)!>?w#CLrt;&?)Wok_^$wQ@{aVYkFPn#F*QWQDKX&Kc*_KnT z^J`uzU(}x&BJM2)3p1tG#dy|y-#xcU{Jk|p3;!fe6NmGi(&lq=cYM936WbX+;ccXJ z^VQ7>C!1JRyVIV$X>*)VDtpf9p63}0EvxU(JRYvkxBq;3Q{8S+_hpkfg(V}+Y!vUD zo|F))b8+&7srBuXOSV+3j`aG@YPF#W0BVC%fQudKJ=xYNDuIqhp#G43@{GfcJ0 zy?N`D><=sbAMzax`Pw2+g|^4N+AKTWM|sWK<6&D5ZeryYDvG?AJc(8E-rPKeO&@wD zhAf+|o5l8Ao^|TBjDSx?i-jt-Jt|`kSS`@(XJQ#uxcly|8h**$#SQ&0mPC|h_33k7 z@tE~UtGdub)#2+3qx;MKCEs5&zUUk>h3V#lr)dt;@0ngn@+s&Ix%Gz6v7G1Kj*Zzn zneV?{@YP~L-m#vXQ_r@j#{1>G*NO5y$Ni68>A-D|4ZmG4-v4y>-qkI<2D=?r9S_lc zGNseOY%0gSCn++Tr^O}L6*Zsw(7Eo*&fm!?Pai4qMopeHou#wE-U+;10LL24fb5#Tfv&o~v;B;Sn2p+^Lw zjM6EhiOVIAainJ~b58l)RO?(VR+?~=PyE669H)A|fA!CQv&z3~X80hdvOw9kwZ2a%3dvbw zV|<7s-SdKSKwucRwsDc_nrN-AFFxIxo_AmNMo)R3>Z})TvV6T!@cN0D-}_y7_WE0G zL%dyrIK#AtvsWWLEBhUpo1JH}J@c8ET5x#Hv_1LjDt+sDT|KftPUbm&RVhtxwgk`G zCDr}C6)BF**FH~(lL~&huz{byfuVq3h+((+`b}rquFXI7XwvgL&$Ny{nW>f(Jo8t} zmE$X?u5FS@TK?j0@5wS_qfb5UB27k;=efkDWN&bLH)D@j)S*bXD7LLmCtXqn-t*Tq zQn3{WCvAQ>M<%DBSVQfAgd0|Xmlb5kb&o(jI zKCx2D?BcO6k6Q$TuPuLjm_c4nfboF{=el_D^KUE;ygSRb>hvucRmrL8X)DDui_)|f zPjgzEAo^u?+7|`}wr`+w0fN?SSm3wEFe>De&KV;m;Z2uMaYil-obqC4HQ&2~OXqod zJDv9Mp7g6N%W~?I_r478>fWw9aItn@=xk3P-d z6Mdcr&AfT}>X%4KJ;UoC&x&P!>|+sImb-;Bcg}qm0W%`!bfDp0uq{uQC7On#WPDu@hc?-uuHQyk1Fct?82*@eQWuN4R@x!-qvZ|Cp+WQg`!yx4V}F^gKZ`xt31CHzGud*i%wjA2FGn@ zK2IsVdM1GR-hwL=rbREiJgv9)%s0*-2X=n{^*)XN4D*?_pIK7h?kPNcV?WD++5$bk z&qpuns2y8-gJg6= zeZEpN9vPfS4=z#)NqXcK-?mHY|KvbZ2OX<_*Q`pteo;ul+_VU!UM-r>0)^ zoX5^*XT!pDVCIYkDLnIU3jW`vx-RZ(ZJ6V zjw!ztzOg5u^-k59$!{#vedKtvJ_lI8l3ewqi_P(ATXLLS?#b*qT-O%`&pf(B;8`)V zhX4PX{=D8N!Alk!}sD8B4f61Vm@=lP|KaaOY!-syNe_p zCrOIb_Evt;tD1EEKuy=RnpctLna*r?zkPO@xOvXW!wVYD&tw0llWi~EKJD)fE#Ae4 zDi)cjewDs8;lHfC+@#trf7m)`KcIj#8aI=BAU^KPwWh}P4K zy5_pj_s(_SHC|C}uZ;7Tzw&!ACwOt#owZ9Q+|lfsGxx_PwpMx4d~bP3-ONx9_H{^;<9Bu+_A5LAm+Mhs^fd+n+J|-Tvb|V=DXR zJtsV;rTKO3e!KHI%lWy#{>xr`-T6$ZIcxq^Pw9@(6OoEh9D3>%$2j#gTPJOv&v^Q- z$JKjH3<7Uba(uSil>e*?3EHxhFF)f`aw7Y*QUMNjNqdfEj|0LFzsxa9yf*(Lw`<48 zPW3tWYYy(L+ZX-C@B5p?+wG4S{`;!th=<3q-dzn8zA5M+4g*tB-7!{@9Nm!lO+tIJO8c^@~`F?v__^JziXYhK>;S{=Qq%`9Z$%qt5MWulxi3jMjCzIB(Vsc_+B zSng@S&r>h*WBzfbP*KC~CoyYxg>UlwBA{f*x;6B`-4(kzSES!sl`i08;uyBoZ`GZm zQ;+YYZJAWy@1r)eTim$WQGL&!4Az?Oo7|@{6i2hP#k7mZapdH)mz6VTXE!c&OxPjw z!k;PEsOoQ#%xpi^)F3mpz@=+v7=>)?N-`1gwoTvk#Ao@;t)}Va*Kgh{+qV5{AcMRe z6H7z24(IOO$1XEJe(=2K?%e}r)6?d~nWb$m_pm9|y7V_{59gPvMfb%|=XczeK6h)D zo!5c$ZU|{fc^>bP0l+XkKZ*GG9 diff --git a/launcher/resources/multimc/128x128/instances/herobrine.png b/launcher/resources/multimc/128x128/instances/herobrine.png deleted file mode 100644 index 13f1494c4dd62b54e2e16942b23036e2968d640d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4937 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 Pz`)??>gTe~DWM4fu7_Uz diff --git a/launcher/resources/multimc/128x128/instances/magitech.png b/launcher/resources/multimc/128x128/instances/magitech.png deleted file mode 100644 index 0f81a1997fd0fe38cf927d4d29cbb1db394e32dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23097 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 Mr>mdKI;Vst07B&frT_o{ diff --git a/launcher/resources/multimc/128x128/instances/netherstar.png b/launcher/resources/multimc/128x128/instances/netherstar.png deleted file mode 100644 index 132085f02f2673a6db43d779246ca2c36daf43b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14062 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

e|~y; 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 diff --git a/launcher/resources/multimc/128x128/instances/skeleton.png b/launcher/resources/multimc/128x128/instances/skeleton.png deleted file mode 100644 index 55fcf5a991a78c85f1491aaac2069ba4891374f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3673 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 diff --git a/launcher/resources/multimc/128x128/instances/squarecreeper.png b/launcher/resources/multimc/128x128/instances/squarecreeper.png deleted file mode 100644 index c82d8406db175e65b2f72bc93e8c58bcbc669c06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9136 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 U5?|yY1_lNOPgg&ebxsLQ0HO*O#sB~S diff --git a/launcher/resources/multimc/32x32/instances/brick.png b/launcher/resources/multimc/32x32/instances/brick.png deleted file mode 100644 index c324fda06304c72b6ca19d95bbfc610b60d22a4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2388 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANN^X_+~x z3MG{VsS2qTnQ06R6}Q%gXBT}o10r9@W&wcVQJTCt^DfRfjNhMjXLau?{ z47(X5um1bFd-eVg%0_XK;)}%Jo7RP`32;(=^>uQk>8*3G|6HtVeZIV|bgx2*;k!L@ z&bJ;5|GN9Q*|`1W`M+B4%tg#E)D<#Rp0P<=U9No5fA#$vyehe-dyW*Co8||fmb37^ znVxytd9%9o`B(Q6nHPn~x)}y0mpt~`qx+y#ZH{30;ikei=3CPu&+2W~b#$0_$GUv& zd&VlRPnj#PzldKu{Xy`pzkh_h_b0a;yDfffFaJNDkGVNjjKrBiFfV|&B}5!4e3gooxQJBZ1$Eb3%8!T zTXwyc-?r@K%cR`Rzn=bJ%}(3wHhHC?Ud)<>;jIMb59yV1wsqRsc#pwo&pd^dCD$~2zR%d#dgo5nWH0Vl+`pPwjO(0sO+2&N@X3Re zgAorr9-5lWnkAEDVwk(EAZq=M>oTh+DqTCisdvjrZ!t z)H_!x$hccxEb}*CuouUrq!3J%yLFT`oK{=uRvW*lj~j8ko=Y>BgETz~t_={w2|K}GXx!!BJ~ z_iGk!Zil5txw~0do6w)?UviBkk9>R^-S@<@ur6& z#h8i={O;!64BGwZJipqZQ*|LmRdZ9)#V5br7L#QdbBZgi`FA+ei8sNV^IM+sZPOKx zeD~y~Y;mhq^)&ZiM^rzouxm5Wje4SJy4NwSLjwq{`0lt>&w251Sb}$5oonW=Pj5Fn%TEctA;a zW%L2NyZNneBNK0*c((J={Wblf(=vMx``y@gqeHf=`?RP|NlL)ptD*b!#b0Y1om}|Z za&M1ra{ZnSf&ClA%KgmO+b^H$-+dzM;F9y754!E$EI(V!(yFZH%t5h~%7ypUU-H&6 zt!n&Xt&l$L>qZ5^^_!MV`nTuUr8tfg$E!V8d&k~$i2b+1`{@4|;rZ8#O~t=dpZ$3` z=x5b_&9GYSoAO#=dnfCZxxYS`F!6rHhtJNn5#?XQVxwb@@4Ix%k3pwEK4if@?e+Gt z`By(5`n|mMca-~mrd9q7;uXjL1#Z~&{1Ns#H1N3&vzzq&3pV>&Tikmqm|RX@3eQHKgnG3fpACq%)E#r(nl`Oo_4Ns zzQrl8NlrC>Hfa}FJLPxk?f!FY=Zg*V)7^S~s^(dE>4;cIyh{i(3VEdYXvU(fDeuqk zT2pZE(VDQVHKqRl4h6(TM?SMU>!`A^L$yOdVR4(0)&_y)p~^>HW_=Tu`^R`(f0DOa zxMYtE_X?-hCqEAUe^9+uxtNyON1zUZeKfx9iOs zX8K=xovT~M(z3m=`}H=p_l(o69sW<&lboc?n(>R9^}*kseVXhpd5!l>w{O2@=O^F5 zQ#y4QBOhPmM5WaA)qAXO+`PR%J?igYhL)b9b&Dc2ZZj}2uqAoByD#35PJhHup_s

4_#%-Q1jv*0;&raX% z$K)u{YR|jLaiX`!1PNj3O>3|GVlew9WLCDXacyt@L+KkAqLLT4wzAIhxbQ$oFVc}| zR>H%7FZ{l-&3g0aY)bkwAG7r5bN;`%^z`DxDebqea=jsU_MRCB7aw)7E{39U5pDhOk+}*>%$_aQE|9(ot+KyhPm*w?@`q@*{L&LUQL**y~AM751&6gEiXe}ZOq=Cw{hi*n3_Y^ z#m7K4Re%V87e>edXjn7Iqt4HYiFjfZ=Va> zzt*&sobj~L^>^irb6?Lh?+p8Uo1LxuYw=0p&3Ek6=Uwn;O|%OCFP(M$d;O=*ACdxh z-BO*tovwG@oW8rrA!Lu;-GcQ033_v9cg1tq>F}@kx1g85hH>{6>Gf4nf8!Y#7#KWV L{an^LB{Ts5CF6OY diff --git a/launcher/resources/multimc/32x32/instances/chicken.png b/launcher/resources/multimc/32x32/instances/chicken.png deleted file mode 100644 index f870467a6204f302e0c62f708200f09891622b69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1181 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 diff --git a/launcher/resources/multimc/32x32/instances/diamond.png b/launcher/resources/multimc/32x32/instances/diamond.png deleted file mode 100644 index 1eb26469788c26f4fb96a3a3fad652ca8b6e023c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2444 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 diff --git a/launcher/resources/multimc/32x32/instances/enderpearl.png b/launcher/resources/multimc/32x32/instances/enderpearl.png deleted file mode 100644 index a818eb8e671a46e99523f269234f60dd5c4ff32d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2120 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 diff --git a/launcher/resources/multimc/32x32/instances/gold.png b/launcher/resources/multimc/32x32/instances/gold.png deleted file mode 100644 index 593410fac9a7a929696dee968e112d24780a01da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2366 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 diff --git a/launcher/resources/multimc/32x32/instances/grass.png b/launcher/resources/multimc/32x32/instances/grass.png deleted file mode 100644 index f1694547a419523cce164ff7a698c1692c2522b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 618 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4kiW$hCdQ-7c($0Fct^7J29*~C-ahlfq^C6 z(btiIVPik{pF~y$1_sUokH}&M2EM}}%y>M1MG6B0gH(xYL`iUdT1k0gQ7S_~VrE{6 zo}X)oLYc9ish**M!Iz?i3=E7nJzX3_JiPZ#_4H$ia(h03C-kKaDU6(=NFdWyq)&I zQv61>JmZ!xFVy+e&M`L_KKqOX!&6;yuSmY$8?MHfJ#jDpZ1vXbAM(#Jw=z`)??>gTe~DWM4fTdWLd diff --git a/launcher/resources/multimc/32x32/instances/herobrine.png b/launcher/resources/multimc/32x32/instances/herobrine.png deleted file mode 100644 index e5460da31d7df8e6d20fa59fbd3b3b8f5ef655df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1034 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 diff --git a/launcher/resources/multimc/32x32/instances/meat.png b/launcher/resources/multimc/32x32/instances/meat.png deleted file mode 100644 index 6694859db96b06391866d074da591ea12a9a352b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1514 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}EX7WqAsieW95oy%9SjT% zoCO|{#S9F**Fl)kNn>^e0|SF(iEBhjaDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$ zQVa~N>7Fi*ArY->ukX)~iIhC{@%+x>^fw!A3zLrT|J1C)$CxP?up>e6sG7EviiWS_ zcGkP!I=YrV>R<4H-=HID;tR87w~w(p zxviD0q6bZvzTTl_$n9loGx>(7?X?ZdAD$5Z^-lWZSI;HF=I?i}$qX&=-q07_lzJxg zbg8Rbq* zIKdhm6XN2U;C^`5v}9S{(>qjmsqawV)q9om{5=s<)zVZIiGo1EmAakMLCm=qn=X|e z+;t@O;@fl0H{}l=H_vbUFC)`%j=8+h{PsK6z^^k^lJ1{)_ERayyNPw>K1p8gMcF%+ ze&J0_dbZvzb8VW#90#Ut=fo%O(*MyOva+}G;HHeFpWnT)UT!@9?_K?azt-3D|NHUp zZ`YCC^7jtT&Ds5ZRfm(wq13?mkf|#+D+SHxn6-7eVRv7~zpXRpyDN2g2`+8BlTfT z3g+u`-J-d910}ZqzOpUDcin|>3nAO7H%{BV`s-V;cwPDI`}-F(EKrU*GAZF?K)Cn2 zSsC23i<++N%kav(#_i1BbX==HzdJ~aG2dZ9^J*`1lai@!O|L%Hx^GdwHDS5g)Uqeb zzVOO;_;5!h_n(*hmQd=GBxAqNmMQ$%><1tJ9gO5GF8x;PsHfDmOoYu%Z1t)Ys}h_a zu5Y`R(l*aarD=)T)S#6W%tFRm`aNC?&($fsl6rBgG|6*b*g26Gr(~@*z6g*HO*m+|VZTuMd+*L!hott+&i(#RrAn=0QRewAZB8p{72IYo z+_Lo1t`(auIcXY-l&a244&4y4eul<_I~{rpl?`>Xq_SpIYd)C5;kGSQE^eVbhtWaf zi}Mm(w@k8q^ENpy^{(tenKY~X{pQ>^FYgamnfCgVq`Xt9jQ-;u;bR^eZ>3*$UlVm} zYujaUz|L;Hbl6q*)lu<6y4O?E&MRIJ{UYKwrD$hR{G5cN%RSy`tUY0CY;fsnL5u#B zZ%ejboD#-r9=NFS>E)T}{MG*ttxNEKIkQb!x7K!N&Z36tDmPY0bF|7!-MAe7iff+s zSEq|lQKwz8y3Sw9>+2Ss*+!QH z*LvL%tc@;k-=Z>0OvGZ{`?JfN>a}aNsvb>pj#W2%67PJ#(kX1ot~8nGD+RFy(Iv9s z7uK9zF7-fYx7Ti|Z!GTfUi|J9d@gs;^7tp|K#qg#i^^SOYcKQls&KU)DL$CT36$+yWJ>ZXX&SESH)U#bw+Sd9f$P+dJTztl7_3g740{&5Ft;7#J8BJYD@<);T3K0RYkFzTW@< diff --git a/launcher/resources/multimc/32x32/instances/netherstar.png b/launcher/resources/multimc/32x32/instances/netherstar.png deleted file mode 100644 index 43cb51139e7b412d5ca95bbde6d814bc96b695a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1942 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}EX7WqAsieW95oy%9SjT% zoCO|{#S9E=Z$Ow)uGGSmfq_A?#5JNMI6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#W zDFz01VNVywkcif;)9?C6-xNJs|NO_TA40bk^o!NIQ0bkyp$;ni3@s|o}F$uxNqb8 zuUl*Vej?jTbNGH%PN9E_}-^8xwTO;DW4e z;iK>Jr>4~8CqAaTzN7=XWIYuoE(Zr=31BY z?TlHsS^f3v^*?L(eYm_-b=mW0+phh2eUSOmO&#CfUb}LG9}_40otJ3a$g*a`aosnb z4w|ZM?d^YOEi?UDyDypJ;G>4}?lS_I@So0vM- z-FMz2_C(ZGgN=>NW}=761BrHd3|*g?8S-rF zdKmmFZR&N!y6dl()~*ZCm{NARbFQX9r^_K}zV_EsgJiu{X5HR)ch<5{4#lYWq^x_l ze^_jBJfI~~;Mpm#DD<*P&h0pMF0Yk43oL9Vd8ou)>J-m+IP$nKR`cqLDZ45*?fZAQ z;l8|!rT`PGhvEiq);CELxB9dNJX2!OZk#Ri@wa4bL_$p>r;)Uh^A?1pP6tfCBkQ^MQo_6j!05z z?cA$hOQ&7G=CL%Wr>9p|(pzO6!}KXZy&o%THanOH8JLBAf5BiBoesy5=($Y<$V(_leQ< zxk2_)gLilM9p5i{Vs(Dy%e1L4O{Y#hqdxh_@#C5KS&KBXA6{Tz;w2e0lgG`h+i>2~ zq|2fV>+b(jbu;VEj4UxT|NOY^vxlO?L33kc1{v;FgCI?<=7W2t6s_B{=MKvhmMQn& zpSS2UHnOw&m1#GB`=Zd$D_5_5x_Uz*zON@|<5~_DizTm9iYsQ*lm{?Wf{ zm)U`v8i!6U_y1VAx5wWnK$P$H^j*8xTlN`0`u^Lv;SxjA#u>8x$Co$Gew>`VY16W2 z$?>kO>p#yeKQTk?f6X6>%iA(LTr6Ze6H+#x(bo?y;bYEWmY0xu^6dG1<7}snmk~N?`O6p_wr<}(`(s6olV)jhX4$oieKJ2a(r=3%O%h}; z*cs!ar#o?b?yWxg<0sN0wOa%GZn4=}*qlk+FR!>?d;Pg*X^(SswsG$B?I`=kG|@w4 zPj`3s*Pv5;#|u|6ZWmbO#Bs5zy!7j#Q@^bCSN*S@611auKO^h6g|9snfBd|LvcMMp)Y{r>%1I5#&}+t$|h=iCSD zcQxj^%==wi605JZ^v#~sz)iW6R*FnZ6F>Zpx^pvl+W+4X>b3iQJbiv*^tEeE0SX7qCr>Wfx+Nt#dE;ySeV_N5-CwVJ|Ju6z zJNs%&3rnvi-!?m%B)I5T<9_LV$5ByYJu*ZxGprn4LFNJ#xsndvo^F@&x8r}y2v z*Z-|=KKbld_zRZZdq3|@+TVOKZO;;61`y|w@3O~h>;H>C{#nm3|JyC+1>!5WFfcGM Nc)I$ztaD0e0ss*8na%(J diff --git a/launcher/resources/multimc/32x32/instances/planks.png b/launcher/resources/multimc/32x32/instances/planks.png deleted file mode 100644 index a94b75029b0a8fd4df03fa99848963354b000429..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2299 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 BH;4cL diff --git a/launcher/resources/multimc/32x32/instances/squarecreeper.png b/launcher/resources/multimc/32x32/instances/squarecreeper.png deleted file mode 100644 index b78c4ae09d46cdb8184615248eca9e81c8253e26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1623 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 diff --git a/launcher/resources/multimc/32x32/instances/stone.png b/launcher/resources/multimc/32x32/instances/stone.png deleted file mode 100644 index 1b6ef7a4343f56efa133c025fc01e10d7f640014..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1866 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 RF)%PNc)I$ztaD0e0syrHeJB6` diff --git a/launcher/resources/multimc/50x50/instances/enderman.png b/launcher/resources/multimc/50x50/instances/enderman.png deleted file mode 100644 index 9f3a72b3a093df63a45e6ca6a651bedb0943de8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2429 zcmeAS@N?(olHy`uVBq!ia0y~yU@!t<4mJh`208nVjSLJ7k|nMYCBgY=CFO}lsSJ)O z`AMk?p1FzXsX?iUDV2pMQ*9U+m@_g%B1$5BeXNr6bM+EIYV;~{3m8Da#=fE;F*!T6 zL?J0PJu}Z%>HY5gN(z}Nwo2iqz6QPp&Z!xh9#uuD!Bu`C$yM3OmMKd1b_zBXRu#Dg zxv3?I3Kh9IdBs*0wn|`gt@4VkK*IV;3ScEA*|tg$M@9GsC^+XAr7D=}8R#Y(m>DXV zndljs7+9KE>L?f)7#ips8tEID>lzwZnVMS}7%D)4lAVH0QA(Oskc%7CuA-DQTcwPW zk^(Dz{qpj1y>er{{GxPyLrY6beFGzXBO~3Slr-Jq%Dj@q3f;V7Wta&rsl~}fnFS@8 z`FRQ;6BCp2OG|8(l%U2|bol2!OE0x2x;^|kUZ%1qD9OU!Y}PcF?(%`5SAu~n+b zEznEJOtCUBwlFX>G&eCYH!?7@Ff_C@G_bUAF*kH{HMDdxc6Nf9flaTOp`od#v5SGDiL0rbqmzq)nWZC4uV-FyNn&1dD$L%@%oHoAUNgLUt(=Qe6HD@o zLh|!-U@0IVBfliSI3vG6!8zDe&rrcPF*!32Bm#;caOhjPq!wkCrKY$Q<>xAZL)a=4 ziwg`)3HcnNH-(%~)3;Nw(FY|Dq~rn<3UYA+F~KPtl*;WC5ZNa+FU3}=NXg!gp(`Pf zfq`|kr;B4q#jQ6{yYq})C1T@~qC2NrXc%b(d8u$!S!HR-H9V_l;nLc*f3efA=&U$~ zz)PRmL_9(QxjI~(*7?=MK8q-xwmCknEL~P*QO8ubc{g{~rtkZ`Cc1K7`uazeybcWu z=kA^K{3^rCS!JiE_q~7p>s$8(h45+n*3?+9XSyWce|-M;-+#By^?Sa!Z1>#En;Q%- zrR_~9|E+oW`s=Tgt?F`Zuf*w1-+wM`^Y-V@pWE+RH<7jrPCKTpRL@ z&y3+C%Z0aP+)NkQ#U?W_g(^IlAk_TROT;DA|K`ibX}lL(h0HIU|2Tn9YeCp}L^ z>YW{~CIyOwx_foK`n6NMarHqDwkB4E?g^z=-oJnE-Ew$OQSqMi*-t-y+{n`L$)BOU zy`9xSprW=mHbP5)@3UXu!@q|QJ73J_*P5w(%CAAbIom7<~Yf(d;uqRP%LQ}mkD zcZA2$L9=<$($^8G>x7p|d@<|qOQqbe z`&9caE`QFJdnv!Fzdc)izRNl3*4#D9zutUzKbcl=!SrE!-epL*OYJ9n+uv-Vr{ z;^&cTul!kXj@?FZZO-1SRap*`WEaJ;JlHw!@6C6asl^@0hJVfG6jm&9jZ404+7WuLS@Er~nqXviw%l@3YmE7NRm zX0?ii*e`6kl@ny1JVl^u_9}}-@83L)RbI`yGyOrj`uD26L2M@?bXd-`{jaDmEDS7K z(s5PixClqB`{Rhy^EyN~YxT7(dNxV^<3vOL<$hmu+NBCzIiam&QTJ0p#yKvjZ zg~wzr-cV=j+F#{$o-s)`mcu2v&mm7z`R?7jQ`eRMnAuRrWVN_ONj^|vPeJm2wWK%K zKYj=9bqHAc9XGFk4Z3v1{*lE?S+qK1nIKg&j$MyHYqhi|_~ znteoT`=dnHv-g-@WgdSP)@o3i=%-L~>UG1D*;5X>o`09Z_o_r)qKscalable/reddit-alien.svg - 128x128/instances/flame.png + scalable/instances/flame.svg scalable/launcher.svg @@ -256,58 +256,32 @@ - 32x32/instances/chicken.png - 128x128/instances/chicken.png + scalable/instances/chicken.svg + scalable/instances/creeper.svg + scalable/instances/enderpearl.svg + scalable/instances/ftb_logo.svg - 32x32/instances/creeper.png - 128x128/instances/creeper.png + scalable/instances/flame.svg + scalable/instances/gear.svg + scalable/instances/herobrine.svg + scalable/instances/magitech.svg + scalable/instances/meat.svg + scalable/instances/netherstar.svg + scalable/instances/skeleton.svg + scalable/instances/squarecreeper.svg + scalable/instances/steve.svg - 32x32/instances/enderpearl.png - 128x128/instances/enderpearl.png + scalable/instances/brick.svg + scalable/instances/diamond.svg + scalable/instances/dirt.svg + scalable/instances/gold.svg + scalable/instances/grass.svg + scalable/instances/iron.svg + scalable/instances/planks.svg + scalable/instances/stone.svg + scalable/instances/tnt.svg - 32x32/instances/ftb_glow.png - 128x128/instances/ftb_glow.png - - 32x32/instances/ftb_logo.png - 128x128/instances/ftb_logo.png - - 128x128/instances/flame.png - - 32x32/instances/gear.png - 128x128/instances/gear.png - - 32x32/instances/herobrine.png - 128x128/instances/herobrine.png - - 32x32/instances/magitech.png - 128x128/instances/magitech.png - - 32x32/instances/meat.png - 128x128/instances/meat.png - - 32x32/instances/netherstar.png - 128x128/instances/netherstar.png - - 32x32/instances/skeleton.png - 128x128/instances/skeleton.png - - 32x32/instances/squarecreeper.png - 128x128/instances/squarecreeper.png - - 32x32/instances/steve.png - 128x128/instances/steve.png - - 32x32/instances/brick.png - 32x32/instances/diamond.png - 32x32/instances/dirt.png - 32x32/instances/gold.png - 32x32/instances/grass.png - 32x32/instances/iron.png - 32x32/instances/planks.png - 32x32/instances/stone.png - 32x32/instances/tnt.png - - 50x50/instances/enderman.png + scalable/instances/enderman.svg scalable/instances/fox.svg scalable/instances/bee.svg diff --git a/launcher/resources/multimc/scalable/instances/bee.svg b/launcher/resources/multimc/scalable/instances/bee.svg index 49f216c8f..a0870984d 100644 --- a/launcher/resources/multimc/scalable/instances/bee.svg +++ b/launcher/resources/multimc/scalable/instances/bee.svg @@ -1,159 +1,100 @@ + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + viewBox="0 0 32 32" + id="svg168" + xml:space="preserve" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/">Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher diff --git a/launcher/resources/multimc/scalable/instances/brick.svg b/launcher/resources/multimc/scalable/instances/brick.svg new file mode 100644 index 000000000..1b5f65c0b --- /dev/null +++ b/launcher/resources/multimc/scalable/instances/brick.svg @@ -0,0 +1,37 @@ + + + +Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher diff --git a/launcher/resources/multimc/scalable/instances/chicken.svg b/launcher/resources/multimc/scalable/instances/chicken.svg new file mode 100644 index 000000000..831997225 --- /dev/null +++ b/launcher/resources/multimc/scalable/instances/chicken.svg @@ -0,0 +1,102 @@ + + + +Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher diff --git a/launcher/resources/multimc/scalable/instances/creeper.svg b/launcher/resources/multimc/scalable/instances/creeper.svg new file mode 100644 index 000000000..fdb90cab0 --- /dev/null +++ b/launcher/resources/multimc/scalable/instances/creeper.svg @@ -0,0 +1,37 @@ + + + +Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher diff --git a/launcher/resources/multimc/scalable/instances/diamond.svg b/launcher/resources/multimc/scalable/instances/diamond.svg new file mode 100644 index 000000000..47133136c --- /dev/null +++ b/launcher/resources/multimc/scalable/instances/diamond.svg @@ -0,0 +1,30 @@ + + + +Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher diff --git a/launcher/resources/multimc/scalable/instances/dirt.svg b/launcher/resources/multimc/scalable/instances/dirt.svg new file mode 100644 index 000000000..45e4ec2ad --- /dev/null +++ b/launcher/resources/multimc/scalable/instances/dirt.svg @@ -0,0 +1,46 @@ + + + +Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher diff --git a/launcher/resources/multimc/scalable/instances/enderman.svg b/launcher/resources/multimc/scalable/instances/enderman.svg new file mode 100644 index 000000000..a13dde36a --- /dev/null +++ b/launcher/resources/multimc/scalable/instances/enderman.svg @@ -0,0 +1,60 @@ + + + +Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher diff --git a/launcher/resources/multimc/scalable/instances/enderpearl.svg b/launcher/resources/multimc/scalable/instances/enderpearl.svg new file mode 100644 index 000000000..ad88bcd5e --- /dev/null +++ b/launcher/resources/multimc/scalable/instances/enderpearl.svg @@ -0,0 +1,43 @@ + + + +Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher diff --git a/launcher/resources/multimc/scalable/instances/flame.svg b/launcher/resources/multimc/scalable/instances/flame.svg new file mode 100644 index 000000000..94d8cfff4 --- /dev/null +++ b/launcher/resources/multimc/scalable/instances/flame.svg @@ -0,0 +1,30 @@ + + + +Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher diff --git a/launcher/resources/multimc/scalable/instances/fox.svg b/launcher/resources/multimc/scalable/instances/fox.svg index fcf16b2fb..b1317b41b 100644 --- a/launcher/resources/multimc/scalable/instances/fox.svg +++ b/launcher/resources/multimc/scalable/instances/fox.svg @@ -1,290 +1,113 @@ + + - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + viewBox="0 0 32 32" + id="svg168" + xml:space="preserve" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/">Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher diff --git a/launcher/resources/multimc/scalable/instances/ftb_logo.svg b/launcher/resources/multimc/scalable/instances/ftb_logo.svg new file mode 100644 index 000000000..7d5537823 --- /dev/null +++ b/launcher/resources/multimc/scalable/instances/ftb_logo.svg @@ -0,0 +1,36 @@ + + + +Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher diff --git a/launcher/resources/multimc/scalable/instances/gear.svg b/launcher/resources/multimc/scalable/instances/gear.svg new file mode 100644 index 000000000..ca71778da --- /dev/null +++ b/launcher/resources/multimc/scalable/instances/gear.svg @@ -0,0 +1,90 @@ + + + +Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher diff --git a/launcher/resources/multimc/scalable/instances/gold.svg b/launcher/resources/multimc/scalable/instances/gold.svg new file mode 100644 index 000000000..ad845612e --- /dev/null +++ b/launcher/resources/multimc/scalable/instances/gold.svg @@ -0,0 +1,30 @@ + + + +Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher diff --git a/launcher/resources/multimc/scalable/instances/grass.svg b/launcher/resources/multimc/scalable/instances/grass.svg new file mode 100644 index 000000000..184b25832 --- /dev/null +++ b/launcher/resources/multimc/scalable/instances/grass.svg @@ -0,0 +1,52 @@ + + + +Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher diff --git a/launcher/resources/multimc/scalable/instances/herobrine.svg b/launcher/resources/multimc/scalable/instances/herobrine.svg new file mode 100644 index 000000000..b58745c61 --- /dev/null +++ b/launcher/resources/multimc/scalable/instances/herobrine.svg @@ -0,0 +1,96 @@ + + + +Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher diff --git a/launcher/resources/multimc/scalable/instances/iron.svg b/launcher/resources/multimc/scalable/instances/iron.svg new file mode 100644 index 000000000..f67ee37b3 --- /dev/null +++ b/launcher/resources/multimc/scalable/instances/iron.svg @@ -0,0 +1,30 @@ + + + +Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher diff --git a/launcher/resources/multimc/scalable/instances/magitech.svg b/launcher/resources/multimc/scalable/instances/magitech.svg new file mode 100644 index 000000000..9dd993903 --- /dev/null +++ b/launcher/resources/multimc/scalable/instances/magitech.svg @@ -0,0 +1,55 @@ + + + +Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher diff --git a/launcher/resources/multimc/scalable/instances/meat.svg b/launcher/resources/multimc/scalable/instances/meat.svg new file mode 100644 index 000000000..3cefa7e24 --- /dev/null +++ b/launcher/resources/multimc/scalable/instances/meat.svg @@ -0,0 +1,56 @@ + + + +Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher diff --git a/launcher/resources/multimc/scalable/instances/modrinth.svg b/launcher/resources/multimc/scalable/instances/modrinth.svg index a40f0e72b..59df86b6a 100644 --- a/launcher/resources/multimc/scalable/instances/modrinth.svg +++ b/launcher/resources/multimc/scalable/instances/modrinth.svg @@ -1,4 +1,41 @@ - - - - + + + +Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher diff --git a/launcher/resources/multimc/scalable/instances/netherstar.svg b/launcher/resources/multimc/scalable/instances/netherstar.svg new file mode 100644 index 000000000..dde8bddc6 --- /dev/null +++ b/launcher/resources/multimc/scalable/instances/netherstar.svg @@ -0,0 +1,33 @@ + + + +Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher diff --git a/launcher/resources/multimc/scalable/instances/planks.svg b/launcher/resources/multimc/scalable/instances/planks.svg new file mode 100644 index 000000000..4328fec27 --- /dev/null +++ b/launcher/resources/multimc/scalable/instances/planks.svg @@ -0,0 +1,30 @@ + + + +Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher diff --git a/launcher/resources/multimc/scalable/instances/skeleton.svg b/launcher/resources/multimc/scalable/instances/skeleton.svg new file mode 100644 index 000000000..d8beb49bb --- /dev/null +++ b/launcher/resources/multimc/scalable/instances/skeleton.svg @@ -0,0 +1,69 @@ + + + +Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher diff --git a/launcher/resources/multimc/scalable/instances/squarecreeper.svg b/launcher/resources/multimc/scalable/instances/squarecreeper.svg new file mode 100644 index 000000000..71a28e122 --- /dev/null +++ b/launcher/resources/multimc/scalable/instances/squarecreeper.svg @@ -0,0 +1,49 @@ + + + +Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher diff --git a/launcher/resources/multimc/scalable/instances/steve.svg b/launcher/resources/multimc/scalable/instances/steve.svg new file mode 100644 index 000000000..0f29687ca --- /dev/null +++ b/launcher/resources/multimc/scalable/instances/steve.svg @@ -0,0 +1,108 @@ + + + +Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher diff --git a/launcher/resources/multimc/scalable/instances/stone.svg b/launcher/resources/multimc/scalable/instances/stone.svg new file mode 100644 index 000000000..c28634698 --- /dev/null +++ b/launcher/resources/multimc/scalable/instances/stone.svg @@ -0,0 +1,30 @@ + + + +Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher diff --git a/launcher/resources/multimc/scalable/instances/tnt.svg b/launcher/resources/multimc/scalable/instances/tnt.svg new file mode 100644 index 000000000..841f4ef86 --- /dev/null +++ b/launcher/resources/multimc/scalable/instances/tnt.svg @@ -0,0 +1,95 @@ + + + +Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher From e12a7a44156278799dee57dff9903a7917aaa7f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Santiago=20C=C3=A9zar?= Date: Sun, 20 Nov 2022 16:40:34 -0300 Subject: [PATCH 061/155] gradients! MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Santiago Cézar --- .../multimc/scalable/instances/bee.svg | 87 +++++++--- .../multimc/scalable/instances/brick.svg | 56 ++++-- .../multimc/scalable/instances/chicken.svg | 153 ++++++++++------- .../multimc/scalable/instances/creeper.svg | 49 +++++- .../multimc/scalable/instances/diamond.svg | 44 ++++- .../multimc/scalable/instances/dirt.svg | 54 +++--- .../multimc/scalable/instances/enderman.svg | 44 ++++- .../multimc/scalable/instances/enderpearl.svg | 81 +++++++-- .../multimc/scalable/instances/flame.svg | 26 ++- .../multimc/scalable/instances/fox.svg | 121 +++++++++---- .../multimc/scalable/instances/ftb_logo.svg | 67 ++++++-- .../multimc/scalable/instances/gear.svg | 104 +++++------- .../multimc/scalable/instances/gold.svg | 45 ++++- .../multimc/scalable/instances/grass.svg | 86 +++++++--- .../multimc/scalable/instances/herobrine.svg | 92 ++++++---- .../multimc/scalable/instances/iron.svg | 160 +++++++++++++++++- .../multimc/scalable/instances/magitech.svg | 84 ++++++--- .../multimc/scalable/instances/meat.svg | 51 +++++- .../multimc/scalable/instances/modrinth.svg | 37 +++- .../multimc/scalable/instances/netherstar.svg | 37 +++- .../multimc/scalable/instances/planks.svg | 75 +++++++- .../multimc/scalable/instances/skeleton.svg | 81 ++++++++- .../scalable/instances/squarecreeper.svg | 80 ++++++--- .../multimc/scalable/instances/steve.svg | 158 +++++++++++------ .../multimc/scalable/instances/stone.svg | 37 +++- .../multimc/scalable/instances/tnt.svg | 159 ++++++++++------- 26 files changed, 1517 insertions(+), 551 deletions(-) diff --git a/launcher/resources/multimc/scalable/instances/bee.svg b/launcher/resources/multimc/scalable/instances/bee.svg index a0870984d..fef2aeb33 100644 --- a/launcher/resources/multimc/scalable/instances/bee.svg +++ b/launcher/resources/multimc/scalable/instances/bee.svg @@ -14,21 +14,54 @@ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"><linearGradient + xlink:href="#linearGradient1308" + id="linearGradient1310" + x1="16" + y1="27" + x2="16" + y2="5" + gradientUnits="userSpaceOnUse" /><linearGradient + id="linearGradient1308"><stop + style="stop-color:#f3db6c;stop-opacity:1;" + offset="0" + id="stop1304" /><stop + style="stop-color:#ffeea9;stop-opacity:1;" + offset="1" + id="stop1306" /></linearGradient><linearGradient + xlink:href="#linearGradient1440" + id="linearGradient1442" + x1="7" + y1="24" + x2="11" + y2="14" + gradientUnits="userSpaceOnUse" /><linearGradient + id="linearGradient1440"><stop + style="stop-color:#2c251f;stop-opacity:1;" + offset="0" + id="stop1436" /><stop + style="stop-color:#4d3f33;stop-opacity:1;" + offset="1" + id="stop1438" /></linearGradient><linearGradient + xlink:href="#linearGradient1460" + id="linearGradient1462" + x1="10" + y1="18" + x2="12" + y2="14" + gradientUnits="userSpaceOnUse" /><linearGradient + id="linearGradient1460"><stop + style="stop-color:#4c7aba;stop-opacity:1;" + offset="0" + id="stop1456" /><stop + style="stop-color:#86c3cf;stop-opacity:1;" + offset="1" + id="stop1458" /></linearGradient></defs><title id="title132">Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher<linearGradient + id="linearGradient288023"><stop + style="stop-color:#c1c1c1;stop-opacity:1;" + offset="0" + id="stop288019" /><stop + style="stop-color:#dfdfdf;stop-opacity:1;" + offset="1" + id="stop288021" /></linearGradient><linearGradient + xlink:href="#linearGradient84376" + id="linearGradient84368" + x1="48" + y1="26" + x2="48" + y2="6" + gradientUnits="userSpaceOnUse" /><linearGradient + id="linearGradient84376"><stop + style="stop-color:#a63649;stop-opacity:1;" + offset="0" + id="stop84370" /><stop + style="stop-color:#df6277;stop-opacity:1;" + offset="1" + id="stop84381" /></linearGradient><linearGradient + xlink:href="#linearGradient288023" + id="linearGradient85182" + x1="48" + y1="6" + x2="48" + y2="26" + gradientUnits="userSpaceOnUse" /></defs><title id="title132">Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher + y="0" /> diff --git a/launcher/resources/multimc/scalable/instances/chicken.svg b/launcher/resources/multimc/scalable/instances/chicken.svg index 831997225..30929c9e2 100644 --- a/launcher/resources/multimc/scalable/instances/chicken.svg +++ b/launcher/resources/multimc/scalable/instances/chicken.svg @@ -8,43 +8,92 @@ viewBox="0 0 32 32" id="svg168" xml:space="preserve" + xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"><linearGradient + id="linearGradient2085"><stop + style="stop-color:#261a0a;stop-opacity:1;" + offset="0" + id="stop2081" /><stop + style="stop-color:#3c2b13;stop-opacity:1;" + offset="1" + id="stop2083" /></linearGradient><linearGradient + xlink:href="#linearGradient292700" + id="linearGradient292686" + x1="86.052681" + y1="26.999552" + x2="86" + y2="5" + gradientUnits="userSpaceOnUse" /><linearGradient + id="linearGradient292700"><stop + style="stop-color:#d0d0d0;stop-opacity:1;" + offset="0.23078403" + id="stop292702" /><stop + style="stop-color:#eeeeee;stop-opacity:1;" + offset="0.83153141" + id="stop292698" /></linearGradient><linearGradient + xlink:href="#linearGradient293074" + id="linearGradient293076" + x1="80" + y1="31" + x2="80" + y2="21" + gradientUnits="userSpaceOnUse" /><linearGradient + id="linearGradient293074"><stop + style="stop-color:#a63649;stop-opacity:1;" + offset="0" + id="stop293070" /><stop + style="stop-color:#df6277;stop-opacity:1;" + offset="0.52521378" + id="stop293078" /><stop + style="stop-color:#a63649;stop-opacity:1;" + offset="1" + id="stop293072" /></linearGradient><linearGradient + xlink:href="#linearGradient2085" + id="linearGradient42830" + x1="77" + y1="17" + x2="77" + y2="14" + gradientUnits="userSpaceOnUse" /><linearGradient + xlink:href="#linearGradient292039" + id="linearGradient292041" + x1="89" + y1="25" + x2="89" + y2="18" + gradientUnits="userSpaceOnUse" /><linearGradient + id="linearGradient292039"><stop + style="stop-color:#fb9168;stop-opacity:1;" + offset="0" + id="stop292035" /><stop + style="stop-color:#f3db6c;stop-opacity:1;" + offset="1" + id="stop292037" /></linearGradient><linearGradient + xlink:href="#linearGradient2085" + id="linearGradient82810" + gradientUnits="userSpaceOnUse" + x1="77" + y1="17" + x2="77" + y2="14" /></defs><title id="title132">Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher + y="0" /> diff --git a/launcher/resources/multimc/scalable/instances/creeper.svg b/launcher/resources/multimc/scalable/instances/creeper.svg index fdb90cab0..38f7ac7a9 100644 --- a/launcher/resources/multimc/scalable/instances/creeper.svg +++ b/launcher/resources/multimc/scalable/instances/creeper.svg @@ -8,27 +8,58 @@ viewBox="0 0 32 32" id="svg168" xml:space="preserve" + xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"><linearGradient + xlink:href="#linearGradient11855" + id="linearGradient11859" + x1="111" + y1="25" + x2="111" + y2="7" + gradientUnits="userSpaceOnUse" /><linearGradient + id="linearGradient11855"><stop + style="stop-color:#57965f;stop-opacity:1;" + offset="0" + id="stop11851" /><stop + style="stop-color:#78bf6e;stop-opacity:1;" + offset="1" + id="stop11853" /></linearGradient><radialGradient + xlink:href="#linearGradient10455" + id="radialGradient10457" + cx="112" + cy="17" + fx="112" + fy="17" + r="6" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.1666668,-6.8921104e-7,5.6666669e-7,1.1666667,-18.666684,-2.8332561)" /><linearGradient + id="linearGradient10455"><stop + style="stop-color:#1b2719;stop-opacity:1;" + offset="0" + id="stop10451" /><stop + style="stop-color:#0f150e;stop-opacity:1;" + offset="1" + id="stop10453" /></linearGradient></defs><title id="title132">Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher<linearGradient + id="linearGradient41693"><stop + style="stop-color:#64d5df;stop-opacity:1;" + offset="0" + id="stop41689" /><stop + style="stop-color:#17c2d6;stop-opacity:1;" + offset="0.35665122" + id="stop41711" /><stop + style="stop-color:#89edf6;stop-opacity:1;" + offset="0.71356344" + id="stop41709" /><stop + style="stop-color:#2bc4d4;stop-opacity:1;" + offset="1" + id="stop41691" /></linearGradient><linearGradient + xlink:href="#linearGradient41693" + id="linearGradient2973" + gradientUnits="userSpaceOnUse" + x1="153" + y1="25" + x2="135" + y2="7" /></defs><title id="title132">Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher + y="0" /> diff --git a/launcher/resources/multimc/scalable/instances/dirt.svg b/launcher/resources/multimc/scalable/instances/dirt.svg index 45e4ec2ad..fe06bffcc 100644 --- a/launcher/resources/multimc/scalable/instances/dirt.svg +++ b/launcher/resources/multimc/scalable/instances/dirt.svg @@ -14,33 +14,39 @@ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"><linearGradient + id="linearGradient53203"><stop + style="stop-color:#77563b;stop-opacity:1;" + offset="0" + id="stop53199" /><stop + style="stop-color:#86674f;stop-opacity:1;" + offset="1" + id="stop53201" /></linearGradient><linearGradient + xlink:href="#linearGradient53203" + id="linearGradient39079" + gradientUnits="userSpaceOnUse" + x1="785" + y1="26" + x2="785" + y2="6" /></defs><title id="title132">Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher + x="768" + y="0" /> diff --git a/launcher/resources/multimc/scalable/instances/enderman.svg b/launcher/resources/multimc/scalable/instances/enderman.svg index a13dde36a..483a002eb 100644 --- a/launcher/resources/multimc/scalable/instances/enderman.svg +++ b/launcher/resources/multimc/scalable/instances/enderman.svg @@ -8,32 +8,68 @@ viewBox="0 0 32 32" id="svg168" xml:space="preserve" + xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"><linearGradient + xlink:href="#linearGradient5295" + id="linearGradient5297" + x1="239" + y1="5" + x2="239" + y2="27" + gradientUnits="userSpaceOnUse" /><linearGradient + id="linearGradient5295"><stop + style="stop-color:#25262d;stop-opacity:1;" + offset="0" + id="stop5291" /><stop + style="stop-color:#141519;stop-opacity:1;" + offset="1" + id="stop5293" /></linearGradient><linearGradient + xlink:href="#linearGradient5303" + id="linearGradient5316" + x1="243" + y1="17" + x2="243" + y2="20" + gradientUnits="userSpaceOnUse" /><linearGradient + id="linearGradient5303"><stop + style="stop-color:#bd44b3;stop-opacity:1;" + offset="0" + id="stop5299" /><stop + style="stop-color:#d84ecd;stop-opacity:1;" + offset="1" + id="stop5301" /></linearGradient><linearGradient + xlink:href="#linearGradient5303" + id="linearGradient5305" + x1="236" + y1="17" + x2="236" + y2="20" + gradientUnits="userSpaceOnUse" /></defs><title id="title132">Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher<linearGradient + id="linearGradient3853"><stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="0.39989081" + id="stop3851" /><stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="1" + id="stop3849" /></linearGradient><linearGradient + id="linearGradient3405"><stop + style="stop-color:#27414e;stop-opacity:1;" + offset="0.16041158" + id="stop3401" /><stop + style="stop-color:#27414e;stop-opacity:0.74901961;" + offset="0.50162286" + id="stop39443" /><stop + style="stop-color:#27414e;stop-opacity:0;" + offset="1" + id="stop3403" /></linearGradient><linearGradient + id="linearGradient3000"><stop + style="stop-color:#62b397;stop-opacity:1;" + offset="0.47770822" + id="stop2996" /><stop + style="stop-color:#3a7a81;stop-opacity:1;" + offset="1" + id="stop2998" /></linearGradient><radialGradient + xlink:href="#linearGradient3000" + id="radialGradient3002-5" + cx="272" + cy="16" + fx="272" + fy="16" + r="12" + gradientUnits="userSpaceOnUse" /><radialGradient + xlink:href="#linearGradient3405" + id="radialGradient3407-4" + cx="272" + cy="16" + fx="272" + fy="16" + r="5" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.2,0,0,1.2,-54.4,-3.2)" /><radialGradient + xlink:href="#linearGradient3853" + id="radialGradient3855-4" + cx="272" + cy="16" + fx="272" + fy="16" + r="5" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.2,0,0,2,-326.4,-16)" /></defs><title id="title132">Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher<linearGradient + xlink:href="#linearGradient1468" + id="linearGradient1470" + x1="300" + y1="26" + x2="300" + y2="10" + gradientUnits="userSpaceOnUse" /><linearGradient + id="linearGradient1468"><stop + style="stop-color:#d63954;stop-opacity:1;" + offset="0" + id="stop1464" /><stop + style="stop-color:#e6812b;stop-opacity:1;" + offset="1" + id="stop1466" /></linearGradient></defs><title id="title132">Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher + y="0" /> diff --git a/launcher/resources/multimc/scalable/instances/fox.svg b/launcher/resources/multimc/scalable/instances/fox.svg index b1317b41b..687a5b09d 100644 --- a/launcher/resources/multimc/scalable/instances/fox.svg +++ b/launcher/resources/multimc/scalable/instances/fox.svg @@ -14,55 +14,112 @@ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"></clipPath><linearGradient + xlink:href="#linearGradient287187" + id="linearGradient287189" + x1="192.38519" + y1="22.999998" + x2="192.38519" + y2="17.999998" + gradientUnits="userSpaceOnUse" /><linearGradient + id="linearGradient287187"><stop + style="stop-color:#dfdfdf;stop-opacity:1;" + offset="0" + id="stop287183" /><stop + style="stop-color:#f3f3f3;stop-opacity:1;" + offset="1" + id="stop287185" /></linearGradient></defs><title id="title132">Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher<linearGradient + xlink:href="#linearGradient12453" + id="linearGradient12455" + x1="351" + y1="26" + x2="351" + y2="10" + gradientUnits="userSpaceOnUse" /><linearGradient + id="linearGradient12453"><stop + style="stop-color:#b11917;stop-opacity:1;" + offset="0" + id="stop12449" /><stop + style="stop-color:#e65014;stop-opacity:1;" + offset="1" + id="stop12451" /></linearGradient><linearGradient + xlink:href="#linearGradient12299" + id="linearGradient12301" + x1="324" + y1="26" + x2="324" + y2="10" + gradientUnits="userSpaceOnUse" /><linearGradient + id="linearGradient12299"><stop + style="stop-color:#0787c1;stop-opacity:1;" + offset="0" + id="stop12295" /><stop + style="stop-color:#65adb9;stop-opacity:1;" + offset="1" + id="stop12297" /></linearGradient><linearGradient + xlink:href="#linearGradient12445" + id="linearGradient12447" + x1="334" + y1="26" + x2="334" + y2="10" + gradientUnits="userSpaceOnUse" /><linearGradient + id="linearGradient12445"><stop + style="stop-color:#798b2f;stop-opacity:1;" + offset="0" + id="stop12441" /><stop + style="stop-color:#9fc41e;stop-opacity:1;" + offset="1" + id="stop12443" /></linearGradient></defs><title id="title132">Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher + y="0" /> diff --git a/launcher/resources/multimc/scalable/instances/gear.svg b/launcher/resources/multimc/scalable/instances/gear.svg index ca71778da..4bb91e085 100644 --- a/launcher/resources/multimc/scalable/instances/gear.svg +++ b/launcher/resources/multimc/scalable/instances/gear.svg @@ -8,80 +8,58 @@ viewBox="0 0 32 32" id="svg168" xml:space="preserve" + xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"><radialGradient + xlink:href="#linearGradient21157" + id="radialGradient21159" + cx="368" + cy="16" + fx="368" + fy="16" + r="7" + gradientUnits="userSpaceOnUse" /><linearGradient + id="linearGradient21157"><stop + style="stop-color:#e1edf2;stop-opacity:1;" + offset="0" + id="stop21153" /><stop + style="stop-color:#abbdc4;stop-opacity:1;" + offset="0.72112602" + id="stop21161" /><stop + style="stop-color:#95acb6;stop-opacity:1;" + offset="1" + id="stop21155" /></linearGradient><radialGradient + xlink:href="#linearGradient21167" + id="radialGradient21309" + gradientUnits="userSpaceOnUse" + cx="400" + cy="16" + fx="400" + fy="16" + r="11" + gradientTransform="matrix(1.3636364,0,0,1.3636364,-177.45455,-5.8181818)" /><linearGradient + id="linearGradient21167"><stop + style="stop-color:#e5e6e9;stop-opacity:1;" + offset="0.13595749" + id="stop21163" /><stop + style="stop-color:#c5c7cf;stop-opacity:1;" + offset="0.86267382" + id="stop21165" /></linearGradient></defs><title id="title132">Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher<linearGradient + id="linearGradient48524"><stop + style="stop-color:#dfcd64;stop-opacity:1;" + offset="0" + id="stop48516" /><stop + style="stop-color:#d6b917;stop-opacity:1;" + offset="0.11879402" + id="stop48518" /><stop + style="stop-color:#f6e689;stop-opacity:1;" + offset="0.71356344" + id="stop48520" /><stop + style="stop-color:#d4bb2b;stop-opacity:1;" + offset="1" + id="stop48522" /></linearGradient><linearGradient + xlink:href="#linearGradient48524" + id="linearGradient48512" + gradientUnits="userSpaceOnUse" + x1="153" + y1="25" + x2="135" + y2="7" + gradientTransform="translate(256)" /></defs><title id="title132">Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher + y="0" /> diff --git a/launcher/resources/multimc/scalable/instances/grass.svg b/launcher/resources/multimc/scalable/instances/grass.svg index 184b25832..d33dad507 100644 --- a/launcher/resources/multimc/scalable/instances/grass.svg +++ b/launcher/resources/multimc/scalable/instances/grass.svg @@ -14,39 +14,71 @@ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"><linearGradient + id="linearGradient53203"><stop + style="stop-color:#77563b;stop-opacity:1;" + offset="0" + id="stop53199" /><stop + style="stop-color:#86674f;stop-opacity:1;" + offset="1" + id="stop53201" /></linearGradient><linearGradient + id="linearGradient29505"><stop + style="stop-color:#99cd61;stop-opacity:1;" + offset="0" + id="stop29501" /><stop + style="stop-color:#bccd61;stop-opacity:1;" + offset="1" + id="stop29503" /></linearGradient><linearGradient + xlink:href="#linearGradient53203" + id="linearGradient56913" + gradientUnits="userSpaceOnUse" + x1="785" + y1="26" + x2="785" + y2="6" + gradientTransform="translate(-352)" /><linearGradient + xlink:href="#linearGradient56992" + id="linearGradient56984" + x1="433" + y1="11" + x2="433" + y2="20" + gradientUnits="userSpaceOnUse" /><linearGradient + id="linearGradient56992"><stop + style="stop-color:#4d3f33;stop-opacity:0.5;" + offset="0" + id="stop56986" /><stop + style="stop-color:#4d3f33;stop-opacity:0;" + offset="1" + id="stop56990" /></linearGradient><linearGradient + xlink:href="#linearGradient29505" + id="linearGradient29507" + x1="428" + y1="14" + x2="428" + y2="4" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(2,2)" /></defs><title id="title132">Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher + y="0" /> diff --git a/launcher/resources/multimc/scalable/instances/herobrine.svg b/launcher/resources/multimc/scalable/instances/herobrine.svg index b58745c61..4704eb153 100644 --- a/launcher/resources/multimc/scalable/instances/herobrine.svg +++ b/launcher/resources/multimc/scalable/instances/herobrine.svg @@ -8,55 +8,75 @@ viewBox="0 0 32 32" id="svg168" xml:space="preserve" + xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"><linearGradient + id="linearGradient2085"><stop + style="stop-color:#261a0a;stop-opacity:1;" + offset="0" + id="stop2081" /><stop + style="stop-color:#3c2b13;stop-opacity:1;" + offset="1" + id="stop2083" /></linearGradient><radialGradient + xlink:href="#linearGradient2066" + id="radialGradient2757-3" + cx="496.06177" + cy="17.211182" + fx="495.87827" + fy="18.730774" + r="11" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.5554022,0,0,1.2337313,-771.57556,-4.2669434)" /><linearGradient + id="linearGradient2066"><stop + style="stop-color:#ceb8aa;stop-opacity:1;" + offset="0.23876573" + id="stop2062" /><stop + style="stop-color:#b39888;stop-opacity:1;" + offset="0.51858544" + id="stop2064" /></linearGradient><linearGradient + xlink:href="#linearGradient2085" + id="linearGradient94741" + gradientUnits="userSpaceOnUse" + x1="504" + y1="15" + x2="504" + y2="5" /><linearGradient + xlink:href="#linearGradient2564" + id="linearGradient2566" + x1="466" + y1="27" + x2="466" + y2="22" + gradientUnits="userSpaceOnUse" /><linearGradient + id="linearGradient2564"><stop + style="stop-color:#45362e;stop-opacity:1;" + offset="0" + id="stop2560" /><stop + style="stop-color:#59463c;stop-opacity:1;" + offset="1" + id="stop2562" /></linearGradient></defs><title id="title132">Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher<linearGradient + id="linearGradient27992"><stop + style="stop-color:#c5c7cf;stop-opacity:1;" + offset="0" + id="stop27990" /><stop + style="stop-color:#d8d9e0;stop-opacity:1;" + offset="1" + id="stop27988" /></linearGradient><linearGradient + id="linearGradient56358"><stop + style="stop-color:#ededed;stop-opacity:1;" + offset="0" + id="stop56354" /><stop + style="stop-color:#f4f4f4;stop-opacity:1;" + offset="1" + id="stop56356" /></linearGradient><linearGradient + xlink:href="#linearGradient27992" + id="linearGradient17901" + x1="496" + y1="26" + x2="496" + y2="6" + gradientUnits="userSpaceOnUse" /><linearGradient + xlink:href="#linearGradient56358" + id="linearGradient18032" + gradientUnits="userSpaceOnUse" + x1="503" + y1="25" + x2="503" + y2="23" + gradientTransform="translate(0,-4)" /><linearGradient + xlink:href="#linearGradient56358" + id="linearGradient18124" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0,-8)" + x1="503" + y1="25" + x2="503" + y2="23" /><linearGradient + xlink:href="#linearGradient18539" + id="linearGradient18530" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0,-6)" + x1="503" + y1="25" + x2="503" + y2="23" /><linearGradient + id="linearGradient18539"><stop + style="stop-color:#27414e;stop-opacity:0;" + offset="0" + id="stop18537" /><stop + style="stop-color:#27414e;stop-opacity:0.74901961;" + offset="0.49837714" + id="stop18535" /><stop + style="stop-color:#27414e;stop-opacity:1;" + offset="0.83958842" + id="stop18533" /></linearGradient><linearGradient + xlink:href="#linearGradient18539" + id="linearGradient18590" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0,-10)" + x1="503" + y1="25" + x2="503" + y2="23" /><linearGradient + xlink:href="#linearGradient18539" + id="linearGradient18615" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0,-14)" + x1="503" + y1="25" + x2="503" + y2="23" /><linearGradient + xlink:href="#linearGradient18539" + id="linearGradient18640" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0,-2)" + x1="503" + y1="25" + x2="503" + y2="23" /><linearGradient + xlink:href="#linearGradient56358" + id="linearGradient18124-2" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0,-12)" + x1="503" + y1="25" + x2="503" + y2="23" /><linearGradient + xlink:href="#linearGradient56358" + id="linearGradient18124-0" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0,-16)" + x1="503" + y1="25" + x2="503" + y2="23" /></defs><title id="title132">Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher + y="0" /> diff --git a/launcher/resources/multimc/scalable/instances/magitech.svg b/launcher/resources/multimc/scalable/instances/magitech.svg index 9dd993903..d866c6f01 100644 --- a/launcher/resources/multimc/scalable/instances/magitech.svg +++ b/launcher/resources/multimc/scalable/instances/magitech.svg @@ -8,45 +8,75 @@ viewBox="0 0 32 32" id="svg168" xml:space="preserve" + xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"><radialGradient + xlink:href="#linearGradient16441" + id="radialGradient16443" + cx="559.9212" + cy="16.022875" + fx="559.9212" + fy="16.022875" + r="11.80246" + gradientTransform="matrix(1,0,0,1.0119015,0,-0.19069696)" + gradientUnits="userSpaceOnUse" /><linearGradient + id="linearGradient16441"><stop + style="stop-color:#9f0bff;stop-opacity:1;" + offset="0.4400529" + id="stop16439" /><stop + style="stop-color:#7111f8;stop-opacity:1;" + offset="1" + id="stop16437" /></linearGradient><radialGradient + xlink:href="#linearGradient14255" + id="radialGradient14257" + cx="560" + cy="16" + fx="560" + fy="16" + r="9" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-32)" /><linearGradient + id="linearGradient14255"><stop + style="stop-color:#e570f7;stop-opacity:1;" + offset="0" + id="stop14251" /><stop + style="stop-color:#d829c8;stop-opacity:1;" + offset="1" + id="stop14253" /></linearGradient><linearGradient + xlink:href="#linearGradient16452" + id="linearGradient16454" + x1="560" + y1="25" + x2="560" + y2="11" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-32)" /><linearGradient + id="linearGradient16452"><stop + style="stop-color:#f6cff4;stop-opacity:1;" + offset="0" + id="stop16450" /><stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="1" + id="stop16448" /></linearGradient></defs><title id="title132">Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher<linearGradient + id="linearGradient6068"><stop + style="stop-color:#cdcdcd;stop-opacity:1;" + offset="0" + id="stop6064" /><stop + style="stop-color:#eeeeee;stop-opacity:1;" + offset="1" + id="stop6066" /></linearGradient><linearGradient + xlink:href="#linearGradient6068" + id="linearGradient39389" + x1="565" + y1="23" + x2="567" + y2="21" + gradientUnits="userSpaceOnUse" /><linearGradient + xlink:href="#linearGradient38100" + id="linearGradient38102" + x1="408.70773" + y1="-379.00925" + x2="408.70773" + y2="-389.8125" + gradientUnits="userSpaceOnUse" /><linearGradient + id="linearGradient38100"><stop + style="stop-color:#956c4a;stop-opacity:1;" + offset="0" + id="stop38096" /><stop + style="stop-color:#bb7c47;stop-opacity:1;" + offset="1" + id="stop38098" /></linearGradient><linearGradient + xlink:href="#linearGradient39375" + id="linearGradient39377" + x1="401.63666" + y1="-379.00925" + x2="401.63666" + y2="-389.8125" + gradientUnits="userSpaceOnUse" /><linearGradient + id="linearGradient39375"><stop + style="stop-color:#d15e65;stop-opacity:1;" + offset="0" + id="stop39371" /><stop + style="stop-color:#b2594e;stop-opacity:1;" + offset="1" + id="stop39373" /></linearGradient></defs><title id="title132">Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher<linearGradient + id="linearGradient3108"><stop + style="stop-color:#1bd96a;stop-opacity:1;" + offset="0" + id="stop3104" /><stop + style="stop-color:#1bd9a1;stop-opacity:1;" + offset="1" + id="stop3106" /></linearGradient><linearGradient + xlink:href="#linearGradient3108" + id="linearGradient3110" + x1="70.852509" + y1="141.75883" + x2="70.852509" + y2="0.053809531" + gradientUnits="userSpaceOnUse" /><linearGradient + xlink:href="#linearGradient3108" + id="linearGradient50774" + gradientUnits="userSpaceOnUse" + x1="70.852509" + y1="141.75883" + x2="70.852509" + y2="0.053809531" /><linearGradient + xlink:href="#linearGradient3108" + id="linearGradient50776" + gradientUnits="userSpaceOnUse" + x1="70.852509" + y1="141.75883" + x2="70.852509" + y2="0.053809531" /></defs><title id="title132">Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher<radialGradient + xlink:href="#linearGradient62774" + id="radialGradient62776" + cx="624" + cy="15" + fx="624" + fy="15" + r="12" + gradientUnits="userSpaceOnUse" /><linearGradient + id="linearGradient62774"><stop + style="stop-color:#f2effd;stop-opacity:1;" + offset="0.45171013" + id="stop62772" /><stop + style="stop-color:#d2cbf3;stop-opacity:1;" + offset="1" + id="stop62770" /></linearGradient><radialGradient + xlink:href="#linearGradient62766" + id="radialGradient62768" + cx="624" + cy="16" + fx="624" + fy="16" + r="6" + gradientUnits="userSpaceOnUse" /><linearGradient + id="linearGradient62766"><stop + style="stop-color:#fafbb9;stop-opacity:1;" + offset="0" + id="stop62762" /><stop + style="stop-color:#fafbb9;stop-opacity:0;" + offset="1" + id="stop62764" /></linearGradient></defs><title id="title132">Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher<linearGradient + xlink:href="#linearGradient19391" + id="linearGradient19373" + x1="690" + y1="22" + x2="690" + y2="21" + gradientUnits="userSpaceOnUse" /><linearGradient + id="linearGradient19391"><stop + style="stop-color:#cfaf6b;stop-opacity:1;" + offset="0" + id="stop19387" /><stop + style="stop-color:#ddc694;stop-opacity:1;" + offset="1" + id="stop19389" /></linearGradient><linearGradient + xlink:href="#linearGradient19391" + id="linearGradient19435" + gradientUnits="userSpaceOnUse" + x1="690" + y1="22" + x2="690" + y2="21" + gradientTransform="translate(0,-5)" /><linearGradient + xlink:href="#linearGradient19391" + id="linearGradient19458" + gradientUnits="userSpaceOnUse" + x1="690" + y1="22" + x2="690" + y2="21" + gradientTransform="translate(0,-10)" /><linearGradient + xlink:href="#linearGradient19391" + id="linearGradient19481" + gradientUnits="userSpaceOnUse" + x1="690" + y1="22" + x2="690" + y2="21" + gradientTransform="translate(0,-15)" /></defs><title id="title132">Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher + y="0" /> diff --git a/launcher/resources/multimc/scalable/instances/skeleton.svg b/launcher/resources/multimc/scalable/instances/skeleton.svg index d8beb49bb..33a34abba 100644 --- a/launcher/resources/multimc/scalable/instances/skeleton.svg +++ b/launcher/resources/multimc/scalable/instances/skeleton.svg @@ -8,46 +8,112 @@ viewBox="0 0 32 32" id="svg168" xml:space="preserve" + xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"><linearGradient + xlink:href="#linearGradient6068" + id="linearGradient6070" + x1="656" + y1="27" + x2="656" + y2="5" + gradientUnits="userSpaceOnUse" /><linearGradient + id="linearGradient6068"><stop + style="stop-color:#cdcdcd;stop-opacity:1;" + offset="0" + id="stop6064" /><stop + style="stop-color:#eeeeee;stop-opacity:1;" + offset="1" + id="stop6066" /></linearGradient><linearGradient + xlink:href="#linearGradient7624" + id="linearGradient7626" + x1="658" + y1="20" + x2="658" + y2="24" + gradientUnits="userSpaceOnUse" /><linearGradient + id="linearGradient7624"><stop + style="stop-color:#8e8e86;stop-opacity:1;" + offset="0" + id="stop7620" /><stop + style="stop-color:#8e8e86;stop-opacity:0;" + offset="1" + id="stop7622" /></linearGradient><linearGradient + xlink:href="#linearGradient7155" + id="linearGradient7165" + x1="656" + y1="25" + x2="656" + y2="22" + gradientUnits="userSpaceOnUse" /><linearGradient + id="linearGradient7155"><stop + style="stop-color:#3e4447;stop-opacity:1;" + offset="0" + id="stop7151" /><stop + style="stop-color:#2e3134;stop-opacity:1;" + offset="1" + id="stop7153" /></linearGradient><radialGradient + xlink:href="#linearGradient6078" + id="radialGradient6080" + cx="662" + cy="18" + fx="662" + fy="18" + r="3" + gradientTransform="matrix(0.99999794,-1.7103091e-6,1.7879388e-6,1.0000015,0.0013367,0.00110992)" + gradientUnits="userSpaceOnUse" /><linearGradient + id="linearGradient6078"><stop + style="stop-color:#006868;stop-opacity:1;" + offset="0" + id="stop6074" /><stop + style="stop-color:#3e4447;stop-opacity:1;" + offset="1" + id="stop6076" /></linearGradient><linearGradient + xlink:href="#linearGradient7155" + id="linearGradient7157" + x1="651" + y1="20" + x2="651" + y2="16" + gradientUnits="userSpaceOnUse" /></defs><title id="title132">Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher<radialGradient + xlink:href="#linearGradient36865" + id="radialGradient10457-1" + cx="112" + cy="17" + fx="112" + fy="17" + r="6" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.1666668,-6.8921104e-7,5.6666669e-7,1.1666667,589.33332,-2.8332561)" /><linearGradient + id="linearGradient36865"><stop + style="stop-color:#63271f;stop-opacity:1;" + offset="0" + id="stop36861" /><stop + style="stop-color:#3d1212;stop-opacity:1;" + offset="1" + id="stop36863" /></linearGradient><linearGradient + xlink:href="#linearGradient36859" + id="linearGradient11859-1" + x1="111" + y1="25" + x2="111" + y2="7" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(608)" /><linearGradient + id="linearGradient36859"><stop + style="stop-color:#729657;stop-opacity:1;" + offset="0" + id="stop36855" /><stop + style="stop-color:#a5bf6e;stop-opacity:1;" + offset="1" + id="stop36857" /></linearGradient></defs><title id="title132">Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher + y="0" /> diff --git a/launcher/resources/multimc/scalable/instances/steve.svg b/launcher/resources/multimc/scalable/instances/steve.svg index 0f29687ca..53b35b6ec 100644 --- a/launcher/resources/multimc/scalable/instances/steve.svg +++ b/launcher/resources/multimc/scalable/instances/steve.svg @@ -8,55 +8,101 @@ viewBox="0 0 32 32" id="svg168" xml:space="preserve" + xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"><radialGradient + xlink:href="#linearGradient2739" + id="radialGradient2757" + cx="496.06177" + cy="17.211182" + fx="495.87827" + fy="18.730774" + r="11" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.5554022,0,0,1.2337313,-515.57556,-4.2669434)" /><linearGradient + id="linearGradient2739"><stop + style="stop-color:#cca997;stop-opacity:1;" + offset="0.23748928" + id="stop2755" /><stop + style="stop-color:#bd8e74;stop-opacity:1;" + offset="0.51858547" + id="stop2735" /></linearGradient><linearGradient + xlink:href="#linearGradient1330" + id="linearGradient1332" + x1="487" + y1="15" + x2="487" + y2="5" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(256)" /><linearGradient + id="linearGradient1330"><stop + style="stop-color:#261a0a;stop-opacity:1;" + offset="0" + id="stop1326" /><stop + style="stop-color:#422e11;stop-opacity:1;" + offset="1" + id="stop1328" /></linearGradient><linearGradient + xlink:href="#linearGradient1463" + id="linearGradient1465" + x1="755" + y1="27" + x2="755" + y2="22" + gradientUnits="userSpaceOnUse" /><linearGradient + id="linearGradient1463"><stop + style="stop-color:#45220e;stop-opacity:1;" + offset="0" + id="stop1459" /><stop + style="stop-color:#552910;stop-opacity:1;" + offset="1" + id="stop1461" /></linearGradient><linearGradient + xlink:href="#linearGradient1503" + id="linearGradient1505" + x1="748" + y1="20" + x2="748" + y2="17" + gradientUnits="userSpaceOnUse" /><linearGradient + id="linearGradient1503"><stop + style="stop-color:#5c3874;stop-opacity:1;" + offset="0" + id="stop1499" /><stop + style="stop-color:#3c3874;stop-opacity:1;" + offset="1" + id="stop1501" /></linearGradient><linearGradient + xlink:href="#linearGradient1503" + id="linearGradient1365" + gradientUnits="userSpaceOnUse" + x1="748" + y1="20" + x2="748" + y2="17" /><linearGradient + xlink:href="#linearGradient1503" + id="linearGradient1367" + gradientUnits="userSpaceOnUse" + x1="748" + y1="20" + x2="748" + y2="17" /></defs><title id="title132">Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher<linearGradient + xlink:href="#linearGradient25803" + id="linearGradient25805" + x1="785" + y1="26" + x2="785" + y2="6" + gradientUnits="userSpaceOnUse" /><linearGradient + id="linearGradient25803"><stop + style="stop-color:#8e8e86;stop-opacity:1;" + offset="0" + id="stop25799" /><stop + style="stop-color:#a2a29b;stop-opacity:1;" + offset="1" + id="stop25801" /></linearGradient></defs><title id="title132">Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher + y="0" /> diff --git a/launcher/resources/multimc/scalable/instances/tnt.svg b/launcher/resources/multimc/scalable/instances/tnt.svg index 841f4ef86..a7a2689ff 100644 --- a/launcher/resources/multimc/scalable/instances/tnt.svg +++ b/launcher/resources/multimc/scalable/instances/tnt.svg @@ -8,85 +8,116 @@ viewBox="0 0 32 32" id="svg168" xml:space="preserve" + xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"><linearGradient + xlink:href="#linearGradient18899" + id="linearGradient18901" + x1="805" + y1="16" + x2="812" + y2="16" + gradientUnits="userSpaceOnUse" /><linearGradient + id="linearGradient18899"><stop + style="stop-color:#bf454c;stop-opacity:1;" + offset="0" + id="stop18895" /><stop + style="stop-color:#df6277;stop-opacity:1;" + offset="0.5" + id="stop18972" /><stop + style="stop-color:#bf454c;stop-opacity:1;" + offset="1" + id="stop18897" /></linearGradient><linearGradient + xlink:href="#linearGradient18899" + id="linearGradient19011" + x1="812" + y1="16" + x2="820" + y2="16" + gradientUnits="userSpaceOnUse" /><linearGradient + xlink:href="#linearGradient18899" + id="linearGradient19015" + gradientUnits="userSpaceOnUse" + x1="805" + y1="16" + x2="812" + y2="16" + gradientTransform="matrix(-1,0,0,1,1632,0)" /><linearGradient + xlink:href="#linearGradient19917" + id="linearGradient22848" + gradientUnits="userSpaceOnUse" + x1="816" + y1="27" + x2="816" + y2="20" /><linearGradient + id="linearGradient19917"><stop + style="stop-color:#a02722;stop-opacity:1;" + offset="0" + id="stop19913" /><stop + style="stop-color:#a02722;stop-opacity:0;" + offset="1" + id="stop19915" /></linearGradient><radialGradient + xlink:href="#linearGradient19935" + id="radialGradient19929" + cx="816" + cy="14" + fx="816" + fy="14" + r="11" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.1570249,0,0,1,-128.13223,0)" /><linearGradient + id="linearGradient19935"><stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop19933" /><stop + style="stop-color:#f6cff4;stop-opacity:1;" + offset="1" + id="stop19931" /></linearGradient></defs><title id="title132">Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher Date: Tue, 22 Nov 2022 13:02:39 -0300 Subject: [PATCH 062/155] merge with upstream MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Santiago Cézar --- launcher/resources/instance_icons.svg | 2925 ++++++++++++----- .../128x128/instances/chicken_legacy.png | Bin 0 -> 6369 bytes .../128x128/instances/creeper_legacy.png | Bin 0 -> 9046 bytes .../128x128/instances/enderpearl_legacy.png | Bin 0 -> 21425 bytes .../128x128/instances/flame_legacy.png | Bin 0 -> 6226 bytes .../128x128/instances/ftb_glow_legacy.png | Bin 0 -> 12708 bytes .../128x128/instances/ftb_logo_legacy.png | Bin 0 -> 7883 bytes .../multimc/128x128/instances/gear_legacy.png | Bin 0 -> 18321 bytes .../128x128/instances/herobrine_legacy.png | Bin 0 -> 4937 bytes .../128x128/instances/infinity_legacy.png | Bin 0 -> 8012 bytes .../128x128/instances/magitech_legacy.png | Bin 0 -> 23097 bytes .../multimc/128x128/instances/meat_legacy.png | Bin 0 -> 10583 bytes .../128x128/instances/netherstar_legacy.png | Bin 0 -> 14062 bytes .../128x128/instances/skeleton_legacy.png | Bin 0 -> 3673 bytes .../instances/squarecreeper_legacy.png | Bin 0 -> 9136 bytes .../128x128/instances/steve_legacy.png | Bin 0 -> 4312 bytes .../multimc/32x32/instances/brick_legacy.png | Bin 0 -> 2388 bytes .../32x32/instances/chicken_legacy.png | Bin 0 -> 1181 bytes .../32x32/instances/creeper_legacy.png | Bin 0 -> 1524 bytes .../32x32/instances/diamond_legacy.png | Bin 0 -> 2444 bytes .../multimc/32x32/instances/dirt_legacy.png | Bin 0 -> 482 bytes .../32x32/instances/enderpearl_legacy.png | Bin 0 -> 2120 bytes .../multimc/32x32/instances/ftb_glow.png | Bin 0 -> 1747 bytes .../32x32/instances/ftb_logo_legacy.png | Bin 0 -> 1607 bytes .../multimc/32x32/instances/gear_legacy.png | Bin 0 -> 2414 bytes .../multimc/32x32/instances/gold_legacy.png | Bin 0 -> 2366 bytes .../multimc/32x32/instances/grass_legacy.png | Bin 0 -> 618 bytes .../32x32/instances/herobrine_legacy.png | Bin 0 -> 1034 bytes .../32x32/instances/infinity_legacy.png | Bin 0 -> 1714 bytes .../multimc/32x32/instances/iron_legacy.png | Bin 0 -> 1772 bytes .../32x32/instances/magitech_legacy.png | Bin 0 -> 2646 bytes .../multimc/32x32/instances/meat_legacy.png | Bin 0 -> 1514 bytes .../32x32/instances/netherstar_legacy.png | Bin 0 -> 1942 bytes .../multimc/32x32/instances/planks_legacy.png | Bin 0 -> 2299 bytes .../32x32/instances/skeleton_legacy.png | Bin 0 -> 696 bytes .../32x32/instances/squarecreeper_legacy.png | Bin 0 -> 1623 bytes .../multimc/32x32/instances/steve_legacy.png | Bin 0 -> 969 bytes .../multimc/32x32/instances/stone_legacy.png | Bin 0 -> 1866 bytes .../multimc/32x32/instances/tnt_legacy.png | Bin 0 -> 378 bytes .../50x50/instances/enderman_legacy.png | Bin 0 -> 2429 bytes launcher/resources/multimc/multimc.qrc | 71 +- .../multimc/scalable/instances/bee_legacy.svg | 159 + .../multimc/scalable/instances/fox.svg | 45 +- .../multimc/scalable/instances/fox_legacy.svg | 290 ++ .../multimc/scalable/instances/meat.svg | 2 +- 45 files changed, 2645 insertions(+), 847 deletions(-) create mode 100644 launcher/resources/multimc/128x128/instances/chicken_legacy.png create mode 100644 launcher/resources/multimc/128x128/instances/creeper_legacy.png create mode 100644 launcher/resources/multimc/128x128/instances/enderpearl_legacy.png create mode 100644 launcher/resources/multimc/128x128/instances/flame_legacy.png create mode 100644 launcher/resources/multimc/128x128/instances/ftb_glow_legacy.png create mode 100644 launcher/resources/multimc/128x128/instances/ftb_logo_legacy.png create mode 100644 launcher/resources/multimc/128x128/instances/gear_legacy.png create mode 100644 launcher/resources/multimc/128x128/instances/herobrine_legacy.png create mode 100644 launcher/resources/multimc/128x128/instances/infinity_legacy.png create mode 100644 launcher/resources/multimc/128x128/instances/magitech_legacy.png create mode 100644 launcher/resources/multimc/128x128/instances/meat_legacy.png create mode 100644 launcher/resources/multimc/128x128/instances/netherstar_legacy.png create mode 100644 launcher/resources/multimc/128x128/instances/skeleton_legacy.png create mode 100644 launcher/resources/multimc/128x128/instances/squarecreeper_legacy.png create mode 100644 launcher/resources/multimc/128x128/instances/steve_legacy.png create mode 100644 launcher/resources/multimc/32x32/instances/brick_legacy.png create mode 100644 launcher/resources/multimc/32x32/instances/chicken_legacy.png create mode 100644 launcher/resources/multimc/32x32/instances/creeper_legacy.png create mode 100644 launcher/resources/multimc/32x32/instances/diamond_legacy.png create mode 100644 launcher/resources/multimc/32x32/instances/dirt_legacy.png create mode 100644 launcher/resources/multimc/32x32/instances/enderpearl_legacy.png create mode 100644 launcher/resources/multimc/32x32/instances/ftb_glow.png create mode 100644 launcher/resources/multimc/32x32/instances/ftb_logo_legacy.png create mode 100644 launcher/resources/multimc/32x32/instances/gear_legacy.png create mode 100644 launcher/resources/multimc/32x32/instances/gold_legacy.png create mode 100644 launcher/resources/multimc/32x32/instances/grass_legacy.png create mode 100644 launcher/resources/multimc/32x32/instances/herobrine_legacy.png create mode 100644 launcher/resources/multimc/32x32/instances/infinity_legacy.png create mode 100644 launcher/resources/multimc/32x32/instances/iron_legacy.png create mode 100644 launcher/resources/multimc/32x32/instances/magitech_legacy.png create mode 100644 launcher/resources/multimc/32x32/instances/meat_legacy.png create mode 100644 launcher/resources/multimc/32x32/instances/netherstar_legacy.png create mode 100644 launcher/resources/multimc/32x32/instances/planks_legacy.png create mode 100644 launcher/resources/multimc/32x32/instances/skeleton_legacy.png create mode 100644 launcher/resources/multimc/32x32/instances/squarecreeper_legacy.png create mode 100644 launcher/resources/multimc/32x32/instances/steve_legacy.png create mode 100644 launcher/resources/multimc/32x32/instances/stone_legacy.png create mode 100644 launcher/resources/multimc/32x32/instances/tnt_legacy.png create mode 100644 launcher/resources/multimc/50x50/instances/enderman_legacy.png create mode 100644 launcher/resources/multimc/scalable/instances/bee_legacy.svg create mode 100644 launcher/resources/multimc/scalable/instances/fox_legacy.svg diff --git a/launcher/resources/instance_icons.svg b/launcher/resources/instance_icons.svg index 0c2b9e202..84c0ef6f0 100644 --- a/launcher/resources/instance_icons.svg +++ b/launcher/resources/instance_icons.svg @@ -384,7 +384,1389 @@ height="22" x="485" y="5" - ry="3" />Prism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism LauncherTODOTODOTODOTODOTODOTODO?TODOTODO + y="32" /> diff --git a/launcher/resources/multimc/128x128/instances/chicken_legacy.png b/launcher/resources/multimc/128x128/instances/chicken_legacy.png new file mode 100644 index 0000000000000000000000000000000000000000..71f6dedc54f470a6f8219a427bbabbae1f025a02 GIT binary patch literal 6369 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 Xlbl-wZ*(y*Ffe$!`njxgN@xNAtADtW literal 0 HcmV?d00001 diff --git a/launcher/resources/multimc/128x128/instances/creeper_legacy.png b/launcher/resources/multimc/128x128/instances/creeper_legacy.png new file mode 100644 index 0000000000000000000000000000000000000000..41b7d07dbfcc841eb6dded16284b1a49fe4e8b4a GIT binary patch literal 9046 zcmeAS@N?(olHy`uVBq!ia0y~yU}ykg4mJh`hQoG=rx_R+Sc;uILpV4%IBGajIv5xj zI14-?iy0WqV?mfvvcWBufq_A?#5JNMI6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#W zDFy}w22U5qkcv5P=SHuIJ05!c|8MK^_;VlM-slUK-|qKzNhhzT>k^l}PL&y&S#iG_ zLNxdtqC;KRMjhc6S@kK5Q)Plfh!c~dV&f6!5Ra#gb|I?-g0uxSvZSw=6$VXue9NzI z?v3Z)-bUKIi8Rh$JM-rB_cg}@^@Qiv+~5BF%}mqR+poyi=kld;>Id&bPU zj0^%N>X{TS9Y2%*&rM+;!!xdUm!d22evZ*v{HdS1HsxgM%>I}AxoB>r=IPR3*)g%n z<*ScXWXt?Bi@$a3*;m~O*{NSe8t$tuTE8`Q)5`52A2>1p z>>YQf|9GZx=f=Zlm)Addc3HpqmCpY4%s)hxc1^X`3|`I{68g1_A)fgIU$IR3x%6afy`x8^l#_bmLdS@2fgGA%E@>c^$e_W!-#$JhO4{ytaff>+KKW{w?| z)r(o}jtXjRQTlx#-Ibj~_ru)xO42)j9Za{}{9$iT(6eQ8WNO+Ys$2XEX4o2R-cj@J z!J~&;nH7}g9Jdq@G@G}t^y|y|`ghm->weUyXGzIV*_iU~gN~nlnauV1cMg2>widcx z$PmAJ)vJv`JEI@H>mx$_xs&uZvOZK877-Pl{A`|8)P-5$RE5P$22#v%R-tbe-2^(1~6Ic5A%IK=(>we3UmqIGL@ zrazpV%fF%K$%bppn!bs9BJ=;Bx3~NH#=q{%TD<@NZTJ4Qa=Q;yHs5kNyn`|J!(&Tv8|66NQ(9H~ z)~si_-|}$Yhv4)5sZSm_Pr1roml4ip=e{*-VbqQ<8@t8za`t?^w*CLF{c$@gUq7?# zW4+2@@hRc5uC(%x3F*JA#lD=7`|!EO^s4oyT}|Bl@f!|XN9}(9X8Zm>%j+xN-FUSz z_1x)GCl0DV)J*-6m-NHNW75~Hhs*DN$SnGy#~d$}73Usk&Sx~gC#z+r^5)b1_3!3B zPkX<1AFt&Zl|!eP*$wMU&Mo@elpbx?uxeG>-lZ*DDiQ>z%hh|d)+*hq`|p15_Y?Jh z56tDKR$dm!O?1%iUc1*oL5k}>C#!00Et}m(2gAnqlZuw=_??*3EPuYUka@|UZMJj# zrM%be7B)3weQ@RYba~q^H~vh1lCitfffagA))8Um(w=;_ zaQV5H8X;}@3(_BQ$8!C+5@8T_ulm76=YIW~eis#qv!NEhP9)A~o$=fD@fC(utE@O4 zcz=2_^K*K^j}r?y_A_0(SNF|2^~bSOyfqspSwA?w;ElAuW{vt@U5!hcKhEw95b7wI zC-Wy@oy~Qw_=*~)``0eB$uEqpwXv^T#QFQZ<%bh@US2HUA+5l$xjn7mfiCy4;~!Pe zOEt)`)X5#l{AXxv-Mrnl!tbDc-IF6z^=m$U?sxK$nYZ&3&k`@Gh^hxdQ(0s7?vgu{ ze{S{F2RtoTuZBi8eGpkFws6h%IknzwYu>+K_&fbTVqK!*6g~GZ8*B7CO*DjUyFPS& zIJ5cujDyQqqV$tH!THh6ugyujVZ!Jt=D z@iv3?jmdtF#jRZI=Trk9Y@S#7g6SUb#s|jc_U&7LpI_xVuU*f+Ef9d7&%S_OC*lpO<>K{|iUGwzrqT-+rXEox=)Xn-E<(CM4 zC_R$Vc>jwuqn%7*US-+O7bh2oOL_Gs%2;e~xHw0ON9OyPW=0#u^Ybi|Ka=UHEJ}kXndPsb}=ZUr#--|wUD#@HWc=5wrqfK@nb}Mz8g-CiP?PiJKmtXWw z?}yeY58EvV)!WV=yKvyUU;ozl9qG9(ugVO1BopdPXNuVcnlxOk4ri`m*irIx;q&Qy zdO8t5u5j1!^d$=1IR4q0?@$bF*A7_ThI+MyA;Uu^$DTf7J51YbJdV z>Q$jEc-V7sQYl(#6aWF0mBcSk1Q5T*L{AelEQuJfVxw5ha8(cXN^Ys!w$6v=}){L zG(QaHn$J@sDC!quwd>3W&X%3Y#w)%o`Ck(nI^8{^?0s9wng=4B%;Ho>X7W#r&T`-35QXbnX=T6SUt(_ea%%We?Tm<~Pc- zrN-!SZsyRQqLiclm_53T%l>PY_WFt5XF7KD3cTH5AX@XO+3KHPW?h> z22mTNzZ9gIi8CtIC49Yib*avugq5`qP9MwuAsEym{P6Pu&z1)0i^*(wSl_#8;`sKb!ymhklR*Pn6WE=`W{-#|6elnQYr*`2S}0zo3&=xj*%59y|Sz z`~AJAk)eUvZ=TIkB`1T9XRnn$+<#a;wTH1#W2U&rkBhfIf2hpeFJJTRfP()bkCmGb z{#qSTrx?#(GjICx51%hOoZF+N_`u}p`9sfpW7MoR6sJG5j*a_tclnuV8#v~B2fZ>; z%;orVLul=mK+*l5@2kj(Jay`bFsh0EA!V?2PWN~2lw15inG?P=$~)Kb*-8G8{I`

e|~y; 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 literal 0 HcmV?d00001 diff --git a/launcher/resources/multimc/128x128/instances/skeleton_legacy.png b/launcher/resources/multimc/128x128/instances/skeleton_legacy.png new file mode 100644 index 0000000000000000000000000000000000000000..55fcf5a991a78c85f1491aaac2069ba4891374f3 GIT binary patch literal 3673 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 literal 0 HcmV?d00001 diff --git a/launcher/resources/multimc/128x128/instances/squarecreeper_legacy.png b/launcher/resources/multimc/128x128/instances/squarecreeper_legacy.png new file mode 100644 index 0000000000000000000000000000000000000000..c82d8406db175e65b2f72bc93e8c58bcbc669c06 GIT binary patch literal 9136 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 U5?|yY1_lNOPgg&ebxsLQ0HO*O#sB~S literal 0 HcmV?d00001 diff --git a/launcher/resources/multimc/32x32/instances/brick_legacy.png b/launcher/resources/multimc/32x32/instances/brick_legacy.png new file mode 100644 index 0000000000000000000000000000000000000000..c324fda06304c72b6ca19d95bbfc610b60d22a4b GIT binary patch literal 2388 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANN^X_+~x z3MG{VsS2qTnQ06R6}Q%gXBT}o10r9@W&wcVQJTCt^DfRfjNhMjXLau?{ z47(X5um1bFd-eVg%0_XK;)}%Jo7RP`32;(=^>uQk>8*3G|6HtVeZIV|bgx2*;k!L@ z&bJ;5|GN9Q*|`1W`M+B4%tg#E)D<#Rp0P<=U9No5fA#$vyehe-dyW*Co8||fmb37^ znVxytd9%9o`B(Q6nHPn~x)}y0mpt~`qx+y#ZH{30;ikei=3CPu&+2W~b#$0_$GUv& zd&VlRPnj#PzldKu{Xy`pzkh_h_b0a;yDfffFaJNDkGVNjjKrBiFfV|&B}5!4e3gooxQJBZ1$Eb3%8!T zTXwyc-?r@K%cR`Rzn=bJ%}(3wHhHC?Ud)<>;jIMb59yV1wsqRsc#pwo&pd^dCD$~2zR%d#dgo5nWH0Vl+`pPwjO(0sO+2&N@X3Re zgAorr9-5lWnkAEDVwk(EAZq=M>oTh+DqTCisdvjrZ!t z)H_!x$hccxEb}*CuouUrq!3J%yLFT`oK{=uRvW*lj~j8ko=Y>BgETz~t_={w2|K}GXx!!BJ~ z_iGk!Zil5txw~0do6w)?UviBkk9>R^-S@<@ur6& z#h8i={O;!64BGwZJipqZQ*|LmRdZ9)#V5br7L#QdbBZgi`FA+ei8sNV^IM+sZPOKx zeD~y~Y;mhq^)&ZiM^rzouxm5Wje4SJy4NwSLjwq{`0lt>&w251Sb}$5oonW=Pj5Fn%TEctA;a zW%L2NyZNneBNK0*c((J={Wblf(=vMx``y@gqeHf=`?RP|NlL)ptD*b!#b0Y1om}|Z za&M1ra{ZnSf&ClA%KgmO+b^H$-+dzM;F9y754!E$EI(V!(yFZH%t5h~%7ypUU-H&6 zt!n&Xt&l$L>qZ5^^_!MV`nTuUr8tfg$E!V8d&k~$i2b+1`{@4|;rZ8#O~t=dpZ$3` z=x5b_&9GYSoAO#=dnfCZxxYS`F!6rHhtJNn5#?XQVxwb@@4Ix%k3pwEK4if@?e+Gt z`By(5`n|mMca-~mrd9q7;uXjL1#Z~&{1Ns#H1N3&vzzq&3pV>&Tikmqm|RX@3eQHKgnG3fpACq%)E#r(nl`Oo_4Ns zzQrl8NlrC>Hfa}FJLPxk?f!FY=Zg*V)7^S~s^(dE>4;cIyh{i(3VEdYXvU(fDeuqk zT2pZE(VDQVHKqRl4h6(TM?SMU>!`A^L$yOdVR4(0)&_y)p~^>HW_=Tu`^R`(f0DOa zxMYtE_X?-hCqEAUe^9+uxtNyON1zUZeKfx9iOs zX8K=xovT~M(z3m=`}H=p_l(o69sW<&lboc?n(>R9^}*kseVXhpd5!l>w{O2@=O^F5 zQ#y4QBOhPmM5WaA)qAXO+`PR%J?igYhL)b9b&Dc2ZZj}2uqAoByD#35PJhHup_s

4_#%-Q1jv*0;&raX% z$K)u{YR|jLaiX`!1PNj3O>3|GVlew9WLCDXacyt@L+KkAqLLT4wzAIhxbQ$oFVc}| zR>H%7FZ{l-&3g0aY)bkwAG7r5bN;`%^z`DxDebqea=jsU_MRCB7aw)7E{39U5pDhOk+}*>%$_aQE|9(ot+KyhPm*w?@`q@*{L&LUQL**y~AM751&6gEiXe}ZOq=Cw{hi*n3_Y^ z#m7K4Re%V87e>edXjn7Iqt4HYiFjfZ=Va> zzt*&sobj~L^>^irb6?Lh?+p8Uo1LxuYw=0p&3Ek6=Uwn;O|%OCFP(M$d;O=*ACdxh z-BO*tovwG@oW8rrA!Lu;-GcQ033_v9cg1tq>F}@kx1g85hH>{6>Gf4nf8!Y#7#KWV L{an^LB{Ts5CF6OY literal 0 HcmV?d00001 diff --git a/launcher/resources/multimc/32x32/instances/chicken_legacy.png b/launcher/resources/multimc/32x32/instances/chicken_legacy.png new file mode 100644 index 0000000000000000000000000000000000000000..f870467a6204f302e0c62f708200f09891622b69 GIT binary patch literal 1181 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 literal 0 HcmV?d00001 diff --git a/launcher/resources/multimc/32x32/instances/diamond_legacy.png b/launcher/resources/multimc/32x32/instances/diamond_legacy.png new file mode 100644 index 0000000000000000000000000000000000000000..1eb26469788c26f4fb96a3a3fad652ca8b6e023c GIT binary patch literal 2444 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 literal 0 HcmV?d00001 diff --git a/launcher/resources/multimc/32x32/instances/enderpearl_legacy.png b/launcher/resources/multimc/32x32/instances/enderpearl_legacy.png new file mode 100644 index 0000000000000000000000000000000000000000..a818eb8e671a46e99523f269234f60dd5c4ff32d GIT binary patch literal 2120 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 literal 0 HcmV?d00001 diff --git a/launcher/resources/multimc/32x32/instances/gold_legacy.png b/launcher/resources/multimc/32x32/instances/gold_legacy.png new file mode 100644 index 0000000000000000000000000000000000000000..593410fac9a7a929696dee968e112d24780a01da GIT binary patch literal 2366 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 literal 0 HcmV?d00001 diff --git a/launcher/resources/multimc/32x32/instances/grass_legacy.png b/launcher/resources/multimc/32x32/instances/grass_legacy.png new file mode 100644 index 0000000000000000000000000000000000000000..f1694547a419523cce164ff7a698c1692c2522b8 GIT binary patch literal 618 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4kiW$hCdQ-7c($0Fct^7J29*~C-ahlfq^C6 z(btiIVPik{pF~y$1_sUokH}&M2EM}}%y>M1MG6B0gH(xYL`iUdT1k0gQ7S_~VrE{6 zo}X)oLYc9ish**M!Iz?i3=E7nJzX3_JiPZ#_4H$ia(h03C-kKaDU6(=NFdWyq)&I zQv61>JmZ!xFVy+e&M`L_KKqOX!&6;yuSmY$8?MHfJ#jDpZ1vXbAM(#Jw=z`)??>gTe~DWM4fTdWLd literal 0 HcmV?d00001 diff --git a/launcher/resources/multimc/32x32/instances/herobrine_legacy.png b/launcher/resources/multimc/32x32/instances/herobrine_legacy.png new file mode 100644 index 0000000000000000000000000000000000000000..e5460da31d7df8e6d20fa59fbd3b3b8f5ef655df GIT binary patch literal 1034 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 literal 0 HcmV?d00001 diff --git a/launcher/resources/multimc/32x32/instances/meat_legacy.png b/launcher/resources/multimc/32x32/instances/meat_legacy.png new file mode 100644 index 0000000000000000000000000000000000000000..6694859db96b06391866d074da591ea12a9a352b GIT binary patch literal 1514 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}EX7WqAsieW95oy%9SjT% zoCO|{#S9F**Fl)kNn>^e0|SF(iEBhjaDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$ zQVa~N>7Fi*ArY->ukX)~iIhC{@%+x>^fw!A3zLrT|J1C)$CxP?up>e6sG7EviiWS_ zcGkP!I=YrV>R<4H-=HID;tR87w~w(p zxviD0q6bZvzTTl_$n9loGx>(7?X?ZdAD$5Z^-lWZSI;HF=I?i}$qX&=-q07_lzJxg zbg8Rbq* zIKdhm6XN2U;C^`5v}9S{(>qjmsqawV)q9om{5=s<)zVZIiGo1EmAakMLCm=qn=X|e z+;t@O;@fl0H{}l=H_vbUFC)`%j=8+h{PsK6z^^k^lJ1{)_ERayyNPw>K1p8gMcF%+ ze&J0_dbZvzb8VW#90#Ut=fo%O(*MyOva+}G;HHeFpWnT)UT!@9?_K?azt-3D|NHUp zZ`YCC^7jtT&Ds5ZRfm(wq13?mkf|#+D+SHxn6-7eVRv7~zpXRpyDN2g2`+8BlTfT z3g+u`-J-d910}ZqzOpUDcin|>3nAO7H%{BV`s-V;cwPDI`}-F(EKrU*GAZF?K)Cn2 zSsC23i<++N%kav(#_i1BbX==HzdJ~aG2dZ9^J*`1lai@!O|L%Hx^GdwHDS5g)Uqeb zzVOO;_;5!h_n(*hmQd=GBxAqNmMQ$%><1tJ9gO5GF8x;PsHfDmOoYu%Z1t)Ys}h_a zu5Y`R(l*aarD=)T)S#6W%tFRm`aNC?&($fsl6rBgG|6*b*g26Gr(~@*z6g*HO*m+|VZTuMd+*L!hott+&i(#RrAn=0QRewAZB8p{72IYo z+_Lo1t`(auIcXY-l&a244&4y4eul<_I~{rpl?`>Xq_SpIYd)C5;kGSQE^eVbhtWaf zi}Mm(w@k8q^ENpy^{(tenKY~X{pQ>^FYgamnfCgVq`Xt9jQ-;u;bR^eZ>3*$UlVm} zYujaUz|L;Hbl6q*)lu<6y4O?E&MRIJ{UYKwrD$hR{G5cN%RSy`tUY0CY;fsnL5u#B zZ%ejboD#-r9=NFS>E)T}{MG*ttxNEKIkQb!x7K!N&Z36tDmPY0bF|7!-MAe7iff+s zSEq|lQKwz8y3Sw9>+2Ss*+!QH z*LvL%tc@;k-=Z>0OvGZ{`?JfN>a}aNsvb>pj#W2%67PJ#(kX1ot~8nGD+RFy(Iv9s z7uK9zF7-fYx7Ti|Z!GTfUi|J9d@gs;^7tp|K#qg#i^^SOYcKQls&KU)DL$CT36$+yWJ>ZXX&SESH)U#bw+Sd9f$P+dJTztl7_3g740{&5Ft;7#J8BJYD@<);T3K0RYkFzTW@< literal 0 HcmV?d00001 diff --git a/launcher/resources/multimc/32x32/instances/netherstar_legacy.png b/launcher/resources/multimc/32x32/instances/netherstar_legacy.png new file mode 100644 index 0000000000000000000000000000000000000000..43cb51139e7b412d5ca95bbde6d814bc96b695a3 GIT binary patch literal 1942 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}EX7WqAsieW95oy%9SjT% zoCO|{#S9E=Z$Ow)uGGSmfq_A?#5JNMI6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#W zDFz01VNVywkcif;)9?C6-xNJs|NO_TA40bk^o!NIQ0bkyp$;ni3@s|o}F$uxNqb8 zuUl*Vej?jTbNGH%PN9E_}-^8xwTO;DW4e z;iK>Jr>4~8CqAaTzN7=XWIYuoE(Zr=31BY z?TlHsS^f3v^*?L(eYm_-b=mW0+phh2eUSOmO&#CfUb}LG9}_40otJ3a$g*a`aosnb z4w|ZM?d^YOEi?UDyDypJ;G>4}?lS_I@So0vM- z-FMz2_C(ZGgN=>NW}=761BrHd3|*g?8S-rF zdKmmFZR&N!y6dl()~*ZCm{NARbFQX9r^_K}zV_EsgJiu{X5HR)ch<5{4#lYWq^x_l ze^_jBJfI~~;Mpm#DD<*P&h0pMF0Yk43oL9Vd8ou)>J-m+IP$nKR`cqLDZ45*?fZAQ z;l8|!rT`PGhvEiq);CELxB9dNJX2!OZk#Ri@wa4bL_$p>r;)Uh^A?1pP6tfCBkQ^MQo_6j!05z z?cA$hOQ&7G=CL%Wr>9p|(pzO6!}KXZy&o%THanOH8JLBAf5BiBoesy5=($Y<$V(_leQ< zxk2_)gLilM9p5i{Vs(Dy%e1L4O{Y#hqdxh_@#C5KS&KBXA6{Tz;w2e0lgG`h+i>2~ zq|2fV>+b(jbu;VEj4UxT|NOY^vxlO?L33kc1{v;FgCI?<=7W2t6s_B{=MKvhmMQn& zpSS2UHnOw&m1#GB`=Zd$D_5_5x_Uz*zON@|<5~_DizTm9iYsQ*lm{?Wf{ zm)U`v8i!6U_y1VAx5wWnK$P$H^j*8xTlN`0`u^Lv;SxjA#u>8x$Co$Gew>`VY16W2 z$?>kO>p#yeKQTk?f6X6>%iA(LTr6Ze6H+#x(bo?y;bYEWmY0xu^6dG1<7}snmk~N?`O6p_wr<}(`(s6olV)jhX4$oieKJ2a(r=3%O%h}; z*cs!ar#o?b?yWxg<0sN0wOa%GZn4=}*qlk+FR!>?d;Pg*X^(SswsG$B?I`=kG|@w4 zPj`3s*Pv5;#|u|6ZWmbO#Bs5zy!7j#Q@^bCSN*S@611auKO^h6g|9snfBd|LvcMMp)Y{r>%1I5#&}+t$|h=iCSD zcQxj^%==wi605JZ^v#~sz)iW6R*FnZ6F>Zpx^pvl+W+4X>b3iQJbiv*^tEeE0SX7qCr>Wfx+Nt#dE;ySeV_N5-CwVJ|Ju6z zJNs%&3rnvi-!?m%B)I5T<9_LV$5ByYJu*ZxGprn4LFNJ#xsndvo^F@&x8r}y2v z*Z-|=KKbld_zRZZdq3|@+TVOKZO;;61`y|w@3O~h>;H>C{#nm3|JyC+1>!5WFfcGM Nc)I$ztaD0e0ss*8na%(J literal 0 HcmV?d00001 diff --git a/launcher/resources/multimc/32x32/instances/planks_legacy.png b/launcher/resources/multimc/32x32/instances/planks_legacy.png new file mode 100644 index 0000000000000000000000000000000000000000..a94b75029b0a8fd4df03fa99848963354b000429 GIT binary patch literal 2299 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 BH;4cL literal 0 HcmV?d00001 diff --git a/launcher/resources/multimc/32x32/instances/squarecreeper_legacy.png b/launcher/resources/multimc/32x32/instances/squarecreeper_legacy.png new file mode 100644 index 0000000000000000000000000000000000000000..b78c4ae09d46cdb8184615248eca9e81c8253e26 GIT binary patch literal 1623 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 literal 0 HcmV?d00001 diff --git a/launcher/resources/multimc/32x32/instances/stone_legacy.png b/launcher/resources/multimc/32x32/instances/stone_legacy.png new file mode 100644 index 0000000000000000000000000000000000000000..1b6ef7a4343f56efa133c025fc01e10d7f640014 GIT binary patch literal 1866 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 RF)%PNc)I$ztaD0e0syrHeJB6` literal 0 HcmV?d00001 diff --git a/launcher/resources/multimc/50x50/instances/enderman_legacy.png b/launcher/resources/multimc/50x50/instances/enderman_legacy.png new file mode 100644 index 0000000000000000000000000000000000000000..9f3a72b3a093df63a45e6ca6a651bedb0943de8a GIT binary patch literal 2429 zcmeAS@N?(olHy`uVBq!ia0y~yU@!t<4mJh`208nVjSLJ7k|nMYCBgY=CFO}lsSJ)O z`AMk?p1FzXsX?iUDV2pMQ*9U+m@_g%B1$5BeXNr6bM+EIYV;~{3m8Da#=fE;F*!T6 zL?J0PJu}Z%>HY5gN(z}Nwo2iqz6QPp&Z!xh9#uuD!Bu`C$yM3OmMKd1b_zBXRu#Dg zxv3?I3Kh9IdBs*0wn|`gt@4VkK*IV;3ScEA*|tg$M@9GsC^+XAr7D=}8R#Y(m>DXV zndljs7+9KE>L?f)7#ips8tEID>lzwZnVMS}7%D)4lAVH0QA(Oskc%7CuA-DQTcwPW zk^(Dz{qpj1y>er{{GxPyLrY6beFGzXBO~3Slr-Jq%Dj@q3f;V7Wta&rsl~}fnFS@8 z`FRQ;6BCp2OG|8(l%U2|bol2!OE0x2x;^|kUZ%1qD9OU!Y}PcF?(%`5SAu~n+b zEznEJOtCUBwlFX>G&eCYH!?7@Ff_C@G_bUAF*kH{HMDdxc6Nf9flaTOp`od#v5SGDiL0rbqmzq)nWZC4uV-FyNn&1dD$L%@%oHoAUNgLUt(=Qe6HD@o zLh|!-U@0IVBfliSI3vG6!8zDe&rrcPF*!32Bm#;caOhjPq!wkCrKY$Q<>xAZL)a=4 ziwg`)3HcnNH-(%~)3;Nw(FY|Dq~rn<3UYA+F~KPtl*;WC5ZNa+FU3}=NXg!gp(`Pf zfq`|kr;B4q#jQ6{yYq})C1T@~qC2NrXc%b(d8u$!S!HR-H9V_l;nLc*f3efA=&U$~ zz)PRmL_9(QxjI~(*7?=MK8q-xwmCknEL~P*QO8ubc{g{~rtkZ`Cc1K7`uazeybcWu z=kA^K{3^rCS!JiE_q~7p>s$8(h45+n*3?+9XSyWce|-M;-+#By^?Sa!Z1>#En;Q%- zrR_~9|E+oW`s=Tgt?F`Zuf*w1-+wM`^Y-V@pWE+RH<7jrPCKTpRL@ z&y3+C%Z0aP+)NkQ#U?W_g(^IlAk_TROT;DA|K`ibX}lL(h0HIU|2Tn9YeCp}L^ z>YW{~CIyOwx_foK`n6NMarHqDwkB4E?g^z=-oJnE-Ew$OQSqMi*-t-y+{n`L$)BOU zy`9xSprW=mHbP5)@3UXu!@q|QJ73J_*P5w(%CAAbIom7<~Yf(d;uqRP%LQ}mkD zcZA2$L9=<$($^8G>x7p|d@<|qOQqbe z`&9caE`QFJdnv!Fzdc)izRNl3*4#D9zutUzKbcl=!SrE!-epL*OYJ9n+uv-Vr{ z;^&cTul!kXj@?FZZO-1SRap*`WEaJ;JlHw!@6C6asl^@0hJVfG6jm&9jZ404+7WuLS@Er~nqXviw%l@3YmE7NRm zX0?ii*e`6kl@ny1JVl^u_9}}-@83L)RbI`yGyOrj`uD26L2M@?bXd-`{jaDmEDS7K z(s5PixClqB`{Rhy^EyN~YxT7(dNxV^<3vOL<$hmu+NBCzIiam&QTJ0p#yKvjZ zg~wzr-cV=j+F#{$o-s)`mcu2v&mm7z`R?7jQ`eRMnAuRrWVN_ONj^|vPeJm2wWK%K zKYj=9bqHAc9XGFk4Z3v1{*lE?S+qK1nIKg&j$MyHYqhi|_~ znteoT`=dnHv-g-@WgdSP)@o3i=%-L~>UG1D*;5X>o`09Z_o_r)qK scalable/discord.svg - - + scalable/instances/chicken.svg scalable/instances/creeper.svg scalable/instances/enderpearl.svg scalable/instances/ftb_logo.svg - scalable/instances/flame.svg scalable/instances/gear.svg scalable/instances/herobrine.svg @@ -270,23 +268,78 @@ scalable/instances/skeleton.svg scalable/instances/squarecreeper.svg scalable/instances/steve.svg - - scalable/instances/brick.svg scalable/instances/diamond.svg scalable/instances/dirt.svg - scalable/instances/gold.svg scalable/instances/grass.svg + scalable/instances/brick.svg + scalable/instances/gold.svg scalable/instances/iron.svg scalable/instances/planks.svg scalable/instances/stone.svg scalable/instances/tnt.svg - scalable/instances/enderman.svg - scalable/instances/fox.svg scalable/instances/bee.svg - scalable/instances/prismlauncher.svg + + + 32x32/instances/chicken_legacy.png + 128x128/instances/chicken_legacy.png + + 32x32/instances/creeper_legacy.png + 128x128/instances/creeper_legacy.png + + 32x32/instances/enderpearl_legacy.png + 128x128/instances/enderpearl_legacy.png + + 32x32/instances/ftb_glow.png + 128x128/instances/ftb_glow.png + + 32x32/instances/ftb_logo_legacy.png + 128x128/instances/ftb_logo_legacy.png + + 128x128/instances/flame_legacy.png + + 32x32/instances/gear_legacy.png + 128x128/instances/gear_legacy.png + + 32x32/instances/herobrine_legacy.png + 128x128/instances/herobrine_legacy.png + + 32x32/instances/magitech_legacy.png + 128x128/instances/magitech_legacy.png + + 32x32/instances/meat_legacy.png + 128x128/instances/meat_legacy.png + + 32x32/instances/netherstar_legacy.png + 128x128/instances/netherstar_legacy.png + + 32x32/instances/skeleton_legacy.png + 128x128/instances/skeleton_legacy.png + + 32x32/instances/squarecreeper_legacy.png + 128x128/instances/squarecreeper_legacy.png + + 32x32/instances/steve_legacy.png + 128x128/instances/steve_legacy.png + + 32x32/instances/brick_legacy.png + 32x32/instances/diamond_legacy.png + 32x32/instances/dirt_legacy.png + 32x32/instances/gold_legacy.png + 32x32/instances/grass_legacy.png + 32x32/instances/iron_legacy.png + 32x32/instances/planks_legacy.png + 32x32/instances/stone_legacy.png + 32x32/instances/tnt_legacy.png + + 50x50/instances/enderman_legacy.png + + scalable/instances/prismlauncher.svg + scalable/instances/fox_legacy.svg + scalable/instances/bee_legacy.svg + scalable/delete.svg scalable/tag.svg diff --git a/launcher/resources/multimc/scalable/instances/bee_legacy.svg b/launcher/resources/multimc/scalable/instances/bee_legacy.svg new file mode 100644 index 000000000..49f216c8f --- /dev/null +++ b/launcher/resources/multimc/scalable/instances/bee_legacy.svg @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/launcher/resources/multimc/scalable/instances/fox.svg b/launcher/resources/multimc/scalable/instances/fox.svg index 687a5b09d..f4b2bf53e 100644 --- a/launcher/resources/multimc/scalable/instances/fox.svg +++ b/launcher/resources/multimc/scalable/instances/fox.svg @@ -35,23 +35,15 @@ y1="11" x2="171" y2="7" - gradientUnits="userSpaceOnUse" /> + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/launcher/resources/multimc/scalable/instances/meat.svg b/launcher/resources/multimc/scalable/instances/meat.svg index c13fa3714..52da5b1c4 100644 --- a/launcher/resources/multimc/scalable/instances/meat.svg +++ b/launcher/resources/multimc/scalable/instances/meat.svg @@ -72,7 +72,7 @@ x="397.64703" y="-389.8125" ry="4" - rx="0" + rx="4" transform="rotate(45)" /> Date: Tue, 22 Nov 2022 17:36:47 -0300 Subject: [PATCH 063/155] forgot ftb MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Santiago Cézar --- .../multimc/128x128/instances/ftb_glow.png | Bin 0 -> 12708 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 launcher/resources/multimc/128x128/instances/ftb_glow.png diff --git a/launcher/resources/multimc/128x128/instances/ftb_glow.png b/launcher/resources/multimc/128x128/instances/ftb_glow.png new file mode 100644 index 0000000000000000000000000000000000000000..86632b21ded4a18156a011115bdf671a8c998cce GIT binary patch literal 12708 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 AZ~y=R literal 0 HcmV?d00001 From 9daf2a29964d476f831480c0745cc53f72b67de8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Santiago=20C=C3=A9zar?= Date: Thu, 24 Nov 2022 19:40:03 -0300 Subject: [PATCH 064/155] resize to 24x24 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Santiago Cézar --- .../multimc/scalable/instances/bee.svg | 47 +++--- .../multimc/scalable/instances/brick.svg | 16 +- .../multimc/scalable/instances/chicken.svg | 49 +++--- .../multimc/scalable/instances/creeper.svg | 16 +- .../multimc/scalable/instances/diamond.svg | 16 +- .../multimc/scalable/instances/dirt.svg | 18 +-- .../multimc/scalable/instances/enderman.svg | 16 +- .../multimc/scalable/instances/enderpearl.svg | 29 ++-- .../multimc/scalable/instances/flame.svg | 23 +-- .../multimc/scalable/instances/fox.svg | 36 ++--- .../multimc/scalable/instances/ftb_logo.svg | 55 ++++--- .../multimc/scalable/instances/gear.svg | 16 +- .../multimc/scalable/instances/gold.svg | 16 +- .../multimc/scalable/instances/grass.svg | 16 +- .../multimc/scalable/instances/herobrine.svg | 57 +++---- .../multimc/scalable/instances/iron.svg | 16 +- .../multimc/scalable/instances/magitech.svg | 26 +-- .../multimc/scalable/instances/meat.svg | 18 +-- .../multimc/scalable/instances/netherstar.svg | 49 ++++-- .../multimc/scalable/instances/planks.svg | 16 +- .../multimc/scalable/instances/skeleton.svg | 16 +- .../scalable/instances/squarecreeper.svg | 16 +- .../multimc/scalable/instances/steve.svg | 152 +++++++++--------- .../multimc/scalable/instances/stone.svg | 16 +- .../multimc/scalable/instances/tnt.svg | 16 +- 25 files changed, 393 insertions(+), 374 deletions(-) diff --git a/launcher/resources/multimc/scalable/instances/bee.svg b/launcher/resources/multimc/scalable/instances/bee.svg index fef2aeb33..110b224ce 100644 --- a/launcher/resources/multimc/scalable/instances/bee.svg +++ b/launcher/resources/multimc/scalable/instances/bee.svg @@ -2,10 +2,10 @@ Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher + width="24" + height="24" + x="4" + y="4" /> diff --git a/launcher/resources/multimc/scalable/instances/brick.svg b/launcher/resources/multimc/scalable/instances/brick.svg index 8264bb43d..b600eba8b 100644 --- a/launcher/resources/multimc/scalable/instances/brick.svg +++ b/launcher/resources/multimc/scalable/instances/brick.svg @@ -2,10 +2,10 @@ Prism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher Prism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher diff --git a/launcher/resources/multimc/scalable/instances/creeper.svg b/launcher/resources/multimc/scalable/instances/creeper.svg index 38f7ac7a9..4a9fe380f 100644 --- a/launcher/resources/multimc/scalable/instances/creeper.svg +++ b/launcher/resources/multimc/scalable/instances/creeper.svg @@ -2,10 +2,10 @@ Prism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher + width="24" + height="24" + x="100" + y="4" /> diff --git a/launcher/resources/multimc/scalable/instances/diamond.svg b/launcher/resources/multimc/scalable/instances/diamond.svg index e1e1380c2..1d490b918 100644 --- a/launcher/resources/multimc/scalable/instances/diamond.svg +++ b/launcher/resources/multimc/scalable/instances/diamond.svg @@ -2,10 +2,10 @@ Prism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher diff --git a/launcher/resources/multimc/scalable/instances/enderman.svg b/launcher/resources/multimc/scalable/instances/enderman.svg index 483a002eb..29f25a2f2 100644 --- a/launcher/resources/multimc/scalable/instances/enderman.svg +++ b/launcher/resources/multimc/scalable/instances/enderman.svg @@ -2,10 +2,10 @@ Prism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher + width="24" + height="24" + x="228" + y="4" /> diff --git a/launcher/resources/multimc/scalable/instances/enderpearl.svg b/launcher/resources/multimc/scalable/instances/enderpearl.svg index dc4b80f19..e4c1e1041 100644 --- a/launcher/resources/multimc/scalable/instances/enderpearl.svg +++ b/launcher/resources/multimc/scalable/instances/enderpearl.svg @@ -2,10 +2,10 @@ </defs><title id="title132">Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher + width="24" + height="24" + x="260" + y="4" /> diff --git a/launcher/resources/multimc/scalable/instances/flame.svg b/launcher/resources/multimc/scalable/instances/flame.svg index b15fa3ff2..775914b89 100644 --- a/launcher/resources/multimc/scalable/instances/flame.svg +++ b/launcher/resources/multimc/scalable/instances/flame.svg @@ -2,10 +2,10 @@ Prism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher + d="M 305.94922,10 C 304.86851,10.02738 304,10.912691 304,12 v 1 a 1,1 0 0 1 -1,-1 v 2 c 0,0.552284 0.44772,1 1,1 0,0.552284 -0.44772,1 -1,1 -0.55228,0 -1,-0.447716 -1,-1 -0.55228,0 -1,0.447716 -1,1 0,1.104568 0.89543,2 2,2 0.55228,0 1,0.447716 1,1 0,-0.552284 0.44772,-1 1,-1 h 1 c 0.55228,0 1,-0.447716 1,-1 v -1 c 0,0.552284 -0.44772,1 -1,1 -0.55228,0 -1,-0.447716 -1,-1 0.55228,0 1,-0.447716 1,-1 v -1 c 0,-0.552284 -0.44772,-1 -1,-1 v -1 c 0,-1.087309 0.86851,-1.97262 1.94922,-2 H 306 c -0.0173,0 -0.0336,-4.35e-4 -0.0508,0 z" /> diff --git a/launcher/resources/multimc/scalable/instances/fox.svg b/launcher/resources/multimc/scalable/instances/fox.svg index f4b2bf53e..95ca6ef91 100644 --- a/launcher/resources/multimc/scalable/instances/fox.svg +++ b/launcher/resources/multimc/scalable/instances/fox.svg @@ -2,10 +2,10 @@ Prism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher + width="24" + height="24" + x="164" + y="4" /> diff --git a/launcher/resources/multimc/scalable/instances/ftb_logo.svg b/launcher/resources/multimc/scalable/instances/ftb_logo.svg index edaed84e2..85e8295eb 100644 --- a/launcher/resources/multimc/scalable/instances/ftb_logo.svg +++ b/launcher/resources/multimc/scalable/instances/ftb_logo.svg @@ -2,10 +2,10 @@ Prism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher diff --git a/launcher/resources/multimc/scalable/instances/gear.svg b/launcher/resources/multimc/scalable/instances/gear.svg index 4bb91e085..b2923d676 100644 --- a/launcher/resources/multimc/scalable/instances/gear.svg +++ b/launcher/resources/multimc/scalable/instances/gear.svg @@ -2,10 +2,10 @@ Prism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher + width="24" + height="24" + x="356" + y="4" /> diff --git a/launcher/resources/multimc/scalable/instances/gold.svg b/launcher/resources/multimc/scalable/instances/gold.svg index 0dd246c57..f1513d70a 100644 --- a/launcher/resources/multimc/scalable/instances/gold.svg +++ b/launcher/resources/multimc/scalable/instances/gold.svg @@ -2,10 +2,10 @@ Prism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher Prism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher Prism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher diff --git a/launcher/resources/multimc/scalable/instances/iron.svg b/launcher/resources/multimc/scalable/instances/iron.svg index b20426944..6a6faf77f 100644 --- a/launcher/resources/multimc/scalable/instances/iron.svg +++ b/launcher/resources/multimc/scalable/instances/iron.svg @@ -2,10 +2,10 @@ Prism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher Prism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher + width="24" + height="24" + x="516" + y="4" /> diff --git a/launcher/resources/multimc/scalable/instances/meat.svg b/launcher/resources/multimc/scalable/instances/meat.svg index 52da5b1c4..0fbfe5a45 100644 --- a/launcher/resources/multimc/scalable/instances/meat.svg +++ b/launcher/resources/multimc/scalable/instances/meat.svg @@ -2,10 +2,10 @@ Prism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher + width="24" + height="24" + x="548" + y="4" /> diff --git a/launcher/resources/multimc/scalable/instances/netherstar.svg b/launcher/resources/multimc/scalable/instances/netherstar.svg index 152b5b1c5..a5d9606eb 100644 --- a/launcher/resources/multimc/scalable/instances/netherstar.svg +++ b/launcher/resources/multimc/scalable/instances/netherstar.svg @@ -2,10 +2,10 @@ Prism Launcher LogoPrism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher + width="24" + height="24" + x="612" + y="4" /> diff --git a/launcher/resources/multimc/scalable/instances/planks.svg b/launcher/resources/multimc/scalable/instances/planks.svg index aad6b8d26..8febfa6bd 100644 --- a/launcher/resources/multimc/scalable/instances/planks.svg +++ b/launcher/resources/multimc/scalable/instances/planks.svg @@ -2,10 +2,10 @@ Prism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher Prism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher + width="24" + height="24" + x="644" + y="4" /> diff --git a/launcher/resources/multimc/scalable/instances/squarecreeper.svg b/launcher/resources/multimc/scalable/instances/squarecreeper.svg index 7b9cffdd5..ddb9aec8c 100644 --- a/launcher/resources/multimc/scalable/instances/squarecreeper.svg +++ b/launcher/resources/multimc/scalable/instances/squarecreeper.svg @@ -2,10 +2,10 @@ Prism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher Prism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher + y="17" /> diff --git a/launcher/resources/multimc/scalable/instances/stone.svg b/launcher/resources/multimc/scalable/instances/stone.svg index 5f8bd526a..6df534d22 100644 --- a/launcher/resources/multimc/scalable/instances/stone.svg +++ b/launcher/resources/multimc/scalable/instances/stone.svg @@ -2,10 +2,10 @@ Prism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher Prism Launcher Logo19/10/2022Prism LauncherAutiOne, Boba, ely, Fulmine, gon sawa, Pankakes, tobimori, Zekehttps://github.com/PrismLauncher/PrismLauncherCC BY-SA 4.0Prism Launcher + width="24" + height="24" + x="804" + y="4" /> From 71d35dc70b58b14820abeeffd8a8aed067379c75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Santiago=20C=C3=A9zar?= Date: Thu, 24 Nov 2022 19:43:24 -0300 Subject: [PATCH 065/155] meat is now round MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Santiago Cézar --- .../multimc/scalable/instances/meat.svg | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/launcher/resources/multimc/scalable/instances/meat.svg b/launcher/resources/multimc/scalable/instances/meat.svg index 0fbfe5a45..36f0551b0 100644 --- a/launcher/resources/multimc/scalable/instances/meat.svg +++ b/launcher/resources/multimc/scalable/instances/meat.svg @@ -8,12 +8,34 @@ viewBox="0 0 24 24" id="svg168" xml:space="preserve" + sodipodi:docname="meat.svg" + inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cc="http://creativecommons.org/ns#" - xmlns:dc="http://purl.org/dc/elements/1.1/"> Date: Fri, 25 Nov 2022 14:18:19 -0300 Subject: [PATCH 066/155] remove unused ftb icon MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Santiago Cézar --- .../128x128/instances/ftb_glow_legacy.png | Bin 12708 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 launcher/resources/multimc/128x128/instances/ftb_glow_legacy.png diff --git a/launcher/resources/multimc/128x128/instances/ftb_glow_legacy.png b/launcher/resources/multimc/128x128/instances/ftb_glow_legacy.png deleted file mode 100644 index 86632b21ded4a18156a011115bdf671a8c998cce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12708 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 AZ~y=R From c90f2c3ac6d12624ac596a68cf5a9f4da92eb3f6 Mon Sep 17 00:00:00 2001 From: DioEgizio <83089242+DioEgizio@users.noreply.github.com> Date: Sat, 26 Nov 2022 15:05:08 +0100 Subject: [PATCH 067/155] fix: use monochrome icon for breeze Signed-off-by: DioEgizio <83089242+DioEgizio@users.noreply.github.com> --- .../breeze_dark/scalable/shortcut.svg | 31 ++++++++++--------- .../breeze_light/scalable/shortcut.svg | 31 ++++++++++--------- 2 files changed, 34 insertions(+), 28 deletions(-) diff --git a/launcher/resources/breeze_dark/scalable/shortcut.svg b/launcher/resources/breeze_dark/scalable/shortcut.svg index 2f24b8c08..5559be1df 100644 --- a/launcher/resources/breeze_dark/scalable/shortcut.svg +++ b/launcher/resources/breeze_dark/scalable/shortcut.svg @@ -1,15 +1,18 @@ - - - - - - - - + + + + + + + diff --git a/launcher/resources/breeze_light/scalable/shortcut.svg b/launcher/resources/breeze_light/scalable/shortcut.svg index 96def1f8c..426769d17 100644 --- a/launcher/resources/breeze_light/scalable/shortcut.svg +++ b/launcher/resources/breeze_light/scalable/shortcut.svg @@ -1,15 +1,18 @@ - - - - - - - - + + + + + + + From 6c09efd6306705fd4cfebdb66710373c90f5ab3a Mon Sep 17 00:00:00 2001 From: DioEgizio <83089242+DioEgizio@users.noreply.github.com> Date: Sun, 27 Nov 2022 15:24:15 +0100 Subject: [PATCH 068/155] fix: use qt 6.4.0 on windows msvc for now qt 6.4.1 has a very bad scaling regression Signed-off-by: DioEgizio <83089242+DioEgizio@users.noreply.github.com> --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f07a86e6b..792215314 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -67,7 +67,7 @@ jobs: qt_ver: 6 qt_host: windows qt_arch: '' - qt_version: '6.4.1' + qt_version: '6.4.0' qt_modules: 'qt5compat qtimageformats' qt_tools: '' From 236c196e681dcbf0547677260d141a7e48047b43 Mon Sep 17 00:00:00 2001 From: Sefa Eyeoglu Date: Sun, 27 Nov 2022 18:38:56 +0100 Subject: [PATCH 069/155] fix: improve code readability Signed-off-by: Sefa Eyeoglu --- launcher/ui/MainWindow.cpp | 56 ++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 29 deletions(-) diff --git a/launcher/ui/MainWindow.cpp b/launcher/ui/MainWindow.cpp index 5d2a07f32..c3c4d10f9 100644 --- a/launcher/ui/MainWindow.cpp +++ b/launcher/ui/MainWindow.cpp @@ -1801,39 +1801,37 @@ void MainWindow::on_actionAddInstance_triggered() void MainWindow::droppedURLs(QList urls) { + // NOTE: This loop only processes one dropped file! for (auto& url : urls) { - if (url.isLocalFile()) { - auto localFileName = url.toLocalFile(); - QFileInfo localFileInfo(localFileName); - - ImportResourcePackDialog dlg(this); - - if (ResourcePackUtils::validate(localFileInfo)) { - dlg.exec(); - - if (dlg.result() == QDialog::Accepted) { - qDebug() << "Selected instance to import resource pack into: " << dlg.selectedInstanceKey; - auto instance = APPLICATION->instances()->getInstanceById(dlg.selectedInstanceKey); - auto instanceButBuffed = std::dynamic_pointer_cast(instance); - instanceButBuffed->resourcePackList()->installResource(localFileName); - } - } else if (TexturePackUtils::validate(localFileInfo)) { - dlg.exec(); - - if (dlg.result() == QDialog::Accepted) { - qDebug() << "Selected instance to import texture pack into: " << dlg.selectedInstanceKey; - auto instance = APPLICATION->instances()->getInstanceById(dlg.selectedInstanceKey); - auto instanceButBuffed = std::dynamic_pointer_cast(instance); - instanceButBuffed->texturePackList()->installResource(localFileName); - } - } else { - addInstance(localFileName); - } - } else { + if (!url.isLocalFile()) { // probably instance/modpack addInstance(url.toString()); + break; } - // Only process one dropped file... + auto localFileName = url.toLocalFile(); + QFileInfo localFileInfo(localFileName); + + bool isResourcePack = ResourcePackUtils::validate(localFileInfo); + bool isTexturePack = TexturePackUtils::validate(localFileInfo); + + if (!isResourcePack && !isTexturePack) { // probably instance/modpack + addInstance(localFileName); + break; + } + + ImportResourcePackDialog dlg(this); + + if (dlg.exec() != QDialog::Accepted) + break; + + qDebug() << "Adding resource/texture pack" << localFileName << "to" << dlg.selectedInstanceKey; + + auto inst = APPLICATION->instances()->getInstanceById(dlg.selectedInstanceKey); + auto minecraftInst = std::dynamic_pointer_cast(inst); + if (isResourcePack) + minecraftInst->resourcePackList()->installResource(localFileName); + else if (isTexturePack) + minecraftInst->texturePackList()->installResource(localFileName); break; } } From 8cac61f0bea17036346438761728c3b7bef4fbeb Mon Sep 17 00:00:00 2001 From: Sefa Eyeoglu Date: Sun, 27 Nov 2022 18:41:52 +0100 Subject: [PATCH 070/155] fix: check resource pack validity solely using pack format Signed-off-by: Sefa Eyeoglu --- launcher/minecraft/mod/ResourcePack.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/launcher/minecraft/mod/ResourcePack.cpp b/launcher/minecraft/mod/ResourcePack.cpp index ef0370d02..4a9ad21bf 100644 --- a/launcher/minecraft/mod/ResourcePack.cpp +++ b/launcher/minecraft/mod/ResourcePack.cpp @@ -117,5 +117,5 @@ bool ResourcePack::applyFilter(QRegularExpression filter) const bool ResourcePack::valid() const { - return s_pack_format_versions.contains(m_pack_format); + return m_pack_format != 0; } From 3cbf8d4993b8c336feb65e6371b777ab0d7865ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Santiago=20C=C3=A9zar?= Date: Sun, 27 Nov 2022 16:24:45 -0300 Subject: [PATCH 071/155] resolving reviews MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Santiago Cézar --- launcher/resources/multimc/index.theme | 2 +- launcher/resources/multimc/multimc.qrc | 8 +++----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/launcher/resources/multimc/index.theme b/launcher/resources/multimc/index.theme index 1f72c0a76..070e23f10 100644 --- a/launcher/resources/multimc/index.theme +++ b/launcher/resources/multimc/index.theme @@ -2,7 +2,7 @@ Name=multimc Comment=Default Icons Inherits=default -Directories=8x8,16x16,22x22,24x24,32x32,48x48,64x64,256x256,scalable,scalable/instances +Directories=8x8,16x16,22x22,24x24,32x32,32x32/instances,48x48,50x50/instances,64x64,128x128/instances,256x256,scalable,scalable/instances [8x8] Size=8 diff --git a/launcher/resources/multimc/multimc.qrc b/launcher/resources/multimc/multimc.qrc index 0627fc47f..08b86406e 100644 --- a/launcher/resources/multimc/multimc.qrc +++ b/launcher/resources/multimc/multimc.qrc @@ -6,9 +6,6 @@ scalable/reddit-alien.svg - - scalable/instances/flame.svg - scalable/launcher.svg @@ -254,7 +251,8 @@ scalable/discord.svg - + + scalable/instances/flame.svg scalable/instances/chicken.svg scalable/instances/creeper.svg scalable/instances/enderpearl.svg @@ -285,7 +283,7 @@ 32x32/instances/chicken_legacy.png 128x128/instances/chicken_legacy.png - + 32x32/instances/creeper_legacy.png 128x128/instances/creeper_legacy.png From a5b0b4800a592172ba4ff6c6421bc0f0abdef5e0 Mon Sep 17 00:00:00 2001 From: Sefa Eyeoglu Date: Sun, 27 Nov 2022 23:10:32 +0100 Subject: [PATCH 072/155] fix: make resource buttons work when instance is running Signed-off-by: Sefa Eyeoglu --- launcher/ui/pages/instance/ExternalResourcesPage.cpp | 11 ----------- launcher/ui/pages/instance/ExternalResourcesPage.h | 1 - launcher/ui/pages/instance/ModFolderPage.cpp | 2 +- launcher/ui/pages/instance/ModFolderPage.h | 2 +- 4 files changed, 2 insertions(+), 14 deletions(-) diff --git a/launcher/ui/pages/instance/ExternalResourcesPage.cpp b/launcher/ui/pages/instance/ExternalResourcesPage.cpp index b6c873cc2..5c919573f 100644 --- a/launcher/ui/pages/instance/ExternalResourcesPage.cpp +++ b/launcher/ui/pages/instance/ExternalResourcesPage.cpp @@ -14,8 +14,6 @@ ExternalResourcesPage::ExternalResourcesPage(BaseInstance* instance, std::shared { ui->setupUi(this); - ExternalResourcesPage::runningStateChanged(m_instance && m_instance->isRunning()); - ui->actionsToolbar->insertSpacer(ui->actionViewConfigs); m_filterModel = model->createFilterProxyModel(this); @@ -45,7 +43,6 @@ ExternalResourcesPage::ExternalResourcesPage(BaseInstance* instance, std::shared auto selection_model = ui->treeView->selectionModel(); connect(selection_model, &QItemSelectionModel::currentChanged, this, &ExternalResourcesPage::current); connect(ui->filterEdit, &QLineEdit::textChanged, this, &ExternalResourcesPage::filterTextChanged); - connect(m_instance, &BaseInstance::runningStatusChanged, this, &ExternalResourcesPage::runningStateChanged); } ExternalResourcesPage::~ExternalResourcesPage() @@ -97,14 +94,6 @@ void ExternalResourcesPage::filterTextChanged(const QString& newContents) m_filterModel->setFilterRegularExpression(m_viewFilter); } -void ExternalResourcesPage::runningStateChanged(bool running) -{ - if (m_controlsEnabled == !running) - return; - - m_controlsEnabled = !running; -} - bool ExternalResourcesPage::shouldDisplay() const { return true; diff --git a/launcher/ui/pages/instance/ExternalResourcesPage.h b/launcher/ui/pages/instance/ExternalResourcesPage.h index 8e352cef9..11058bf6c 100644 --- a/launcher/ui/pages/instance/ExternalResourcesPage.h +++ b/launcher/ui/pages/instance/ExternalResourcesPage.h @@ -47,7 +47,6 @@ class ExternalResourcesPage : public QMainWindow, public BasePage { protected slots: void itemActivated(const QModelIndex& index); void filterTextChanged(const QString& newContents); - virtual void runningStateChanged(bool running); virtual void addItem(); virtual void removeItem(); diff --git a/launcher/ui/pages/instance/ModFolderPage.cpp b/launcher/ui/pages/instance/ModFolderPage.cpp index f0106066a..0a2e6155e 100644 --- a/launcher/ui/pages/instance/ModFolderPage.cpp +++ b/launcher/ui/pages/instance/ModFolderPage.cpp @@ -108,13 +108,13 @@ ModFolderPage::ModFolderPage(BaseInstance* inst, std::shared_ptr disconnect(mods.get(), &ModFolderModel::updateFinished, this, 0); }); + connect(m_instance, &BaseInstance::runningStatusChanged, this, &ModFolderPage::runningStateChanged); ModFolderPage::runningStateChanged(m_instance && m_instance->isRunning()); } } void ModFolderPage::runningStateChanged(bool running) { - ExternalResourcesPage::runningStateChanged(running); ui->actionDownloadItem->setEnabled(!running); ui->actionUpdateItem->setEnabled(!running); ui->actionAddItem->setEnabled(!running); diff --git a/launcher/ui/pages/instance/ModFolderPage.h b/launcher/ui/pages/instance/ModFolderPage.h index c9a55bde1..f20adf34d 100644 --- a/launcher/ui/pages/instance/ModFolderPage.h +++ b/launcher/ui/pages/instance/ModFolderPage.h @@ -53,12 +53,12 @@ class ModFolderPage : public ExternalResourcesPage { virtual QString helpPage() const override { return "Loader-mods"; } virtual bool shouldDisplay() const override; - void runningStateChanged(bool running) override; public slots: bool onSelectionChanged(const QModelIndex& current, const QModelIndex& previous) override; private slots: + void runningStateChanged(bool running); void removeItem() override; void installMods(); From 4e27e132a06974854f1c49dd8fb7a776915f5d03 Mon Sep 17 00:00:00 2001 From: flow Date: Mon, 28 Nov 2022 12:02:38 -0300 Subject: [PATCH 073/155] fix: don't disable interaction on non-mod models when inst. is running It is still useful for mods though, since we don't wnt to allow disabling mods when the instance is running, as that wouldn't affect the running instance, possibly causing confusion Signed-off-by: flow --- launcher/minecraft/MinecraftInstance.cpp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/launcher/minecraft/MinecraftInstance.cpp b/launcher/minecraft/MinecraftInstance.cpp index 70d0b9492..a3adb2682 100644 --- a/launcher/minecraft/MinecraftInstance.cpp +++ b/launcher/minecraft/MinecraftInstance.cpp @@ -1110,8 +1110,6 @@ std::shared_ptr MinecraftInstance::resourcePackList() c if (!m_resource_pack_list) { m_resource_pack_list.reset(new ResourcePackFolderModel(resourcePacksDir())); - m_resource_pack_list->enableInteraction(!isRunning()); - connect(this, &BaseInstance::runningStatusChanged, m_resource_pack_list.get(), &ResourcePackFolderModel::disableInteraction); } return m_resource_pack_list; } @@ -1121,8 +1119,6 @@ std::shared_ptr MinecraftInstance::texturePackList() con if (!m_texture_pack_list) { m_texture_pack_list.reset(new TexturePackFolderModel(texturePacksDir())); - m_texture_pack_list->disableInteraction(isRunning()); - connect(this, &BaseInstance::runningStatusChanged, m_texture_pack_list.get(), &ModFolderModel::disableInteraction); } return m_texture_pack_list; } @@ -1132,8 +1128,6 @@ std::shared_ptr MinecraftInstance::shaderPackList() const if (!m_shader_pack_list) { m_shader_pack_list.reset(new ShaderPackFolderModel(shaderPacksDir())); - m_shader_pack_list->disableInteraction(isRunning()); - connect(this, &BaseInstance::runningStatusChanged, m_shader_pack_list.get(), &ModFolderModel::disableInteraction); } return m_shader_pack_list; } From 31dc82b1a64fef40ab8fadbbb80d7641456bbb0a Mon Sep 17 00:00:00 2001 From: TheKodeToad Date: Tue, 29 Nov 2022 09:43:08 +0000 Subject: [PATCH 074/155] Make requested changes Signed-off-by: TheKodeToad --- launcher/minecraft/PackProfile.cpp | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/launcher/minecraft/PackProfile.cpp b/launcher/minecraft/PackProfile.cpp index bbdf51d88..43fa3f8d6 100644 --- a/launcher/minecraft/PackProfile.cpp +++ b/launcher/minecraft/PackProfile.cpp @@ -838,15 +838,12 @@ bool PackProfile::installJarMods_internal(QStringList filepaths) QFileInfo sourceInfo(filepath); QString id = QUuid::createUuid().toString(QUuid::WithoutBraces); QString target_filename = id + ".jar"; - QString target_id = "org.multimc.jarmod." + id; + QString target_id = "custom.jarmod." + id; QString target_name = sourceInfo.completeBaseName() + " (jar mod)"; QString finalPath = FS::PathCombine(d->m_instance->jarModsDir(), target_filename); QFileInfo targetInfo(finalPath); - if(targetInfo.exists()) - { - return false; - } + Q_ASSERT(!targetInfo.exists()); if (!QFile::copy(sourceInfo.absoluteFilePath(),QFileInfo(finalPath).absoluteFilePath())) { @@ -855,7 +852,7 @@ bool PackProfile::installJarMods_internal(QStringList filepaths) auto f = std::make_shared(); auto jarMod = std::make_shared(); - jarMod->setRawName(GradleSpecifier("org.multimc.jarmods:" + id + ":1")); + jarMod->setRawName(GradleSpecifier("custom.jarmods:" + id + ":1")); jarMod->setFilename(target_filename); jarMod->setDisplayName(sourceInfo.completeBaseName()); jarMod->setHint("local"); @@ -895,7 +892,7 @@ bool PackProfile::installCustomJar_internal(QString filepath) return false; } - auto specifier = GradleSpecifier("org.multimc:customjar:1"); + auto specifier = GradleSpecifier("custom:customjar:1"); QFileInfo sourceInfo(filepath); QString target_filename = specifier.getFileName(); QString target_id = specifier.artifactId(); @@ -957,13 +954,12 @@ bool PackProfile::installAgents_internal(QStringList filepaths) const QFileInfo sourceInfo(source); const QString id = QUuid::createUuid().toString(QUuid::WithoutBraces); const QString targetBaseName = id + ".jar"; - const QString targetId = "org.prismlauncher.agent." + id; + const QString targetId = "custom.agent." + id; const QString targetName = sourceInfo.completeBaseName() + " (agent)"; const QString target = FS::PathCombine(d->m_instance->getLocalLibraryPath(), targetBaseName); const QFileInfo targetInfo(target); - if (targetInfo.exists()) - return false; + Q_ASSERT(!targetInfo.exists()); if (!QFile::copy(source, target)) return false; @@ -972,7 +968,7 @@ bool PackProfile::installAgents_internal(QStringList filepaths) auto agent = std::make_shared(); - agent->setRawName("org.prismlauncher.agents:" + id + ":1"); + agent->setRawName("custom.agents:" + id + ":1"); agent->setFilename(targetBaseName); agent->setDisplayName(sourceInfo.completeBaseName()); agent->setHint("local"); From 52d06ed8147bffc191d01c9eddc9aec050a5998d Mon Sep 17 00:00:00 2001 From: Sefa Eyeoglu Date: Tue, 29 Nov 2022 20:07:00 +0100 Subject: [PATCH 075/155] chore: move instance_icons.svg Signed-off-by: Sefa Eyeoglu --- {launcher/resources => program_info}/instance_icons.svg | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {launcher/resources => program_info}/instance_icons.svg (100%) diff --git a/launcher/resources/instance_icons.svg b/program_info/instance_icons.svg similarity index 100% rename from launcher/resources/instance_icons.svg rename to program_info/instance_icons.svg From 5efa725e92e87497287408c8d4d011e63aa214bb Mon Sep 17 00:00:00 2001 From: DioEgizio <83089242+DioEgizio@users.noreply.github.com> Date: Sat, 5 Nov 2022 08:25:10 +0100 Subject: [PATCH 076/155] feat(actions) add arm64 build Signed-off-by: DioEgizio <83089242+DioEgizio@users.noreply.github.com> --- .github/workflows/build.yml | 53 ++++++++++++++++++++++++++++++------- 1 file changed, 43 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 792215314..d957f6275 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -71,6 +71,18 @@ jobs: qt_modules: 'qt5compat qtimageformats' qt_tools: '' + - os: windows-2022 + name: "Windows-MSVC-arm64" + msystem: '' + architecture: 'arm64' + vcvars_arch: 'amd64_arm64' + qt_ver: 6 + qt_host: windows + qt_arch: 'win64_msvc2019_arm64' + qt_version: '6.4.0' + qt_modules: 'qt5compat qtimageformats' + qt_tools: '' + - os: macos-12 name: macOS macosx_deployment_target: 10.15 @@ -139,7 +151,7 @@ jobs: if: (runner.os != 'Windows' || matrix.msystem == '') && inputs.build_type == 'Debug' uses: hendrikmuhs/ccache-action@v1.2.5 with: - key: ${{ matrix.os }}-qt${{ matrix.qt_ver }} + key: ${{ matrix.os }}-qt${{ matrix.qt_ver }}-${{ matrix.architecture }} - name: Setup ccache (Windows MinGW-w64) if: runner.os == 'Windows' && matrix.msystem != '' && inputs.build_type == 'Debug' @@ -188,8 +200,23 @@ jobs: if: runner.os == 'Linux' && matrix.qt_ver != 6 run: | sudo apt-get -y install qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools libqt5core5a libqt5network5 libqt5gui5 - - - name: Install Qt (macOS, AppImage & Windows MSVC) + + - name: Install host Qt (Windows MSVC arm64) + if: runner.os == 'Windows' && matrix.architecture == 'arm64' + uses: jurplel/install-qt-action@v3 + with: + version: ${{ matrix.qt_version }} + host: 'windows' + target: 'desktop' + arch: '' + modules: ${{ matrix.qt_modules }} + tools: ${{ matrix.qt_tools }} + cache: ${{ inputs.is_qt_cached }} + cache-key-prefix: host-qt-arm64-windows + dir: ${{ github.workspace }}\HostQt + set-env: false + + - name: Install Qt (macOS, Linux, Qt 6 & Windows MSVC) if: runner.os == 'Linux' && matrix.qt_ver == 6 || runner.os == 'macOS' || (runner.os == 'Windows' && matrix.msystem == '') uses: jurplel/install-qt-action@v3 with: @@ -201,6 +228,13 @@ jobs: tools: ${{ matrix.qt_tools }} cache: ${{ inputs.is_qt_cached }} + - name: Install MSVC (Windows MSVC) + if: runner.os == 'Windows' && matrix.msystem == '' + uses: ilammy/msvc-dev-cmd@v1 + with: + vsversion: 2022 + arch: ${{ matrix.vcvars_arch }} + - name: Prepare AppImage (Linux) if: runner.os == 'Linux' && matrix.qt_ver != 5 run: | @@ -210,6 +244,11 @@ jobs: ${{ github.workspace }}/.github/scripts/prepare_JREs.sh + - name: Add QT_HOST_PATH var (Windows MSVC arm64) + if: runner.os == 'Windows' && matrix.architecture == 'arm64' + run: | + echo "QT_HOST_PATH=${{ github.workspace }}\HostQt\Qt\${{ matrix.qt_version }}\msvc2019_64" >> $env:GITHUB_ENV + ## # CONFIGURE ## @@ -286,7 +325,7 @@ jobs: ctest -E "^example64|example$" --test-dir build --output-on-failure - name: Test (Windows MSVC) - if: runner.os == 'Windows' && matrix.msystem == '' + if: runner.os == 'Windows' && matrix.msystem == '' && matrix.architecture != 'arm64' run: | ctest -E "^example64|example$" --test-dir build --output-on-failure -C ${{ inputs.build_type }} @@ -324,12 +363,6 @@ jobs: EOF fi - - name: Add VC Enviroment Variables - if: runner.os == 'Windows' && matrix.msystem == '' - uses: ilammy/msvc-dev-cmd@v1 - with: - arch: ${{ matrix.vcvars_arch }} - - name: Package (Windows MinGW-w64) if: runner.os == 'Windows' && matrix.msystem != '' shell: msys2 {0} From efef2e95ab63fa06d0d46506aa3af3e096fb1589 Mon Sep 17 00:00:00 2001 From: TheLastRar Date: Thu, 24 Nov 2022 11:53:29 +0000 Subject: [PATCH 077/155] Use ECMQueryQt Only with Qt5 Qt6 provides CMake variables for the paths we need Signed-off-by: TheLastRar --- CMakeLists.txt | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f04b733be..4a80e87bc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -235,11 +235,18 @@ else() message(FATAL_ERROR "Qt version ${Launcher_QT_VERSION_MAJOR} is not supported") endif() -include(ECMQueryQt) -ecm_query_qt(QT_PLUGINS_DIR QT_INSTALL_PLUGINS) -ecm_query_qt(QT_LIBS_DIR QT_INSTALL_LIBS) -ecm_query_qt(QT_LIBEXECS_DIR QT_INSTALL_LIBEXECS) -ecm_query_qt(QT_DATA_DIR QT_HOST_DATA) +if(Launcher_QT_VERSION_MAJOR EQUAL 5) + include(ECMQueryQt) + ecm_query_qt(QT_PLUGINS_DIR QT_INSTALL_PLUGINS) + ecm_query_qt(QT_LIBS_DIR QT_INSTALL_LIBS) + ecm_query_qt(QT_LIBEXECS_DIR QT_INSTALL_LIBEXECS) + ecm_query_qt(QT_DATA_DIR QT_HOST_DATA) +else() + set(QT_PLUGINS_DIR ${QT${QT_VERSION_MAJOR}_INSTALL_PREFIX}/${QT${QT_VERSION_MAJOR}_INSTALL_PLUGINS}) + set(QT_LIBS_DIR ${QT${QT_VERSION_MAJOR}_INSTALL_PREFIX}/${QT${QT_VERSION_MAJOR}_INSTALL_LIBS}) + set(QT_LIBEXECS_DIR ${QT${QT_VERSION_MAJOR}_INSTALL_PREFIX}/${QT${QT_VERSION_MAJOR}_INSTALL_LIBEXECS}) + set(QT_DATA_DIR ${QT${QT_VERSION_MAJOR}_INSTALL_PREFIX}/${QT${QT_VERSION_MAJOR}_INSTALL_DATA}) +endif() set(QT_MKSPECS_DIR ${QT_DATA_DIR}/mkspecs) # NOTE: Qt 6 already sets this by default From 94d164c0f2a2ab80515351d422cefffbdbf6c910 Mon Sep 17 00:00:00 2001 From: TheLastRar Date: Thu, 24 Nov 2022 13:09:17 +0000 Subject: [PATCH 078/155] Remove unused QT_DATA_DIR/QT_MKSPECS_DIR Signed-off-by: TheLastRar --- CMakeLists.txt | 3 --- 1 file changed, 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4a80e87bc..5c326cfa4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -240,14 +240,11 @@ if(Launcher_QT_VERSION_MAJOR EQUAL 5) ecm_query_qt(QT_PLUGINS_DIR QT_INSTALL_PLUGINS) ecm_query_qt(QT_LIBS_DIR QT_INSTALL_LIBS) ecm_query_qt(QT_LIBEXECS_DIR QT_INSTALL_LIBEXECS) - ecm_query_qt(QT_DATA_DIR QT_HOST_DATA) else() set(QT_PLUGINS_DIR ${QT${QT_VERSION_MAJOR}_INSTALL_PREFIX}/${QT${QT_VERSION_MAJOR}_INSTALL_PLUGINS}) set(QT_LIBS_DIR ${QT${QT_VERSION_MAJOR}_INSTALL_PREFIX}/${QT${QT_VERSION_MAJOR}_INSTALL_LIBS}) set(QT_LIBEXECS_DIR ${QT${QT_VERSION_MAJOR}_INSTALL_PREFIX}/${QT${QT_VERSION_MAJOR}_INSTALL_LIBEXECS}) - set(QT_DATA_DIR ${QT${QT_VERSION_MAJOR}_INSTALL_PREFIX}/${QT${QT_VERSION_MAJOR}_INSTALL_DATA}) endif() -set(QT_MKSPECS_DIR ${QT_DATA_DIR}/mkspecs) # NOTE: Qt 6 already sets this by default if (Qt5_POSITION_INDEPENDENT_CODE) From 24193163e102c7421261497b42bb44d22bbf09ef Mon Sep 17 00:00:00 2001 From: TheLastRar Date: Fri, 25 Nov 2022 03:54:15 +0000 Subject: [PATCH 079/155] Maybe fix ResourceFolderModel Clang64 test failure Previously this test would fail sometimes without including ECMQueryQt Signed-off-by: TheLastRar --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5c326cfa4..2bdd4811d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -221,7 +221,7 @@ if(Launcher_QT_VERSION_MAJOR EQUAL 5) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DUNICODE -D_UNICODE") elseif(Launcher_QT_VERSION_MAJOR EQUAL 6) set(QT_VERSION_MAJOR 6) - find_package(Qt6 REQUIRED COMPONENTS Core Widgets Concurrent Network Test Xml Core5Compat) + find_package(Qt6 REQUIRED COMPONENTS Core CoreTools Widgets Concurrent Network Test Xml Core5Compat) list(APPEND Launcher_QT_LIBS Qt6::Core5Compat) if(NOT Launcher_FORCE_BUNDLED_LIBS) From 99dd9874df18fc7bea6114466c3c36597cf7d849 Mon Sep 17 00:00:00 2001 From: DioEgizio <83089242+DioEgizio@users.noreply.github.com> Date: Sat, 26 Nov 2022 08:41:41 +0100 Subject: [PATCH 080/155] refactor+fix: refactor the windows part of the release workflow and add arm to it Signed-off-by: DioEgizio <83089242+DioEgizio@users.noreply.github.com> --- .github/workflows/build.yml | 6 ++--- .github/workflows/trigger_release.yml | 36 +++++++++++++++++++-------- 2 files changed, 29 insertions(+), 13 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d957f6275..b18ef30ff 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -38,17 +38,17 @@ jobs: qt_tools: '' - os: windows-2022 - name: "Windows-Legacy" + name: "Windows-MinGW-w64-Legacy" msystem: clang32 qt_ver: 5 - os: windows-2022 - name: "Windows" + name: "Windows-MinGW-w64" msystem: clang64 qt_ver: 6 - os: windows-2022 - name: "Windows-Legacy-MSVC" + name: "Windows-MSVC-Legacy" msystem: '' architecture: 'win32' vcvars_arch: 'amd64_x86' diff --git a/.github/workflows/trigger_release.yml b/.github/workflows/trigger_release.yml index 8baa9693a..ac20c943f 100644 --- a/.github/workflows/trigger_release.yml +++ b/.github/workflows/trigger_release.yml @@ -46,14 +46,27 @@ jobs: tar -czf PrismLauncher-${{ env.VERSION }}.tar.gz PrismLauncher-${{ env.VERSION }} - for d in PrismLauncher-Windows-*; do + for d in PrismLauncher-Windows-MSVC*; do + cd "${d}" || continue + LEGACY="$(echo -n ${d} | grep -o Legacy || true)" + ARM64="$(echo -n ${d} | grep -o arm64 || true)" + INST="$(echo -n ${d} | grep -o Setup || true)" + PORT="$(echo -n ${d} | grep -o Portable || true)" + NAME="PrismLauncher-Windows-MSVC" + test -z "${LEGACY}" || NAME="${NAME}-Legacy" + test -z "${ARM64}" || NAME="${NAME}-arm64" + test -z "${PORT}" || NAME="${NAME}-Portable" + test -z "${INST}" || mv PrismLauncher-*.exe ../${NAME}-Setup-${{ env.VERSION }}.exe + test -n "${INST}" || zip -r -9 "../${NAME}-${{ env.VERSION }}.zip" * + cd .. + done + + for d in PrismLauncher-Windows-MinGW-w64*; do cd "${d}" || continue - MSVC="$(echo -n ${d} | grep -o MSVC || true)" LEGACY="$(echo -n ${d} | grep -o Legacy || true)" INST="$(echo -n ${d} | grep -o Setup || true)" PORT="$(echo -n ${d} | grep -o Portable || true)" - NAME="PrismLauncher-Windows" - test -z "${MSVC}" && NAME="${NAME}-MinGW" || NAME="${NAME}-MSVC" + NAME="PrismLauncher-Windows-MinGW-w64" test -z "${LEGACY}" || NAME="${NAME}-Legacy" test -z "${PORT}" || NAME="${NAME}-Portable" test -z "${INST}" || mv PrismLauncher-*.exe ../${NAME}-Setup-${{ env.VERSION }}.exe @@ -77,15 +90,18 @@ jobs: PrismLauncher-Linux-${{ env.VERSION }}-x86_64.AppImage PrismLauncher-Linux-Qt6-${{ env.VERSION }}.tar.gz PrismLauncher-Linux-Qt6-Portable-${{ env.VERSION }}.tar.gz - PrismLauncher-Windows-MinGW-Legacy-${{ env.VERSION }}.zip - PrismLauncher-Windows-MinGW-Legacy-Portable-${{ env.VERSION }}.zip - PrismLauncher-Windows-MinGW-Legacy-Setup-${{ env.VERSION }}.exe - PrismLauncher-Windows-MinGW-${{ env.VERSION }}.zip - PrismLauncher-Windows-MinGW-Portable-${{ env.VERSION }}.zip - PrismLauncher-Windows-MinGW-Setup-${{ env.VERSION }}.exe + PrismLauncher-Windows-MinGW-w64-Legacy-${{ env.VERSION }}.zip + PrismLauncher-Windows-MinGW-w64-Legacy-Portable-${{ env.VERSION }}.zip + PrismLauncher-Windows-MinGW-w64-Legacy-Setup-${{ env.VERSION }}.exe + PrismLauncher-Windows-MinGW-w64-${{ env.VERSION }}.zip + PrismLauncher-Windows-MinGW-w64-Portable-${{ env.VERSION }}.zip + PrismLauncher-Windows-MinGW-w64-Setup-${{ env.VERSION }}.exe PrismLauncher-Windows-MSVC-Legacy-${{ env.VERSION }}.zip PrismLauncher-Windows-MSVC-Legacy-Portable-${{ env.VERSION }}.zip PrismLauncher-Windows-MSVC-Legacy-Setup-${{ env.VERSION }}.exe + PrismLauncher-Windows-MSVC-arm64-${{ env.VERSION }}.zip + PrismLauncher-Windows-MSVC-arm64-Portable-${{ env.VERSION }}.zip + PrismLauncher-Windows-MSVC-arm64-Setup-${{ env.VERSION }}.exe PrismLauncher-Windows-MSVC-${{ env.VERSION }}.zip PrismLauncher-Windows-MSVC-Portable-${{ env.VERSION }}.zip PrismLauncher-Windows-MSVC-Setup-${{ env.VERSION }}.exe From 4c1c26a0e61fa492abb3715fe294fa25ca129649 Mon Sep 17 00:00:00 2001 From: DioEgizio <83089242+DioEgizio@users.noreply.github.com> Date: Wed, 30 Nov 2022 13:52:02 +0100 Subject: [PATCH 081/155] chore: drop Windows-MinGW-w64-Legacy this brings back the number of builds as the same as before the pr this is one of the slowest builds + windows 7/8.1 users can just use Windows-MSVC-Legacy Signed-off-by: DioEgizio <83089242+DioEgizio@users.noreply.github.com> --- .github/workflows/build.yml | 27 ++++++++------------------- .github/workflows/trigger_release.yml | 5 ----- 2 files changed, 8 insertions(+), 24 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b18ef30ff..1ba5d0e48 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -37,15 +37,9 @@ jobs: qt_modules: 'qt5compat qtimageformats' qt_tools: '' - - os: windows-2022 - name: "Windows-MinGW-w64-Legacy" - msystem: clang32 - qt_ver: 5 - - os: windows-2022 name: "Windows-MinGW-w64" msystem: clang64 - qt_ver: 6 - os: windows-2022 name: "Windows-MSVC-Legacy" @@ -135,12 +129,12 @@ jobs: cmake:p extra-cmake-modules:p ninja:p - qt${{ matrix.qt_ver }}-base:p - qt${{ matrix.qt_ver }}-svg:p - qt${{ matrix.qt_ver }}-imageformats:p - quazip-qt${{ matrix.qt_ver }}:p + qt6-base:p + qt6-svg:p + qt6-imageformats:p + quazip-qt6:p ccache:p - ${{ matrix.qt_ver == 6 && 'qt6-5compat:p' || '' }} + qt6-5compat:p - name: Force newer ccache if: runner.os == 'Windows' && matrix.msystem == '' && inputs.build_type == 'Debug' @@ -174,9 +168,9 @@ jobs: uses: actions/cache@v3.0.11 with: path: '${{ github.workspace }}\.ccache' - key: ${{ matrix.os }}-qt${{ matrix.qt_ver }} + key: ${{ matrix.os }}-mingw-w64 restore-keys: | - ${{ matrix.os }}-qt${{ matrix.qt_ver }} + ${{ matrix.os }}-mingw-w64 - name: Set short version shell: bash @@ -267,7 +261,7 @@ jobs: if: runner.os == 'Windows' && matrix.msystem != '' shell: msys2 {0} run: | - cmake -S . -B ${{ env.BUILD_DIR }} -DCMAKE_INSTALL_PREFIX=${{ env.INSTALL_DIR }} -DCMAKE_BUILD_TYPE=${{ inputs.build_type }} -DENABLE_LTO=ON -DLauncher_BUILD_PLATFORM=${{ matrix.name }} -DCMAKE_C_COMPILER_LAUNCHER=${{ env.CCACHE_VAR }} -DCMAKE_CXX_COMPILER_LAUNCHER=${{ env.CCACHE_VAR }} -DLauncher_QT_VERSION_MAJOR=${{ matrix.qt_ver }} -DCMAKE_OBJDUMP=/mingw64/bin/objdump.exe -G Ninja + cmake -S . -B ${{ env.BUILD_DIR }} -DCMAKE_INSTALL_PREFIX=${{ env.INSTALL_DIR }} -DCMAKE_BUILD_TYPE=${{ inputs.build_type }} -DENABLE_LTO=ON -DLauncher_BUILD_PLATFORM=${{ matrix.name }} -DCMAKE_C_COMPILER_LAUNCHER=${{ env.CCACHE_VAR }} -DCMAKE_CXX_COMPILER_LAUNCHER=${{ env.CCACHE_VAR }} -DLauncher_QT_VERSION_MAJOR=6 -DCMAKE_OBJDUMP=/mingw64/bin/objdump.exe -G Ninja - name: Configure CMake (Windows MSVC) if: runner.os == 'Windows' && matrix.msystem == '' @@ -369,11 +363,6 @@ jobs: run: | cmake --install ${{ env.BUILD_DIR }} - cd ${{ env.INSTALL_DIR }} - if [ "${{ matrix.qt_ver }}" == "5" ]; then - cp /clang32/bin/libcrypto-1_1.dll /clang32/bin/libssl-1_1.dll ./ - fi - - name: Package (Windows MSVC) if: runner.os == 'Windows' && matrix.msystem == '' run: | diff --git a/.github/workflows/trigger_release.yml b/.github/workflows/trigger_release.yml index ac20c943f..a2f89819c 100644 --- a/.github/workflows/trigger_release.yml +++ b/.github/workflows/trigger_release.yml @@ -63,11 +63,9 @@ jobs: for d in PrismLauncher-Windows-MinGW-w64*; do cd "${d}" || continue - LEGACY="$(echo -n ${d} | grep -o Legacy || true)" INST="$(echo -n ${d} | grep -o Setup || true)" PORT="$(echo -n ${d} | grep -o Portable || true)" NAME="PrismLauncher-Windows-MinGW-w64" - test -z "${LEGACY}" || NAME="${NAME}-Legacy" test -z "${PORT}" || NAME="${NAME}-Portable" test -z "${INST}" || mv PrismLauncher-*.exe ../${NAME}-Setup-${{ env.VERSION }}.exe test -n "${INST}" || zip -r -9 "../${NAME}-${{ env.VERSION }}.zip" * @@ -90,9 +88,6 @@ jobs: PrismLauncher-Linux-${{ env.VERSION }}-x86_64.AppImage PrismLauncher-Linux-Qt6-${{ env.VERSION }}.tar.gz PrismLauncher-Linux-Qt6-Portable-${{ env.VERSION }}.tar.gz - PrismLauncher-Windows-MinGW-w64-Legacy-${{ env.VERSION }}.zip - PrismLauncher-Windows-MinGW-w64-Legacy-Portable-${{ env.VERSION }}.zip - PrismLauncher-Windows-MinGW-w64-Legacy-Setup-${{ env.VERSION }}.exe PrismLauncher-Windows-MinGW-w64-${{ env.VERSION }}.zip PrismLauncher-Windows-MinGW-w64-Portable-${{ env.VERSION }}.zip PrismLauncher-Windows-MinGW-w64-Setup-${{ env.VERSION }}.exe From a116778402bd98ee079488d8c5a27933369e9046 Mon Sep 17 00:00:00 2001 From: flow Date: Thu, 1 Dec 2022 15:15:15 -0300 Subject: [PATCH 082/155] fix(Inst.Import): don't search inside 'overrides/' for the manifest It will never be there anyways, and saves a **bunch** of time when the overrides folder is big and we traverse all the tree when searching for the MMC 'instance.cfg' file. Signed-off-by: flow --- launcher/InstanceImportTask.cpp | 10 +++------- launcher/MMCZip.cpp | 27 ++++++++++++++++----------- launcher/MMCZip.h | 4 +++- 3 files changed, 22 insertions(+), 19 deletions(-) diff --git a/launcher/InstanceImportTask.cpp b/launcher/InstanceImportTask.cpp index b490620d5..5f4596490 100644 --- a/launcher/InstanceImportTask.cpp +++ b/launcher/InstanceImportTask.cpp @@ -164,18 +164,14 @@ void InstanceImportTask::processZipPack() } else { - QString mmcRoot = MMCZip::findFolderOfFileInZip(m_packZip.get(), "instance.cfg"); - QString flameRoot = MMCZip::findFolderOfFileInZip(m_packZip.get(), "manifest.json"); + QStringList paths_to_ignore { "overrides/" }; - if (!mmcRoot.isNull()) - { + if (QString mmcRoot = MMCZip::findFolderOfFileInZip(m_packZip.get(), "instance.cfg", paths_to_ignore); !mmcRoot.isNull()) { // process as MultiMC instance/pack qDebug() << "MultiMC:" << mmcRoot; root = mmcRoot; m_modpackType = ModpackType::MultiMC; - } - else if(!flameRoot.isNull()) - { + } else if (QString flameRoot = MMCZip::findFolderOfFileInZip(m_packZip.get(), "manifest.json", paths_to_ignore); !flameRoot.isNull()) { // process as Flame pack qDebug() << "Flame:" << flameRoot; root = flameRoot; diff --git a/launcher/MMCZip.cpp b/launcher/MMCZip.cpp index 9f4e968f7..f66003432 100644 --- a/launcher/MMCZip.cpp +++ b/launcher/MMCZip.cpp @@ -39,6 +39,7 @@ #include "MMCZip.h" #include "FileSystem.h" +#include #include // ours @@ -228,23 +229,27 @@ bool MMCZip::createModdedJar(QString sourceJarPath, QString targetJarPath, const } // ours -QString MMCZip::findFolderOfFileInZip(QuaZip * zip, const QString & what, const QString &root) +QString MMCZip::findFolderOfFileInZip(QuaZip* zip, const QString& what, const QStringList& ignore_paths, const QString& root) { QuaZipDir rootDir(zip, root); - for(auto fileName: rootDir.entryList(QDir::Files)) - { - if(fileName == what) + for (auto&& fileName : rootDir.entryList(QDir::Files)) { + if (fileName == what) return root; + + QCoreApplication::processEvents(); } - for(auto fileName: rootDir.entryList(QDir::Dirs)) - { - QString result = findFolderOfFileInZip(zip, what, root + fileName); - if(!result.isEmpty()) - { + + // Recurse the search to non-ignored subfolders + for (auto&& fileName : rootDir.entryList(QDir::Dirs)) { + if (ignore_paths.contains(fileName)) + continue; + + QString result = findFolderOfFileInZip(zip, what, ignore_paths, root + fileName); + if (!result.isEmpty()) return result; - } } - return QString(); + + return {}; } // ours diff --git a/launcher/MMCZip.h b/launcher/MMCZip.h index ce9775bdb..81f9cb908 100644 --- a/launcher/MMCZip.h +++ b/launcher/MMCZip.h @@ -80,9 +80,11 @@ namespace MMCZip /** * Find a single file in archive by file name (not path) * + * \param ignore_paths paths to skip when recursing the search + * * \return the path prefix where the file is */ - QString findFolderOfFileInZip(QuaZip * zip, const QString & what, const QString &root = QString("")); + QString findFolderOfFileInZip(QuaZip * zip, const QString & what, const QStringList& ignore_paths = {}, const QString &root = QString("")); /** * Find a multiple files of the same name in archive by file name From 79b79b752ce9c22764601da8c4ad7ca77ab8a016 Mon Sep 17 00:00:00 2001 From: flow Date: Thu, 1 Dec 2022 15:32:26 -0300 Subject: [PATCH 083/155] fix(Inst.Import): Show error reason in fail dialog Signed-off-by: flow --- launcher/InstanceCreationTask.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/launcher/InstanceCreationTask.cpp b/launcher/InstanceCreationTask.cpp index 3971effaf..73dc17891 100644 --- a/launcher/InstanceCreationTask.cpp +++ b/launcher/InstanceCreationTask.cpp @@ -25,9 +25,13 @@ void InstanceCreationTask::executeTask() return; qWarning() << "Instance creation failed!"; - if (!m_error_message.isEmpty()) + if (!m_error_message.isEmpty()) { qWarning() << "Reason: " << m_error_message; - emitFailed(tr("Error while creating new instance.")); + emitFailed(tr("Error while creating new instance:\n%1").arg(m_error_message)); + } else { + emitFailed(tr("Error while creating new instance.")); + } + return; } From 386fb28a35e4195838c0711dc894626a5d259c0e Mon Sep 17 00:00:00 2001 From: flow Date: Thu, 1 Dec 2022 15:33:35 -0300 Subject: [PATCH 084/155] fix(FileResolvingTask): Fail instead of crash when there's API errors Also remove non-used variable (rip). Signed-off-by: flow --- .../modplatform/flame/FileResolvingTask.cpp | 20 +++++++++++++++---- .../flame/FlameInstanceCreationTask.cpp | 1 + 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/launcher/modplatform/flame/FileResolvingTask.cpp b/launcher/modplatform/flame/FileResolvingTask.cpp index 25b56fbd1..7f1beb1af 100644 --- a/launcher/modplatform/flame/FileResolvingTask.cpp +++ b/launcher/modplatform/flame/FileResolvingTask.cpp @@ -42,12 +42,25 @@ void Flame::FileResolvingTask::executeTask() void Flame::FileResolvingTask::netJobFinished() { setProgress(1, 3); - int index = 0; // job to check modrinth for blocked projects m_checkJob = new NetJob("Modrinth check", m_network); blockedProjects = QMap(); - auto doc = Json::requireDocument(*result); - auto array = Json::requireArray(doc.object()["data"]); + + QJsonDocument doc; + QJsonArray array; + + try { + doc = Json::requireDocument(*result); + array = Json::requireArray(doc.object()["data"]); + } catch (Json::JsonException& e) { + qCritical() << "Non-JSON data returned from the CF API"; + qCritical() << e.cause(); + + emitFailed(tr("Invalid data returned from the API.")); + + return; + } + for (QJsonValueRef file : array) { auto fileid = Json::requireInteger(Json::requireObject(file)["id"]); auto& out = m_toProcess.files[fileid]; @@ -68,7 +81,6 @@ void Flame::FileResolvingTask::netJobFinished() blockedProjects.insert(&out, output); } } - index++; } connect(m_checkJob.get(), &NetJob::finished, this, &Flame::FileResolvingTask::modrinthCheckFinished); diff --git a/launcher/modplatform/flame/FlameInstanceCreationTask.cpp b/launcher/modplatform/flame/FlameInstanceCreationTask.cpp index 91554b587..a00c948a8 100644 --- a/launcher/modplatform/flame/FlameInstanceCreationTask.cpp +++ b/launcher/modplatform/flame/FlameInstanceCreationTask.cpp @@ -338,6 +338,7 @@ bool FlameCreationTask::createInstance() connect(m_mod_id_resolver.get(), &Flame::FileResolvingTask::failed, [&](QString reason) { m_mod_id_resolver.reset(); setError(tr("Unable to resolve mod IDs:\n") + reason); + loop.quit(); }); connect(m_mod_id_resolver.get(), &Flame::FileResolvingTask::progress, this, &FlameCreationTask::setProgress); connect(m_mod_id_resolver.get(), &Flame::FileResolvingTask::status, this, &FlameCreationTask::setStatus); From 3cc987a5b4afdc0b8df5be420fc6d1e2a19fbe66 Mon Sep 17 00:00:00 2001 From: flow Date: Thu, 1 Dec 2022 22:54:03 -0300 Subject: [PATCH 085/155] fix: explicitly set scheme for local file in -I argument Otherwise isLocalFile() will return false for local files without the file:// thingy. Signed-off-by: flow --- launcher/ui/MainWindow.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/launcher/ui/MainWindow.cpp b/launcher/ui/MainWindow.cpp index e2fb10954..b626bbae5 100644 --- a/launcher/ui/MainWindow.cpp +++ b/launcher/ui/MainWindow.cpp @@ -1817,6 +1817,10 @@ void MainWindow::droppedURLs(QList urls) { // NOTE: This loop only processes one dropped file! for (auto& url : urls) { + // The isLocalFile() check below doesn't work as intended without an explicit scheme. + if (url.scheme().isEmpty()) + url.setScheme("file"); + if (!url.isLocalFile()) { // probably instance/modpack addInstance(url.toString()); break; From 5c6f32507176a0067df8728814ea26d3159e1d61 Mon Sep 17 00:00:00 2001 From: Sefa Eyeoglu Date: Fri, 2 Dec 2022 20:47:11 +0100 Subject: [PATCH 086/155] Remove blue-ish tint from remaining flat white icons Signed-off-by: Sefa Eyeoglu --- launcher/resources/flat_white/scalable/shortcut.svg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/launcher/resources/flat_white/scalable/shortcut.svg b/launcher/resources/flat_white/scalable/shortcut.svg index b419a77d4..77ccbdd46 100644 --- a/launcher/resources/flat_white/scalable/shortcut.svg +++ b/launcher/resources/flat_white/scalable/shortcut.svg @@ -1,3 +1,3 @@ - + From fa3caf091aca8bc784464e3bdf2fe51a09f7d759 Mon Sep 17 00:00:00 2001 From: Ryan Cao <70191398+ryanccn@users.noreply.github.com> Date: Sat, 3 Dec 2022 21:54:41 +0800 Subject: [PATCH 087/155] fix: warn before trashing instances Signed-off-by: Ryan Cao <70191398+ryanccn@users.noreply.github.com> --- launcher/ui/MainWindow.cpp | 32 +++++++++++++++----------------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/launcher/ui/MainWindow.cpp b/launcher/ui/MainWindow.cpp index b626bbae5..91cc5f292 100644 --- a/launcher/ui/MainWindow.cpp +++ b/launcher/ui/MainWindow.cpp @@ -2088,27 +2088,25 @@ void MainWindow::on_actionAbout_triggered() void MainWindow::on_actionDeleteInstance_triggered() { - if (!m_selectedInstance) - { + if (!m_selectedInstance) { return; } auto id = m_selectedInstance->id(); - if (APPLICATION->instances()->trashInstance(id)) { - ui->actionUndoTrashInstance->setEnabled(APPLICATION->instances()->trashedSomething()); - return; - } - - auto response = CustomMessageBox::selectable( - this, - tr("CAREFUL!"), - tr("About to delete: %1\nThis is permanent and will completely delete the instance.\n\nAre you sure?").arg(m_selectedInstance->name()), - QMessageBox::Warning, - QMessageBox::Yes | QMessageBox::No, - QMessageBox::No - )->exec(); - if (response == QMessageBox::Yes) - { + + auto response = + CustomMessageBox::selectable(this, tr("CAREFUL!"), + tr("About to delete: %1\nThis may be permanent and will completely delete the instance.\n\nAre you sure?") + .arg(m_selectedInstance->name()), + QMessageBox::Warning, QMessageBox::Yes | QMessageBox::No, QMessageBox::No) + ->exec(); + + if (response == QMessageBox::Yes) { + if (APPLICATION->instances()->trashInstance(id)) { + ui->actionUndoTrashInstance->setEnabled(APPLICATION->instances()->trashedSomething()); + return; + } + APPLICATION->instances()->deleteInstance(id); } } From 70620d51374d677bd6cafc21b470446696c9e0a0 Mon Sep 17 00:00:00 2001 From: DioEgizio <83089242+DioEgizio@users.noreply.github.com> Date: Sun, 4 Dec 2022 12:45:36 +0100 Subject: [PATCH 088/155] feat: add a proper server icon Signed-off-by: DioEgizio <83089242+DioEgizio@users.noreply.github.com> --- .../resources/breeze_dark/breeze_dark.qrc | 1 + .../resources/breeze_dark/scalable/server.svg | 13 + .../resources/breeze_light/breeze_light.qrc | 1 + .../breeze_light/scalable/server.svg | 13 + launcher/resources/flat/flat.qrc | 1 + launcher/resources/flat/scalable/server.svg | 1 + launcher/resources/flat_white/flat_white.qrc | 1 + .../resources/flat_white/scalable/server.svg | 1 + launcher/resources/multimc/multimc.qrc | 1 + .../resources/multimc/scalable/server.svg | 9764 +++++++++++++++++ launcher/ui/pages/instance/ServersPage.h | 2 +- 11 files changed, 9798 insertions(+), 1 deletion(-) create mode 100644 launcher/resources/breeze_dark/scalable/server.svg create mode 100644 launcher/resources/breeze_light/scalable/server.svg create mode 100644 launcher/resources/flat/scalable/server.svg create mode 100644 launcher/resources/flat_white/scalable/server.svg create mode 100644 launcher/resources/multimc/scalable/server.svg diff --git a/launcher/resources/breeze_dark/breeze_dark.qrc b/launcher/resources/breeze_dark/breeze_dark.qrc index 97434abc4..79707828f 100644 --- a/launcher/resources/breeze_dark/breeze_dark.qrc +++ b/launcher/resources/breeze_dark/breeze_dark.qrc @@ -40,5 +40,6 @@ scalable/export.svg scalable/rename.svg scalable/launch.svg + scalable/server.svg diff --git a/launcher/resources/breeze_dark/scalable/server.svg b/launcher/resources/breeze_dark/scalable/server.svg new file mode 100644 index 000000000..7d9af3e71 --- /dev/null +++ b/launcher/resources/breeze_dark/scalable/server.svg @@ -0,0 +1,13 @@ + + + + + + diff --git a/launcher/resources/breeze_light/breeze_light.qrc b/launcher/resources/breeze_light/breeze_light.qrc index 6d868b183..ae8dbf3be 100644 --- a/launcher/resources/breeze_light/breeze_light.qrc +++ b/launcher/resources/breeze_light/breeze_light.qrc @@ -40,5 +40,6 @@ scalable/export.svg scalable/rename.svg scalable/launch.svg + scalable/server.svg diff --git a/launcher/resources/breeze_light/scalable/server.svg b/launcher/resources/breeze_light/scalable/server.svg new file mode 100644 index 000000000..52d7dd7d2 --- /dev/null +++ b/launcher/resources/breeze_light/scalable/server.svg @@ -0,0 +1,13 @@ + + + + + + diff --git a/launcher/resources/flat/flat.qrc b/launcher/resources/flat/flat.qrc index a846bd2dc..cadf87364 100644 --- a/launcher/resources/flat/flat.qrc +++ b/launcher/resources/flat/flat.qrc @@ -47,6 +47,7 @@ scalable/tag.svg scalable/export.svg scalable/rename.svg + scalable/server.svg scalable/launch.svg diff --git a/launcher/resources/flat/scalable/server.svg b/launcher/resources/flat/scalable/server.svg new file mode 100644 index 000000000..49c22b38c --- /dev/null +++ b/launcher/resources/flat/scalable/server.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/launcher/resources/flat_white/flat_white.qrc b/launcher/resources/flat_white/flat_white.qrc index b0759d8fd..2701462fe 100644 --- a/launcher/resources/flat_white/flat_white.qrc +++ b/launcher/resources/flat_white/flat_white.qrc @@ -48,5 +48,6 @@ scalable/rename.svg scalable/tag.svg scalable/launch.svg + scalable/server.svg diff --git a/launcher/resources/flat_white/scalable/server.svg b/launcher/resources/flat_white/scalable/server.svg new file mode 100644 index 000000000..f41db1b22 --- /dev/null +++ b/launcher/resources/flat_white/scalable/server.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/launcher/resources/multimc/multimc.qrc b/launcher/resources/multimc/multimc.qrc index 42b496dad..9712698d2 100644 --- a/launcher/resources/multimc/multimc.qrc +++ b/launcher/resources/multimc/multimc.qrc @@ -346,5 +346,6 @@ scalable/export.svg scalable/launch.svg + scalable/server.svg diff --git a/launcher/resources/multimc/scalable/server.svg b/launcher/resources/multimc/scalable/server.svg new file mode 100644 index 000000000..c6a957b36 --- /dev/null +++ b/launcher/resources/multimc/scalable/server.svg @@ -0,0 +1,9764 @@ + + + + + + + + + + + + + + + + + + + + + + + +image/svg+xml + + + + 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 +byvXOWum0rOluGXuPT4pS3q2kZkyF8/TndQsijF6W5VXE8dqeuN8bT21Xewa1nt+93tv5mKzZL3L +d1vOXTWxeaF9Ts23ir9Ty59fe1OJcjI+tfxSeZhaVguXUwt7HegL+uIumTrKTyW2NltxWstnN7XV +WtxoQZMPfmiTSxcG/e31YBv3JbnayfzCb5etvkegf51coVFUF/J3s1IcxknB3Th1W9Z+7HzkoOZc +L7G1OzWX7qidY1Zsbjd1sz7zDn/u1uHdO4t1/KjTbq937ttP62en8mr6cgG3FVcKtZBqd5XH9O3n +0bJvpU8fxl5gpZr6tToVVOlb+3k1cQO1iNXSSk+MxZmrVv3Ir9LOzLNmBFW6t3WebVx7KkW14GrT +i7eJ9fLpsV+l7d7r2sJSfGPq1a9SuSBvbwRUqs3M5tbf8xjJPn1N3z3KhaJx7tvT6UJrLX5aO77w +rXR3pnnkqZSuF1zt/MFR+jhogK/aj2X1AFW62De8u9M3qXimOw+vpZt9c7o2C7NPqz2bn/fMarqY +3a3jSmE1vdlipU/tp+u3i4BK114yV5WPVbdSKc5V+7xSPAmsNLv6fjnvX+nG1GK7s5bo+Fd6ln2G +Wih++/ramd+6UwIqzXwuzhvVXf9K04tPiY31H66nOEmcO6ulzMyv1jv2q1QuHJ4bAZVqM/FMLrMd +UOndC3IlbBaLvn2d3p3dnDuqfl75Vrp7nrsOGt69uZWp5Cep1H78LgDG+AGeXuzM7yzjAV7qq3Tv +5Sfzu9SSodJsy1vp0f7JE630bmXB01Mpns0kk/dutUJf7w356Oc861/p/nQvd3RXzvlWelqv7rmV +wryI1R4mf1vLAZU+JOTLo9+ef6WHqeejQmF7yq9SmJfifm0/sK+Xx1rxNahSS76Wn/P+lR6tzBQr +L0vruFIp7u3r9fNmJ7DS64XqSyuo0mP5ZmXb8KtUikO1duJmJ9c2fQf4frn4HFjp13TxyAio9FGT +n0qvCVwpwpinrydXte+1+Mmyb6XPz7cvgZU2q9sLH36VSnFU7bH8ah9Z/gNcuFKmb7vn+36Vttsn +KzO00rfUomfRJPJLdgpXKsWV0nR3V6RKa+1eypRRpct9lZ5uLvw+27c7UOlm21NpYq15t0wr/c4v +uZUCTUbVxt8fpslWrhp3yr5IIC5k++RhF1W60r+nnqzMNlLrZ1Cp2fUOr21/JXGlaF4W7GUPKZyv +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 + + +

& zA9ud~G>TlK@cYWs_ni0VoIf=Ex*O*JA(aRI;m= z{;ZJ3rM=TEe-u7kCSTLUu*d(?ecvAr+qgSE1h(Wqziav9=RT7!lbsTcMGds~WTd!V zoBQkW2l->Ne;*t^rM|oE&=1AywZ6gs!hZB6?T>5H&*M9(=TO@O1b(RHJ|nU0(3hv_w>H+#m#NcW zK5>Y>NYLRx`~R>e{>pXiHA~jLgnm}XvnRQ3X69-1 zuYE9ipWOk`P48Xn78ov4_%HIX{VSv0&E?z*pa1V@kUY+~$zO(T{-W@ZsKzxMr8x%_ zx;9ULxP0{_m1H;d8gWtGUq3QW@1Osnc&~#QlZ)l8hnF3G=<&oyCV%wTnt1*z*Zdeh zPk$|24kxaa+d~-M7t*aXR2#!jJ%t0)9gIIr{r<$}k?x-zI@)1O-)*-Z^xs}k zddU3lk$v9rP49oK=KQGp;qfe|o%^m$bqEV!Ia#~tqrz=}u?P2gS^4hnv}UnO{I7f? z;D<_#ZR2_;hD~h&ahzY~OYOTO<)kF_rMW)bCWE1-pyctoM&4+NsyxN)_@~o9Fb7Ef zyT}*s%C>Yy&Z`~KWysw{@o2o;M+Ir)G3aI%erTtUE%g^cRGXJmGXn`)-~FBe*X?xH!WdE z{c+L3>cQ%Z-~Xvuu6Vtp3Ix<{SN zns$NFUT~4~{FZyaH6Oiah(9&A{l3eFe;?X!ySlPBw+I_NKV zt)*rD{PNHBonbo)lSF&Mk5u&TH)dVR)4X0eg8xU5#O*e%Qyav8s<)kwWiR<>_QT<0 zTEH3I!?jHF+YUa@3=!DWwdr%=(&vnF$FDCvuleeP2zzzZIhj8{jufsrkoPa-Yqy!N zR{fk$N9|4bzHZU)nd%(YEi?D>fy_hd`b%Q=^*&fsBhgXOQoo70&!7YKaY`#e5&zt$(1uibn|IbtVzn@AeV#iYO^X@;#Dd|CJ(G@NH zoJC1L*xoVxILJ|Ts9fQSp4k-p!+di&*)u*|cawekfLoPYVDH1*t+ETG?Y^f!+LhtL zm9cT>O}&PPpWo;G_!hyo�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 literal 0 HcmV?d00001 diff --git a/launcher/resources/multimc/128x128/instances/flame_legacy.png b/launcher/resources/multimc/128x128/instances/flame_legacy.png new file mode 100644 index 0000000000000000000000000000000000000000..6482975c494e02522f34a10894bb434f1ccc7194 GIT binary patch literal 6226 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 AZ~y=R literal 0 HcmV?d00001 diff --git a/launcher/resources/multimc/128x128/instances/ftb_logo_legacy.png b/launcher/resources/multimc/128x128/instances/ftb_logo_legacy.png new file mode 100644 index 0000000000000000000000000000000000000000..e725b7fe4da31e42ff795a39a8b41a373f96a1eb GIT binary patch literal 7883 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 literal 0 HcmV?d00001 diff --git a/launcher/resources/multimc/128x128/instances/herobrine_legacy.png b/launcher/resources/multimc/128x128/instances/herobrine_legacy.png new file mode 100644 index 0000000000000000000000000000000000000000..13f1494c4dd62b54e2e16942b23036e2968d640d GIT binary patch literal 4937 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 Pz`)??>gTe~DWM4fu7_Uz literal 0 HcmV?d00001 diff --git a/launcher/resources/multimc/128x128/instances/magitech_legacy.png b/launcher/resources/multimc/128x128/instances/magitech_legacy.png new file mode 100644 index 0000000000000000000000000000000000000000..0f81a1997fd0fe38cf927d4d29cbb1db394e32dd GIT binary patch literal 23097 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 Mr>mdKI;Vst07B&frT_o{ literal 0 HcmV?d00001 diff --git a/launcher/resources/multimc/128x128/instances/netherstar_legacy.png b/launcher/resources/multimc/128x128/instances/netherstar_legacy.png new file mode 100644 index 0000000000000000000000000000000000000000..132085f02f2673a6db43d779246ca2c36daf43b5 GIT binary patch literal 14062 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