summaryrefslogtreecommitdiffstats
path: root/api/logic/minecraft/launch
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2017-07-24 09:01:37 +0200
committerPetr Mrázek <peterix@gmail.com>2017-09-09 19:19:05 +0200
commit13628e7a8260b9407b0d44069f5bc1ecab585f35 (patch)
tree162a0d8b597154c1a00c649d44b3bf8fd1e10d2b /api/logic/minecraft/launch
parentb29382c748353856053f07b4756fa98f854244e1 (diff)
downloadMultiMC-13628e7a8260b9407b0d44069f5bc1ecab585f35.tar
MultiMC-13628e7a8260b9407b0d44069f5bc1ecab585f35.tar.gz
MultiMC-13628e7a8260b9407b0d44069f5bc1ecab585f35.tar.lz
MultiMC-13628e7a8260b9407b0d44069f5bc1ecab585f35.tar.xz
MultiMC-13628e7a8260b9407b0d44069f5bc1ecab585f35.zip
NOISSUE merging of strategy into profile, onesix into minecraft
Diffstat (limited to 'api/logic/minecraft/launch')
-rw-r--r--api/logic/minecraft/launch/ModMinecraftJar.cpp52
-rw-r--r--api/logic/minecraft/launch/ModMinecraftJar.h6
2 files changed, 34 insertions, 24 deletions
diff --git a/api/logic/minecraft/launch/ModMinecraftJar.cpp b/api/logic/minecraft/launch/ModMinecraftJar.cpp
index b56f6fca..497a9d2d 100644
--- a/api/logic/minecraft/launch/ModMinecraftJar.cpp
+++ b/api/logic/minecraft/launch/ModMinecraftJar.cpp
@@ -14,31 +14,47 @@
*/
#include "ModMinecraftJar.h"
-#include <launch/LaunchTask.h>
-#include <QStandardPaths>
+#include "launch/LaunchTask.h"
+#include "MMCZip.h"
+#include "minecraft/OpSys.h"
+#include "FileSystem.h"
+#include "minecraft/MinecraftInstance.h"
+#include "minecraft/MinecraftProfile.h"
void ModMinecraftJar::executeTask()
{
- m_jarModTask = m_parent->instance()->createJarModdingTask();
- if(m_jarModTask)
+ auto m_inst = std::dynamic_pointer_cast<MinecraftInstance>(m_parent->instance());
+
+ // nuke obsolete stripped jar(s) if needed
+ if(!FS::ensureFolderPathExists(m_inst->binRoot()))
{
- connect(m_jarModTask.get(), SIGNAL(finished()), this, SLOT(jarModdingFinished()));
- m_jarModTask->start();
- return;
+ emitFailed(tr("Couldn't create the bin folder for Minecraft.jar"));
}
- emitSucceeded();
-}
-
-void ModMinecraftJar::jarModdingFinished()
-{
- if(m_jarModTask->wasSuccessful())
+ auto finalJarPath = QDir(m_inst->binRoot()).absoluteFilePath("minecraft.jar");
+ QFile finalJar(finalJarPath);
+ if(finalJar.exists())
{
- emitSucceeded();
+ if(!finalJar.remove())
+ {
+ emitFailed(tr("Couldn't remove stale jar file: %1").arg(finalJarPath));
+ return;
+ }
}
- else
+
+ // create temporary modded jar, if needed
+ auto profile = m_inst->getMinecraftProfile();
+ auto jarMods = m_inst->getJarMods();
+ if(jarMods.size())
{
- QString reason = tr("jar modding failed because: %1.\n\n").arg(m_jarModTask->failReason());
- emit logLine(reason, MessageLevel::Fatal);
- emitFailed(reason);
+ auto mainJar = profile->getMainJar();
+ QStringList jars, temp1, temp2, temp3, temp4;
+ mainJar->getApplicableFiles(currentSystem, jars, temp1, temp2, temp3, m_inst->getLocalLibraryPath());
+ auto sourceJarPath = jars[0];
+ if(!MMCZip::createModdedJar(sourceJarPath, finalJarPath, jarMods))
+ {
+ emitFailed(tr("Failed to create the custom Minecraft jar file."));
+ return;
+ }
}
+ emitSucceeded();
}
diff --git a/api/logic/minecraft/launch/ModMinecraftJar.h b/api/logic/minecraft/launch/ModMinecraftJar.h
index 1196c487..ab8d7dca 100644
--- a/api/logic/minecraft/launch/ModMinecraftJar.h
+++ b/api/logic/minecraft/launch/ModMinecraftJar.h
@@ -18,7 +18,6 @@
#include <launch/LaunchStep.h>
#include <memory>
-// FIXME: temporary wrapper for existing task.
class ModMinecraftJar: public LaunchStep
{
Q_OBJECT
@@ -31,9 +30,4 @@ public:
{
return false;
}
-private slots:
- void jarModdingFinished();
-
-private:
- std::shared_ptr<Task> m_jarModTask;
};