diff options
author | Sefa Eyeoglu <contact@scrumplex.net> | 2022-04-04 21:01:49 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-04 21:01:49 +0200 |
commit | 5fb096d7b9689ec4f6b45e2db608047b5ed92c34 (patch) | |
tree | d086f6dd0114bb5fe133ebe6a5ca9c347ec1d0bf /launcher/minecraft/launch/VerifyJavaInstall.cpp | |
parent | 115d8b594509501158874205e657987883ebf8f4 (diff) | |
parent | 9180c751d8d6b51e1fc34ce84b2a705954b98d31 (diff) | |
download | PrismLauncher-5fb096d7b9689ec4f6b45e2db608047b5ed92c34.tar.gz PrismLauncher-5fb096d7b9689ec4f6b45e2db608047b5ed92c34.tar.bz2 PrismLauncher-5fb096d7b9689ec4f6b45e2db608047b5ed92c34.zip |
Merge pull request #345 from Scrumplex/handle-incompatible-java
Diffstat (limited to 'launcher/minecraft/launch/VerifyJavaInstall.cpp')
-rw-r--r-- | launcher/minecraft/launch/VerifyJavaInstall.cpp | 109 |
1 files changed, 67 insertions, 42 deletions
diff --git a/launcher/minecraft/launch/VerifyJavaInstall.cpp b/launcher/minecraft/launch/VerifyJavaInstall.cpp index 15acf678..99809f82 100644 --- a/launcher/minecraft/launch/VerifyJavaInstall.cpp +++ b/launcher/minecraft/launch/VerifyJavaInstall.cpp @@ -1,50 +1,75 @@ -#include "VerifyJavaInstall.h" +// SPDX-License-Identifier: GPL-3.0-only +/* + * PolyMC - Minecraft Launcher + * Copyright (C) 2022 Sefa Eyeoglu <contact@scrumplex.net> + * + * 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 + * the Free Software Foundation, version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + * + * This file incorporates work covered by the following copyright and + * permission notice: + * + * Copyright 2013-2021 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. + */ -#include <launch/LaunchTask.h> -#include <minecraft/MinecraftInstance.h> -#include <minecraft/PackProfile.h> -#include <minecraft/VersionFilterData.h> +#include "VerifyJavaInstall.h" -#ifdef major - #undef major -#endif -#ifdef minor - #undef minor -#endif +#include "java/JavaVersion.h" +#include "minecraft/PackProfile.h" +#include "minecraft/MinecraftInstance.h" void VerifyJavaInstall::executeTask() { - auto m_inst = std::dynamic_pointer_cast<MinecraftInstance>(m_parent->instance()); - - auto javaVersion = m_inst->getJavaVersion(); - auto minecraftComponent = m_inst->getPackProfile()->getComponent("net.minecraft"); - - // Java 17 requirement - if (minecraftComponent->getReleaseDateTime() >= g_VersionFilterData.java17BeginsDate) { - if (javaVersion.major() < 17) { - emit logLine("Minecraft 1.18 Pre Release 2 and above require the use of Java 17", - MessageLevel::Fatal); - emitFailed(tr("Minecraft 1.18 Pre Release 2 and above require the use of Java 17")); - return; - } - } - // Java 16 requirement - else if (minecraftComponent->getReleaseDateTime() >= g_VersionFilterData.java16BeginsDate) { - if (javaVersion.major() < 16) { - emit logLine("Minecraft 21w19a and above require the use of Java 16", - MessageLevel::Fatal); - emitFailed(tr("Minecraft 21w19a and above require the use of Java 16")); - return; - } + auto instance = std::dynamic_pointer_cast<MinecraftInstance>(m_parent->instance()); + auto packProfile = instance->getPackProfile(); + auto settings = instance->settings(); + auto storedVersion = settings->get("JavaVersion").toString(); + auto ignoreCompatibility = settings->get("IgnoreJavaCompatibility").toBool(); + + auto compatibleMajors = packProfile->getProfile()->getCompatibleJavaMajors(); + + JavaVersion javaVersion(storedVersion); + + if (compatibleMajors.isEmpty() || compatibleMajors.contains(javaVersion.major())) + { + emitSucceeded(); + return; } - // Java 8 requirement - else if (minecraftComponent->getReleaseDateTime() >= g_VersionFilterData.java8BeginsDate) { - if (javaVersion.major() < 8) { - emit logLine("Minecraft 17w13a and above require the use of Java 8", - MessageLevel::Fatal); - emitFailed(tr("Minecraft 17w13a and above require the use of Java 8")); - return; - } + + + if (ignoreCompatibility) + { + emit logLine(tr("Java major version is incompatible. Things might break."), MessageLevel::Warning); + emitSucceeded(); + return; } - emitSucceeded(); + emit logLine(tr("This instance is not compatible with Java version %1.\n" + "Please switch to one of the following Java versions for this instance:").arg(javaVersion.major()), + MessageLevel::Error); + for (auto major : compatibleMajors) + { + emit logLine(tr("Java version %1").arg(major), MessageLevel::Error); + } + emitFailed(QString("Incompatible Java major version")); } |