NOISSUE Add support for launching worlds directly via Quick Play

This commit is contained in:
arthomnix
2023-04-08 18:03:20 +01:00
parent 22f82c34bf
commit 71cf4f8d18
30 changed files with 306 additions and 103 deletions

View File

@@ -55,7 +55,7 @@ void DirectJavaLaunch::executeTask()
// make detachable - this will keep the process running even if the object is destroyed
m_process.setDetachable(true);
auto mcArgs = minecraftInstance->processMinecraftArgs(m_session, m_serverToJoin);
auto mcArgs = minecraftInstance->processMinecraftArgs(m_session, m_quickPlayTarget);
args.append(mcArgs);
QString wrapperCommandStr = instance->getWrapperCommand().trimmed();

View File

@@ -19,7 +19,7 @@
#include <LoggedProcess.h>
#include <minecraft/auth/AuthSession.h>
#include "MinecraftServerTarget.h"
#include "QuickPlayTarget.h"
class DirectJavaLaunch: public LaunchStep
{
@@ -41,9 +41,9 @@ public:
m_session = session;
}
void setServerToJoin(MinecraftServerTargetPtr serverToJoin)
void setQuickPlayTarget(QuickPlayTargetPtr quickPlayTarget)
{
m_serverToJoin = std::move(serverToJoin);
m_quickPlayTarget = std::move(quickPlayTarget);
}
private slots:
@@ -53,6 +53,6 @@ private:
LoggedProcess m_process;
QString m_command;
AuthSessionPtr m_session;
MinecraftServerTargetPtr m_serverToJoin;
QuickPlayTargetPtr m_quickPlayTarget;
};

View File

@@ -60,7 +60,7 @@ void LauncherPartLaunch::executeTask()
auto instance = m_parent->instance();
std::shared_ptr<MinecraftInstance> minecraftInstance = std::dynamic_pointer_cast<MinecraftInstance>(instance);
m_launchScript = minecraftInstance->createLaunchScript(m_session, m_serverToJoin);
m_launchScript = minecraftInstance->createLaunchScript(m_session, m_quickPlayTarget);
QStringList args = minecraftInstance->javaArguments();
QString allArgs = args.join(", ");
emit logLine("Java Arguments:\n[" + m_parent->censorPrivateInfo(allArgs) + "]\n\n", MessageLevel::Launcher);

View File

@@ -19,7 +19,7 @@
#include <LoggedProcess.h>
#include <minecraft/auth/AuthSession.h>
#include "MinecraftServerTarget.h"
#include "QuickPlayTarget.h"
class LauncherPartLaunch: public LaunchStep
{
@@ -41,9 +41,9 @@ public:
m_session = session;
}
void setServerToJoin(MinecraftServerTargetPtr serverToJoin)
void setQuickPlayTarget(QuickPlayTargetPtr quickPlayTarget)
{
m_serverToJoin = std::move(serverToJoin);
m_quickPlayTarget = std::move(quickPlayTarget);
}
private slots:
@@ -54,7 +54,7 @@ private:
QString m_command;
AuthSessionPtr m_session;
QString m_launchScript;
MinecraftServerTargetPtr m_serverToJoin;
QuickPlayTargetPtr m_quickPlayTarget;
bool mayProceed = false;
};

View File

@@ -142,6 +142,6 @@ void PrintInstanceInfo::executeTask()
#endif
logLines(log, MessageLevel::Launcher);
logLines(instance->verboseDescription(m_session, m_serverToJoin), MessageLevel::Launcher);
logLines(instance->verboseDescription(m_session, m_quickPlayTarget), MessageLevel::Launcher);
emitSucceeded();
}

View File

@@ -18,15 +18,15 @@
#include <launch/LaunchStep.h>
#include <memory>
#include "minecraft/auth/AuthSession.h"
#include "minecraft/launch/MinecraftServerTarget.h"
#include "minecraft/launch/QuickPlayTarget.h"
// FIXME: temporary wrapper for existing task.
class PrintInstanceInfo: public LaunchStep
{
Q_OBJECT
public:
explicit PrintInstanceInfo(LaunchTask *parent, AuthSessionPtr session, MinecraftServerTargetPtr serverToJoin) :
LaunchStep(parent), m_session(session), m_serverToJoin(serverToJoin) {};
explicit PrintInstanceInfo(LaunchTask *parent, AuthSessionPtr session, QuickPlayTargetPtr quickPlayTarget) :
LaunchStep(parent), m_session(session), m_quickPlayTarget(quickPlayTarget) {};
virtual ~PrintInstanceInfo(){};
virtual void executeTask();
@@ -36,6 +36,6 @@ public:
}
private:
AuthSessionPtr m_session;
MinecraftServerTargetPtr m_serverToJoin;
QuickPlayTargetPtr m_quickPlayTarget;
};

View File

@@ -13,12 +13,12 @@
* limitations under the License.
*/
#include "MinecraftServerTarget.h"
#include "QuickPlayTarget.h"
#include <QStringList>
// FIXME: the way this is written, it can't ever do any sort of validation and can accept total junk
MinecraftServerTarget MinecraftServerTarget::parse(const QString &fullAddress) {
QuickPlayTarget QuickPlayTarget::parseMultiplayer(const QString &fullAddress) {
QStringList split = fullAddress.split(":");
// The logic below replicates the exact logic minecraft uses for parsing server addresses.
@@ -63,5 +63,12 @@ MinecraftServerTarget MinecraftServerTarget::parse(const QString &fullAddress) {
}
}
return MinecraftServerTarget { realAddress, realPort };
return QuickPlayTarget {realAddress, realPort };
}
QuickPlayTarget QuickPlayTarget::parseSingleplayer(const QString &worldName)
{
QuickPlayTarget target;
target.world = worldName;
return target;
}

View File

@@ -19,11 +19,16 @@
#include <QString>
struct MinecraftServerTarget {
struct QuickPlayTarget {
// Multiplayer
QString address;
quint16 port;
static MinecraftServerTarget parse(const QString &fullAddress);
// Singleplayer
QString world;
static QuickPlayTarget parseMultiplayer(const QString &fullAddress);
static QuickPlayTarget parseSingleplayer(const QString &worldName);
};
typedef std::shared_ptr<MinecraftServerTarget> MinecraftServerTargetPtr;
typedef std::shared_ptr<QuickPlayTarget> QuickPlayTargetPtr;