aboutsummaryrefslogtreecommitdiff
path: root/launcher/minecraft
diff options
context:
space:
mode:
authorTheKodeToad <TheKodeToad@proton.me>2023-07-21 11:02:57 +0100
committerGitHub <noreply@github.com>2023-07-21 11:02:57 +0100
commit0be4db30eb98f65543b30d6a2d970ef1df64633b (patch)
tree2135c398f3d01816a0f508dd5e29e155625793cc /launcher/minecraft
parent4c6929038159a29c437b30616daa0b2672531e4d (diff)
parent821dd8400b1a27ab1f932200bfa77d7a04edef5d (diff)
downloadPrismLauncher-0be4db30eb98f65543b30d6a2d970ef1df64633b.tar.gz
PrismLauncher-0be4db30eb98f65543b30d6a2d970ef1df64633b.tar.bz2
PrismLauncher-0be4db30eb98f65543b30d6a2d970ef1df64633b.zip
Merge branch 'PrismLauncher:develop' into better-component-installation
Diffstat (limited to 'launcher/minecraft')
-rw-r--r--launcher/minecraft/MinecraftInstance.cpp11
-rw-r--r--launcher/minecraft/auth/AuthSession.cpp1
-rw-r--r--launcher/minecraft/auth/MinecraftAccount.cpp32
-rw-r--r--launcher/minecraft/auth/MinecraftAccount.h2
-rw-r--r--launcher/minecraft/mod/tasks/LocalResourceParse.cpp9
5 files changed, 50 insertions, 5 deletions
diff --git a/launcher/minecraft/MinecraftInstance.cpp b/launcher/minecraft/MinecraftInstance.cpp
index 4867cc7a..342e634f 100644
--- a/launcher/minecraft/MinecraftInstance.cpp
+++ b/launcher/minecraft/MinecraftInstance.cpp
@@ -4,6 +4,7 @@
* Copyright (C) 2022 Sefa Eyeoglu <contact@scrumplex.net>
* Copyright (C) 2022 Jamie Mansfield <jmansfield@cadixdev.org>
* Copyright (C) 2022 TheKodeToad <TheKodeToad@proton.me>
+ * Copyright (c) 2023 seth <getchoo at tuta dot io>
*
* 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
@@ -186,6 +187,10 @@ void MinecraftInstance::loadSpecificSettings()
m_settings->registerOverride(global_settings->getSetting("CloseAfterLaunch"), miscellaneousOverride);
m_settings->registerOverride(global_settings->getSetting("QuitAfterGameStop"), miscellaneousOverride);
+ // Mod loader specific options
+ auto modLoaderSettings = m_settings->registerSetting("OverrideModLoaderSettings", false);
+ m_settings->registerOverride(global_settings->getSetting("DisableQuiltBeacon"), modLoaderSettings);
+
m_settings->set("InstanceType", "OneSix");
}
@@ -391,6 +396,12 @@ QStringList MinecraftInstance::extraArguments()
agent->library()->getApplicableFiles(runtimeContext(), jar, temp1, temp2, temp3, getLocalLibraryPath());
list.append("-javaagent:"+jar[0]+(agent->argument().isEmpty() ? "" : "="+agent->argument()));
}
+
+ {
+ const auto loaders = version->getModLoaders();
+ if (loaders.has_value() && loaders.value() & ResourceAPI::Quilt && settings()->get("DisableQuiltBeacon").toBool())
+ list.append("-Dloader.disable_beacon=true");
+ }
return list;
}
diff --git a/launcher/minecraft/auth/AuthSession.cpp b/launcher/minecraft/auth/AuthSession.cpp
index 6bea74a3..2c06beaa 100644
--- a/launcher/minecraft/auth/AuthSession.cpp
+++ b/launcher/minecraft/auth/AuthSession.cpp
@@ -26,6 +26,7 @@ bool AuthSession::MakeOffline(QString offline_playername)
return false;
}
session = "-";
+ access_token = "0";
player_name = offline_playername;
status = PlayableOffline;
return true;
diff --git a/launcher/minecraft/auth/MinecraftAccount.cpp b/launcher/minecraft/auth/MinecraftAccount.cpp
index 3b050ac0..d7b061e5 100644
--- a/launcher/minecraft/auth/MinecraftAccount.cpp
+++ b/launcher/minecraft/auth/MinecraftAccount.cpp
@@ -37,6 +37,7 @@
#include "MinecraftAccount.h"
+#include <QCryptographicHash>
#include <QUuid>
#include <QJsonObject>
#include <QJsonArray>
@@ -100,7 +101,7 @@ MinecraftAccountPtr MinecraftAccount::createOffline(const QString &username)
account->data.yggdrasilToken.extra["clientToken"] = QUuid::createUuid().toString().remove(QRegularExpression("[{}-]"));
account->data.minecraftEntitlement.ownsMinecraft = true;
account->data.minecraftEntitlement.canPlayMinecraft = true;
- account->data.minecraftProfile.id = QUuid::createUuid().toString().remove(QRegularExpression("[{}-]"));
+ account->data.minecraftProfile.id = uuidFromUsername(username).toString().remove(QRegularExpression("[{}-]"));
account->data.minecraftProfile.name = username;
account->data.minecraftProfile.validity = Katabasis::Validity::Certain;
return account;
@@ -334,3 +335,32 @@ void MinecraftAccount::incrementUses()
qWarning() << "Profile" << data.profileId() << "is now in use.";
}
}
+
+QUuid MinecraftAccount::uuidFromUsername(QString username) {
+ auto input = QString("OfflinePlayer:%1").arg(username).toUtf8();
+
+ // basically a reimplementation of Java's UUID#nameUUIDFromBytes
+ QByteArray digest = QCryptographicHash::hash(input, QCryptographicHash::Md5);
+
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
+ auto bOr = [](QByteArray& array, int index, char value) {
+ array[index] = array.at(index) | value;
+ };
+ auto bAnd = [](QByteArray& array, int index, char value) {
+ array[index] = array.at(index) & value;
+ };
+#else
+ auto bOr = [](QByteArray& array, qsizetype index, char value) {
+ array[index] |= value;
+ };
+ auto bAnd = [](QByteArray& array, qsizetype index, char value) {
+ array[index] &= value;
+ };
+#endif
+ bAnd(digest, 6, (char) 0x0f); // clear version
+ bOr(digest, 6, (char) 0x30); // set to version 3
+ bAnd(digest, 8, (char) 0x3f); // clear variant
+ bOr(digest, 8, (char) 0x80); // set to IETF variant
+
+ return QUuid::fromRfc4122(digest);
+}
diff --git a/launcher/minecraft/auth/MinecraftAccount.h b/launcher/minecraft/auth/MinecraftAccount.h
index 0dcaeb53..67623a5a 100644
--- a/launcher/minecraft/auth/MinecraftAccount.h
+++ b/launcher/minecraft/auth/MinecraftAccount.h
@@ -98,6 +98,8 @@ public: /* construction */
static MinecraftAccountPtr loadFromJsonV2(const QJsonObject &json);
static MinecraftAccountPtr loadFromJsonV3(const QJsonObject &json);
+ static QUuid uuidFromUsername(QString username);
+
//! Saves a MinecraftAccount to a JSON object and returns it.
QJsonObject saveToJson() const;
diff --git a/launcher/minecraft/mod/tasks/LocalResourceParse.cpp b/launcher/minecraft/mod/tasks/LocalResourceParse.cpp
index 4d760df2..0894049c 100644
--- a/launcher/minecraft/mod/tasks/LocalResourceParse.cpp
+++ b/launcher/minecraft/mod/tasks/LocalResourceParse.cpp
@@ -44,7 +44,11 @@ static const QMap<PackedResourceType, QString> s_packed_type_names = {
namespace ResourceUtils {
PackedResourceType identify(QFileInfo file){
if (file.exists() && file.isFile()) {
- if (ResourcePackUtils::validate(file)) {
+ if (ModUtils::validate(file)) {
+ // mods can contain resource and data packs so they must be tested first
+ qDebug() << file.fileName() << "is a mod";
+ return PackedResourceType::Mod;
+ } else if (ResourcePackUtils::validate(file)) {
qDebug() << file.fileName() << "is a resource pack";
return PackedResourceType::ResourcePack;
} else if (TexturePackUtils::validate(file)) {
@@ -53,9 +57,6 @@ PackedResourceType identify(QFileInfo file){
} else if (DataPackUtils::validate(file)) {
qDebug() << file.fileName() << "is a data pack";
return PackedResourceType::DataPack;
- } else if (ModUtils::validate(file)) {
- qDebug() << file.fileName() << "is a mod";
- return PackedResourceType::Mod;
} else if (WorldSaveUtils::validate(file)) {
qDebug() << file.fileName() << "is a world save";
return PackedResourceType::WorldSave;