modded start fix
This commit is contained in:
+31
-2
@@ -94,6 +94,23 @@ QStringList GameLauncher::missingFiles(const LaunchOptions &options,
|
|||||||
return missing;
|
return missing;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
// -DignoreList у Forge 1.17+ — список префиксов имён файлов, которые
|
||||||
|
// BootstrapLauncher не берёт в слой модулей. Сравнение идёт по началу имени.
|
||||||
|
bool ignoreListCovers(const QString &ignoreListArgument, const QString &fileName)
|
||||||
|
{
|
||||||
|
const QString value = ignoreListArgument.mid(QStringLiteral("-DignoreList=").size());
|
||||||
|
const QStringList prefixes = value.split(u',', Qt::SkipEmptyParts);
|
||||||
|
for (const QString &prefix : prefixes) {
|
||||||
|
if (!prefix.isEmpty() && fileName.startsWith(prefix))
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace
|
||||||
|
|
||||||
QStringList GameLauncher::buildArguments(const LaunchOptions &options,
|
QStringList GameLauncher::buildArguments(const LaunchOptions &options,
|
||||||
const MinecraftVersion &version,
|
const MinecraftVersion &version,
|
||||||
const QString &nativesDir)
|
const QString &nativesDir)
|
||||||
@@ -153,9 +170,21 @@ QStringList GameLauncher::buildArguments(const LaunchOptions &options,
|
|||||||
arguments << QStringLiteral("-Xmx%1M").arg(options.maxMemoryMb);
|
arguments << QStringLiteral("-Xmx%1M").arg(options.maxMemoryMb);
|
||||||
arguments += options.extraJvmArgs;
|
arguments += options.extraJvmArgs;
|
||||||
|
|
||||||
|
// Forge 1.17+ собирает слой модулей из classpath, пропуская всё, чьё имя
|
||||||
|
// начинается с записи в -DignoreList. Ванильный клиентский jar записан там
|
||||||
|
// как ${version_name}.jar — с расчётом на лаунчер Mojang, который кладёт в
|
||||||
|
// classpath jar самого профиля. Своего jar у профиля Forge нет, мы кладём
|
||||||
|
// родительский, и без его имени в списке он становится вторым модулем с
|
||||||
|
// классами Minecraft: «Modules minecraft and _1._20._1 export package ...».
|
||||||
|
const QString clientJarName = QFileInfo(version.clientJarPath).fileName();
|
||||||
|
|
||||||
for (const QString &argument : version.jvmArgs) {
|
for (const QString &argument : version.jvmArgs) {
|
||||||
const QString resolved = substitute(argument, variables);
|
QString resolved = substitute(argument, variables);
|
||||||
if (!resolved.contains(QStringLiteral("${")))
|
if (resolved.contains(QStringLiteral("${")))
|
||||||
|
continue;
|
||||||
|
if (!clientJarName.isEmpty() && resolved.startsWith(QLatin1String("-DignoreList="))
|
||||||
|
&& !ignoreListCovers(resolved, clientJarName))
|
||||||
|
resolved += u',' + clientJarName;
|
||||||
arguments << resolved;
|
arguments << resolved;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user