diff --git a/api/logic/CMakeLists.txt b/api/logic/CMakeLists.txt index 87908363..4514d8c3 100644 --- a/api/logic/CMakeLists.txt +++ b/api/logic/CMakeLists.txt @@ -200,6 +200,8 @@ set(MINECRAFT_SOURCES minecraft/onesix/OneSixProfileStrategy.h minecraft/onesix/OneSixVersionFormat.cpp minecraft/onesix/OneSixVersionFormat.h + minecraft/launch/CreateServerResourcePacksFolder.cpp + minecraft/launch/CreateServerResourcePacksFolder.h minecraft/launch/ModMinecraftJar.cpp minecraft/launch/ModMinecraftJar.h minecraft/launch/DirectJavaLaunch.cpp diff --git a/api/logic/minecraft/MinecraftInstance.cpp b/api/logic/minecraft/MinecraftInstance.cpp index 8cc4f805..f706c16d 100644 --- a/api/logic/minecraft/MinecraftInstance.cpp +++ b/api/logic/minecraft/MinecraftInstance.cpp @@ -1,4 +1,5 @@ #include "MinecraftInstance.h" +#include #include #include #include @@ -433,6 +434,12 @@ std::shared_ptr MinecraftInstance::createLaunchTask(AuthSessionPtr s process->appendStep(step); } + // create the server-resource-packs folder (workaround for Minecraft bug MCL-3732) + { + auto step = std::make_shared(pptr); + process->appendStep(step); + } + // extract native jars if needed auto jars = getNativeJars(); if(jars.size()) diff --git a/api/logic/minecraft/launch/CreateServerResourcePacksFolder.cpp b/api/logic/minecraft/launch/CreateServerResourcePacksFolder.cpp new file mode 100644 index 00000000..9f9041d0 --- /dev/null +++ b/api/logic/minecraft/launch/CreateServerResourcePacksFolder.cpp @@ -0,0 +1,19 @@ +#include "CreateServerResourcePacksFolder.h" +#include "minecraft/MinecraftInstance.h" +#include "launch/LaunchTask.h" +#include "FileSystem.h"" + +CreateServerResourcePacksFolder::CreateServerResourcePacksFolder(LaunchTask* parent): LaunchStep(parent) +{ +} + +void CreateServerResourcePacksFolder::executeTask() +{ + auto instance = m_parent->instance(); + std::shared_ptr minecraftInstance = std::dynamic_pointer_cast(instance); + if(!FS::ensureFolderPathExists(FS::PathCombine(minecraftInstance->minecraftRoot(), "server-resource-packs"))) + { + emit logLine(tr("Couldn't create the 'server-resource-packs' folder"), MessageLevel::Error); + } + emitSucceeded(); +} diff --git a/api/logic/minecraft/launch/CreateServerResourcePacksFolder.h b/api/logic/minecraft/launch/CreateServerResourcePacksFolder.h new file mode 100644 index 00000000..d35ccc69 --- /dev/null +++ b/api/logic/minecraft/launch/CreateServerResourcePacksFolder.h @@ -0,0 +1,35 @@ +/* Copyright 2013-2016 MultiMC Contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#include +#include +#include + +// HACK: this is a workaround for MCL-3732 - 'server-resource-packs' folder is created. +class CreateServerResourcePacksFolder: public LaunchStep +{ + Q_OBJECT +public: + explicit CreateServerResourcePacksFolder(LaunchTask *parent); + virtual void executeTask(); + virtual bool canAbort() const + { + return false; + } +}; + + diff --git a/api/logic/minecraft/launch/DirectJavaLaunch.cpp b/api/logic/minecraft/launch/DirectJavaLaunch.cpp index c46cdcd4..1f1fb414 100644 --- a/api/logic/minecraft/launch/DirectJavaLaunch.cpp +++ b/api/logic/minecraft/launch/DirectJavaLaunch.cpp @@ -31,12 +31,6 @@ void DirectJavaLaunch::executeTask() std::shared_ptr minecraftInstance = std::dynamic_pointer_cast(instance); QStringList args = minecraftInstance->javaArguments(); - // HACK: this is a workaround for MCL-3732 - 'server-resource-packs' is created. - if(!FS::ensureFolderPathExists(FS::PathCombine(minecraftInstance->minecraftRoot(), "server-resource-packs"))) - { - emit logLine(tr("Couldn't create the 'server-resource-packs' folder"), MessageLevel::Error); - } - args.append("-Djava.library.path=" + minecraftInstance->getNativePath()); auto classPathEntries = minecraftInstance->getClassPath(); diff --git a/api/logic/minecraft/launch/LauncherPartLaunch.cpp b/api/logic/minecraft/launch/LauncherPartLaunch.cpp index 5f233700..bc71fe28 100644 --- a/api/logic/minecraft/launch/LauncherPartLaunch.cpp +++ b/api/logic/minecraft/launch/LauncherPartLaunch.cpp @@ -33,13 +33,6 @@ void LauncherPartLaunch::executeTask() m_launchScript = minecraftInstance->createLaunchScript(m_session); QStringList args = minecraftInstance->javaArguments(); - - // HACK: this is a workaround for MCL-3732 - 'server-resource-packs' is created. - if(!FS::ensureFolderPathExists(FS::PathCombine(minecraftInstance->minecraftRoot(), "server-resource-packs"))) - { - emit logLine(tr("Couldn't create the 'server-resource-packs' folder"), MessageLevel::Error); - } - QString allArgs = args.join(", "); emit logLine("Java Arguments:\n[" + m_parent->censorPrivateInfo(allArgs) + "]\n\n", MessageLevel::MultiMC);