Skip to content

Commit

Permalink
NOISSUE Remove FTB and Curse integration
Browse files Browse the repository at this point in the history
This has been requested by Slowpoke, on behalf of both FTB and OverWolf.

Import from locally installed packs from the official clients will be
the replacement, but for now, you will have to do that manually.

It was nice while it lasted.
  • Loading branch information
peterix committed May 19, 2022
1 parent 3304798 commit 0a827ba
Show file tree
Hide file tree
Showing 33 changed files with 0 additions and 3,351 deletions.
2 changes: 0 additions & 2 deletions buildconfig/BuildConfig.h
Original file line number Diff line number Diff line change
Expand Up @@ -96,8 +96,6 @@ class Config
QString FMLLIBS_BASE_URL = "https://files.multimc.org/fmllibs/";
QString TRANSLATIONS_BASE_URL = "https://files.multimc.org/translations/";

QString MODPACKSCH_API_BASE_URL = "https://api.modpacks.ch/";

QString LEGACY_FTB_CDN_BASE_URL = "https://dist.creeper.host/FTB2/";

QString ATL_DOWNLOAD_SERVER_URL = "https://download.nodecdn.net/containers/atl/";
Expand Down
2 changes: 0 additions & 2 deletions launcher/Application.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -856,9 +856,7 @@ Application::Application(int &argc, char **argv) : QApplication(argc, argv)
m_metacache->addBase("general", QDir("cache").absolutePath());
m_metacache->addBase("ATLauncherPacks", QDir("cache/ATLauncherPacks").absolutePath());
m_metacache->addBase("FTBPacks", QDir("cache/FTBPacks").absolutePath());
m_metacache->addBase("ModpacksCHPacks", QDir("cache/ModpacksCHPacks").absolutePath());
m_metacache->addBase("TechnicPacks", QDir("cache/TechnicPacks").absolutePath());
m_metacache->addBase("FlamePacks", QDir("cache/FlamePacks").absolutePath());
m_metacache->addBase("ModrinthPacks", QDir("cache/ModrinthPacks").absolutePath());
m_metacache->addBase("root", QDir::currentPath());
m_metacache->addBase("translations", QDir("translations").absolutePath());
Expand Down
36 changes: 0 additions & 36 deletions launcher/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -504,25 +504,6 @@ set(FTB_SOURCES
modplatform/legacy_ftb/PackHelpers.h
)

set(FLAME_SOURCES
# Flame
modplatform/flame/FlamePackIndex.cpp
modplatform/flame/FlamePackIndex.h
modplatform/flame/PackManifest.h
modplatform/flame/PackManifest.cpp
modplatform/flame/FileResolvingTask.h
modplatform/flame/FileResolvingTask.cpp
)

set(MODPACKSCH_SOURCES
modplatform/modpacksch/FTBPackInstallTask.h
modplatform/modpacksch/FTBPackInstallTask.cpp
modplatform/modpacksch/FTBPackManifest.h
modplatform/modpacksch/FTBPackManifest.cpp
modplatform/modpacksch/MCHPackType.h
modplatform/modpacksch/MCHPackType.cpp
)

set(TECHNIC_SOURCES
modplatform/technic/SingleZipPackInstallTask.h
modplatform/technic/SingleZipPackInstallTask.cpp
Expand Down Expand Up @@ -735,25 +716,11 @@ SET(LAUNCHER_SOURCES
ui/pages/modplatform/atlauncher/AtlPage.cpp
ui/pages/modplatform/atlauncher/AtlPage.h

ui/pages/modplatform/modpacksch/MCHFilterModel.cpp
ui/pages/modplatform/modpacksch/MCHFilterModel.h
ui/pages/modplatform/modpacksch/MCHListModel.cpp
ui/pages/modplatform/modpacksch/MCHListModel.h
ui/pages/modplatform/modpacksch/FtbPage.cpp
ui/pages/modplatform/modpacksch/FtbPage.h
ui/pages/modplatform/modpacksch/CursePage.cpp
ui/pages/modplatform/modpacksch/CursePage.h

ui/pages/modplatform/legacy_ftb/Page.cpp
ui/pages/modplatform/legacy_ftb/Page.h
ui/pages/modplatform/legacy_ftb/ListModel.h
ui/pages/modplatform/legacy_ftb/ListModel.cpp

ui/pages/modplatform/flame/FlameModel.cpp
ui/pages/modplatform/flame/FlameModel.h
ui/pages/modplatform/flame/FlamePage.cpp
ui/pages/modplatform/flame/FlamePage.h

ui/pages/modplatform/modrinth/ModrinthData.h
ui/pages/modplatform/modrinth/ModrinthModel.cpp
ui/pages/modplatform/modrinth/ModrinthModel.h
Expand Down Expand Up @@ -880,11 +847,8 @@ qt5_wrap_ui(LAUNCHER_UI
ui/pages/modplatform/atlauncher/AtlOptionalModDialog.ui
ui/pages/modplatform/atlauncher/AtlPage.ui
ui/pages/modplatform/VanillaPage.ui
ui/pages/modplatform/flame/FlamePage.ui
ui/pages/modplatform/legacy_ftb/Page.ui
ui/pages/modplatform/ImportPage.ui
ui/pages/modplatform/modpacksch/FtbPage.ui
ui/pages/modplatform/modpacksch/CursePage.ui
ui/pages/modplatform/modrinth/ModrinthPage.ui
ui/pages/modplatform/technic/TechnicPage.ui
ui/widgets/InstanceCardWidget.ui
Expand Down
222 changes: 0 additions & 222 deletions launcher/InstanceImportTask.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,6 @@
// FIXME: this does not belong here, it's Minecraft/Flame specific
#include "minecraft/MinecraftInstance.h"
#include "minecraft/PackProfile.h"
#include "modplatform/flame/FileResolvingTask.h"
#include "modplatform/flame/PackManifest.h"
#include "Json.h"
#include <quazipdir.h>
#include "modplatform/modrinth/ModrinthPackManifest.h"
Expand Down Expand Up @@ -105,7 +103,6 @@ void InstanceImportTask::processZipPack()
QStringList blacklist = {"instance.cfg", "manifest.json"};
QString mmcFound = MMCZip::findFolderOfFileInZip(m_packZip.get(), "instance.cfg");
bool technicFound = QuaZipDir(m_packZip.get()).exists("/bin/modpack.jar") || QuaZipDir(m_packZip.get()).exists("/bin/version.json");
QString flameFound = MMCZip::findFolderOfFileInZip(m_packZip.get(), "manifest.json");
QString modrinthFound = MMCZip::findFolderOfFileInZip(m_packZip.get(), "modrinth.index.json");
QString root;
if(!mmcFound.isNull())
Expand All @@ -123,13 +120,6 @@ void InstanceImportTask::processZipPack()
extractDir.cd(".minecraft");
m_modpackType = ModpackType::Technic;
}
else if(!flameFound.isNull())
{
// process as Flame pack
qDebug() << "Flame:" << flameFound;
root = flameFound;
m_modpackType = ModpackType::Flame;
}
else if(!modrinthFound.isNull())
{
// process as Modrinth pack
Expand Down Expand Up @@ -199,9 +189,6 @@ void InstanceImportTask::extractFinished()
case ModpackType::Technic:
processTechnic();
return;
case ModpackType::Flame:
processFlame();
return;
case ModpackType::Modrinth:
processModrinth();
return;
Expand All @@ -217,215 +204,6 @@ void InstanceImportTask::extractAborted()
return;
}

void InstanceImportTask::processFlame()
{
const static QMap<QString,QString> forgemap = {
{"1.2.5", "3.4.9.171"},
{"1.4.2", "6.0.1.355"},
{"1.4.7", "6.6.2.534"},
{"1.5.2", "7.8.1.737"}
};
Flame::Manifest pack;
try
{
QString configPath = FS::PathCombine(m_stagingPath, "manifest.json");
Flame::loadManifest(pack, configPath);
QFile::remove(configPath);
}
catch (const JSONValidationError &e)
{
emitFailed(tr("Could not understand pack manifest:\n") + e.cause());
return;
}
if(!pack.overrides.isEmpty())
{
QString overridePath = FS::PathCombine(m_stagingPath, pack.overrides);
if (QFile::exists(overridePath))
{
QString mcPath = FS::PathCombine(m_stagingPath, "minecraft");
if (!QFile::rename(overridePath, mcPath))
{
emitFailed(tr("Could not rename the overrides folder:\n") + pack.overrides);
return;
}
}
else
{
logWarning(tr("The specified overrides folder (%1) is missing. Maybe the modpack was already used before?").arg(pack.overrides));
}
}

QString forgeVersion;
QString fabricVersion;
for(auto &loader: pack.minecraft.modLoaders)
{
auto id = loader.id;
if(id.startsWith("forge-"))
{
id.remove("forge-");
forgeVersion = id;
continue;
}
if(id.startsWith("fabric-"))
{
id.remove("fabric-");
fabricVersion = id;
continue;
}
logWarning(tr("Unknown mod loader in manifest: %1").arg(id));
}

QString configPath = FS::PathCombine(m_stagingPath, "instance.cfg");
auto instanceSettings = std::make_shared<INISettingsObject>(configPath);
instanceSettings->registerSetting("InstanceType", "Legacy");
instanceSettings->set("InstanceType", "OneSix");
MinecraftInstance instance(m_globalSettings, instanceSettings, m_stagingPath);
auto mcVersion = pack.minecraft.version;
// Hack to correct some 'special sauce'...
if(mcVersion.endsWith('.'))
{
mcVersion.remove(QRegExp("[.]+$"));
logWarning(tr("Mysterious trailing dots removed from Minecraft version while importing pack."));
}
auto components = instance.getPackProfile();
components->buildingFromScratch();
components->setComponentVersion("net.minecraft", mcVersion, true);
if(!forgeVersion.isEmpty())
{
// FIXME: dirty, nasty, hack. Proper solution requires dependency resolution and knowledge of the metadata.
if(forgeVersion == "recommended")
{
if(forgemap.contains(mcVersion))
{
forgeVersion = forgemap[mcVersion];
}
else
{
logWarning(tr("Could not map recommended forge version for Minecraft %1").arg(mcVersion));
}
}
components->setComponentVersion("net.minecraftforge", forgeVersion);
}
if(!fabricVersion.isEmpty())
{
components->setComponentVersion("net.fabricmc.fabric-loader", fabricVersion);
}
if (m_instIcon != "default")
{
instance.setIconKey(m_instIcon);
}
else
{
if(pack.name.contains("Direwolf20"))
{
instance.setIconKey("steve");
}
else if(pack.name.contains("FTB") || pack.name.contains("Feed The Beast"))
{
instance.setIconKey("ftb_logo");
}
else
{
// default to something other than the MultiMC default to distinguish these
instance.setIconKey("flame");
}
}
QString jarmodsPath = FS::PathCombine(m_stagingPath, "minecraft", "jarmods");
QFileInfo jarmodsInfo(jarmodsPath);
if(jarmodsInfo.isDir())
{
// install all the jar mods
qDebug() << "Found jarmods:";
QDir jarmodsDir(jarmodsPath);
QStringList jarMods;
for (auto info: jarmodsDir.entryInfoList(QDir::NoDotAndDotDot | QDir::Files))
{
qDebug() << info.fileName();
jarMods.push_back(info.absoluteFilePath());
}
auto profile = instance.getPackProfile();
profile->installJarMods(jarMods);
// nuke the original files
FS::deletePath(jarmodsPath);
}
instance.setName(m_instName);
m_modIdResolver = new Flame::FileResolvingTask(APPLICATION->network(), pack);
connect(m_modIdResolver.get(), &Flame::FileResolvingTask::succeeded, [&]()
{
auto results = m_modIdResolver->getResults();
m_filesNetJob = new NetJob(tr("Mod download"), APPLICATION->network());
for(auto result: results.files)
{
QString filename = result.fileName;
if(!result.required)
{
filename += ".disabled";
}

auto relpath = FS::PathCombine("minecraft", result.targetFolder, filename);
auto path = FS::PathCombine(m_stagingPath , relpath);

switch(result.type)
{
case Flame::File::Type::Folder:
{
logWarning(tr("This 'Folder' may need extracting: %1").arg(relpath));
// fall-through intentional, we treat these as plain old mods and dump them wherever.
}
case Flame::File::Type::SingleFile:
case Flame::File::Type::Mod:
{
qDebug() << "Will download" << result.url << "to" << path;
auto dl = Net::Download::makeFile(result.url, path);
m_filesNetJob->addNetAction(dl);
break;
}
case Flame::File::Type::Modpack:
logWarning(tr("Nesting modpacks in modpacks is not implemented, nothing was downloaded: %1").arg(relpath));
break;
case Flame::File::Type::Cmod2:
case Flame::File::Type::Ctoc:
case Flame::File::Type::Unknown:
logWarning(tr("Unrecognized/unhandled PackageType for: %1").arg(relpath));
break;
}
}
m_modIdResolver.reset();
connect(m_filesNetJob.get(), &NetJob::succeeded, this, [&]()
{
m_filesNetJob.reset();
emitSucceeded();
}
);
connect(m_filesNetJob.get(), &NetJob::failed, [&](QString reason)
{
m_filesNetJob.reset();
emitFailed(reason);
});
connect(m_filesNetJob.get(), &NetJob::progress, [&](qint64 current, qint64 total)
{
setProgress(current, total);
});
setStatus(tr("Downloading mods..."));
m_filesNetJob->start();
}
);
connect(m_modIdResolver.get(), &Flame::FileResolvingTask::failed, [&](QString reason)
{
m_modIdResolver.reset();
emitFailed(tr("Unable to resolve mod IDs:\n") + reason);
});
connect(m_modIdResolver.get(), &Flame::FileResolvingTask::progress, [&](qint64 current, qint64 total)
{
setProgress(current, total);
});
connect(m_modIdResolver.get(), &Flame::FileResolvingTask::status, [&](QString status)
{
setStatus(status);
});
m_modIdResolver->start();
}

void InstanceImportTask::processTechnic()
{
shared_qobject_ptr<Technic::TechnicPackProcessor> packProcessor = new Technic::TechnicPackProcessor();
Expand Down
1 change: 0 additions & 1 deletion launcher/InstanceImportTask.h
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,6 @@ private slots:
Unknown,
MultiMC,
Technic,
Flame,
Modrinth,
} m_modpackType = ModpackType::Unknown;
};
Loading

28 comments on commit 0a827ba

@flarefluffsune
Copy link

@flarefluffsune flarefluffsune commented on 0a827ba May 19, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I hate the FTB and CurseForge apps, Overwolf keeps doing dumb shit when its running and the fact I need Overwolf to begin with is the most needless integration since Windows and Edge. That's why I started using MultiMC when a friend recommended it.

Going to be disappointing to lose pack downloading but all the more reason to make my own damn packs!

@dries007
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So long and thanks for all the fish!

It's been an honor to be part of this project, even in a small way.

@PaulZappia
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

God this really needs to be revoked. So many modpacks are just broken now until all CurseForge mods move over to Modrinth, which won't be happening for a while.
There is literally no reason why this should be exclusive to the CurseForge launcher, which is mid at best.

@PhaseRush
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It do be like that sometimes.

@sorayori
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overwolf sucks. The CurseForge app sucks. :/

@LoboMetalurgico
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The curseforge launcher on linux only supports WoW (which doesn't even natively support linux :/). I think it's amazing that they are forcing multimc to drop this integration, which was the best way to be able to play curse modpacks on linux, as they DON'T SUPPORT LINUX ON THEIR LAUNCHER.

@aliquis0001
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Disappointed to see this. Curseforge app is awful and not having to use it was one of the biggest multiMC perks.

@zvyap
Copy link

@zvyap zvyap commented on 0a827ba May 20, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think MultiMC can add something like "plugin" system
so thrid party can add this feature back

I NEVER USE CURSEFORGE OR OVERWOLF
INSTEAD I USE MULTIMC FETCH MODPACK FROM THEM

@haveachin
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is why we can't have nice things.

@foul-fortune-feline
Copy link

@foul-fortune-feline foul-fortune-feline commented on 0a827ba May 20, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oofta. I'm going to miss being able to ever use curseforge modpacks at all in my life ever while gaming on linux because overwolf is completely useless :<

I idly and accidentally clicked "update" and I'll never forgive myself.

@foul-fortune-feline
Copy link

@foul-fortune-feline foul-fortune-feline commented on 0a827ba May 20, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I hate the FTB and CurseForge apps, Overwolf keeps doing dumb shit when its running and the fact I need Overwolf to begin with is the most needless integration since Windows and Edge. That's why I started using MultiMC when a friend recommended it.

Going to be disappointing to lose pack downloading but all the more reason to make my own damn packs!

We aren't just losing pack downloading, it can't even parse the data from curseforge packs anymore. You can go on the official website, download it there, and try to load it from zip. MultiMC will say it doesn't recognize the format :,<

I'm hoping somebody makes another tool to make it into a universally parseable format instead of Curseforge's exclusive bastard format. (please don't make it me I've had enough piddling around in an ide for a while tyvm i just want to play the mined craff)

@Mattabase
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good a time as any to switch launcher folks, Forks of MultiMC exist, I suggest googling one. I have not looked back since switching.

@EzioTheDeadPoet
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a sad day. But hey here is hope more people will move to actually open standards killing those proprietary data feeding and greedy companies, that prefer data collection over actually developing tools users want.
Guess I won't be using modpacks from those sites for a while and keep sharing whole instances with my friends. If they decide to not support my mod manager of choice I decide to not use their files the way they want.

@FakeDomi
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good a time as any to switch launcher folks, Forks of MultiMC exist, I suggest googling one. I have not looked back since switching.

overwolf will sooner or later disable access to the new third party api for other launchers for violating their "fair partnership" agreement (offering products competing with overwolf's trash)
and even until then a single mod author can screw modpack players over by enabling curse/ow only downloads.

haven't cared much for modrinth before but i really hope it does take off now that people have a good reason to leave.
ofc launchers would need to support that too but at least modrinth isn't trying to destroy third parties with underhanded tactics.

@Nolij
Copy link

@Nolij Nolij commented on 0a827ba May 20, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the push the community needed, Curse! You've solidified Modrinth as the superior repository.

@gudenau
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's a shame that MMC is doing this.

There isn't another half decent mod repository out there, guess it's time to use a fork.

@flarefluffsune
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's a shame that MMC is doing this.

There isn't another half decent mod repository out there, guess it's time to use a fork.

MMC doesn't want to remove it, CurseForge is telling them to remove it and the API is going to be private now from what I understand.

@gudenau
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's a shame that MMC is doing this.
There isn't another half decent mod repository out there, guess it's time to use a fork.

MMC doesn't want to remove it, CurseForge is telling them to remove it and the API is going to be private now from what I understand.

"Private", they have a client so the API can be reverse engineered just like before.

@Nolij
Copy link

@Nolij Nolij commented on 0a827ba May 20, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's a shame that MMC is doing this.

There isn't another half decent mod repository out there, guess it's time to use a fork.

Don't blame MultiMC (well, for this anyway, not going to take a stance on the whole drama thing). This is based off of assumptions, I don't have inside knowledge, but given how these things go I can say with decent confidence that they weren't strictly speaking forced to do this, but they would've been if they didn't comply with Curse's "request". Forks will likely follow for the same reason MultiMC did, or we might see Curse take them down.

As for alternatives, Modrinth exists, and it's quite good. The only reason it's "worse" is because some mod authors haven't listed their mods on it. The platform itself is there, and I'm sure MultiMC will be adding support for it if they don't already have it given this change.

EDIT: LOL no. Reverse engineering a web API when a company tells you not to is asking for them to slap you with a DMCA. Whether or not it would be a valid DMCA is debatable but only really academically as there's no way MultiMC or any similar project would have the resources to even attempt fighting it.

@gudenau
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's a shame that MMC is doing this.
There isn't another half decent mod repository out there, guess it's time to use a fork.

Don't blame MultiMC (well, for this anyway, not going to take a stance on the whole drama thing). This is based off of assumptions, I don't have inside knowledge, but given how these things go I can say with decent confidence that they weren't strictly speaking forced to do this, but they would've been if they didn't comply with Curse's "request". Forks will likely follow for the same reason MultiMC did, or we might see Curse take them down.

As for alternatives, Modrinth exists, and it's quite good. The only reason it's "worse" is because some mod authors haven't listed their mods on it. The platform itself is there, and I'm sure MultiMC will be adding support for it if they don't already have it given this change.

EDIT: LOL no. Reverse engineering a web API when a company tells you not to is asking for them to slap you with a DMCA. Whether or not it would be a valid DMCA is debatable but only really academically as there's no way MultiMC or any similar project would have the resources to even attempt fighting it.

Reversing an API for interoperability isn't covered under DMCA.

Modrinth banned me for pointing out flaws in their website/Discord guild. I won't go into more details to spare srama, but I will be boycotting them for the foreseeable future.

@Nolij
Copy link

@Nolij Nolij commented on 0a827ba May 20, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's a shame that MMC is doing this.
There isn't another half decent mod repository out there, guess it's time to use a fork.

Don't blame MultiMC (well, for this anyway, not going to take a stance on the whole drama thing). This is based off of assumptions, I don't have inside knowledge, but given how these things go I can say with decent confidence that they weren't strictly speaking forced to do this, but they would've been if they didn't comply with Curse's "request". Forks will likely follow for the same reason MultiMC did, or we might see Curse take them down.
As for alternatives, Modrinth exists, and it's quite good. The only reason it's "worse" is because some mod authors haven't listed their mods on it. The platform itself is there, and I'm sure MultiMC will be adding support for it if they don't already have it given this change.
EDIT: LOL no. Reverse engineering a web API when a company tells you not to is asking for them to slap you with a DMCA. Whether or not it would be a valid DMCA is debatable but only really academically as there's no way MultiMC or any similar project would have the resources to even attempt fighting it.

Reversing an API for interoperability isn't covered under DMCA.

Modrinth banned me for pointing out flaws in their website/Discord guild. I won't go into more details to spare srama, but I will be boycotting them for the foreseeable future.

As I said: it doesn't matter. They're going to make the (in your opinion, baseless) DMCA claim if MultiMC or any other launcher implements their new API reverse-engineered and regardless of how baseless it is MultiMC (or any other community-driven launcher) isn't going to have the resources to fight it. No community project is going to try and take on a company when at risk of a DMCA unless it's their primary purpose, as it would require them to be willing to be fully taken down instead of just continuing without that part of the project (or for one of their supporters to be vastly wealthy, willing to spend that wealth to find a DMCA, and everyone maintaining the project to trust that they will help them fight it, all of which are highly unlikely).

Given what I know about Modrinth I'd be surprised if they didn't have good reason, but even if they didn't, you should also be upset with Curse. They're going out of their way to force you to use their garbage launcher by taking away your choice to use another with their repository.

It's also worth noting that unless you don't have an adblocker or post mods to Modrinth your boycotting achieves nothing as they gain nothing from you using their site (if anything you'd be taking up bandwidth they'd probably want to give to someone who wants to use their service), so there's no reason to make your life more difficult by not using them when they're becoming the better option. Curse on the other hand will gain from you now that you'll be forced to use their launcher no matter what you do as long as you use them, so a more effective boycott would be on Curse, and I'd say even assuming they were being unreasonable when they banned you that Curse is at least just as deserving of a boycott based on this move.

@gudenau
Copy link

@gudenau gudenau commented on 0a827ba May 20, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's a shame that MMC is doing this.
There isn't another half decent mod repository out there, guess it's time to use a fork.

Don't blame MultiMC (well, for this anyway, not going to take a stance on the whole drama thing). This is based off of assumptions, I don't have inside knowledge, but given how these things go I can say with decent confidence that they weren't strictly speaking forced to do this, but they would've been if they didn't comply with Curse's "request". Forks will likely follow for the same reason MultiMC did, or we might see Curse take them down.
As for alternatives, Modrinth exists, and it's quite good. The only reason it's "worse" is because some mod authors haven't listed their mods on it. The platform itself is there, and I'm sure MultiMC will be adding support for it if they don't already have it given this change.
EDIT: LOL no. Reverse engineering a web API when a company tells you not to is asking for them to slap you with a DMCA. Whether or not it would be a valid DMCA is debatable but only really academically as there's no way MultiMC or any similar project would have the resources to even attempt fighting it.

Reversing an API for interoperability isn't covered under DMCA.
Modrinth banned me for pointing out flaws in their website/Discord guild. I won't go into more details to spare srama, but I will be boycotting them for the foreseeable future.

As I said: it doesn't matter. They're going to make the (in your opinion, baseless) DMCA claim if MultiMC or any other launcher implements their new API reverse-engineered and regardless of how baseless it is MultiMC (or any other community-driven launcher) isn't going to have the resources to fight it.

Given what I know about Modrinth I'd be surprised if they didn't have good reason, but even if they didn't, you should also be upset with Curse. They're going out of their way to force you to use their garbage launcher by taking away your choice to use another with their repository.

It's also worth noting that unless you don't have an adblocker or post mods to Modrinth your boycotting achieves nothing as they gain nothing from you using their site (if anything you'd be taking up bandwidth they'd probably want to give to someone who wants to use their service), so there's no reason to make your life more difficult by not using them when they're becoming the better option. Curse on the other hand will gain from you now that you'll be forced to use their launcher no matter what you do as long as you use them, so a more effective boycott would be on Curse, and I'd say even assuming they were being unreasonable when they banned you that Curse is at least just as deserving of a boycott based on this move.

It does hurt Modrinth because I won't be driving traffic to their site. I used to put every mod I made on there. This move from Curse is at least somewhat reasonable and has a valid motive behind it. Sure it sucks, but it makes sense.

Edit:
GitHub (aka Microsoft) will help you with a bogus claim.

@Nolij
Copy link

@Nolij Nolij commented on 0a827ba May 20, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Have fun boycotting yourself then, as you'll be cutting yourself off from any user of a non-Curse launcher, and I sincerely doubt they're going to be able to force a monopoly given the fact that everyone else is fine with Modrinth and now it's their only alternative to using Curse.

Also, I don't care if something a company does "makes sense" if the only reason it makes sense is that they want more money, and that thing makes my life more difficult if I want to use their service. To me that's reason to look for alternatives and, if possible, stop using them. Companies have to make money, I get it, but they can do that without negatively impacting their users in a blatantly anti-competitive way like what Curse is doing with this.

@gudenau
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Have fun boycotting yourself then, as you'll be cutting yourself off from any user of a non-Curse launcher, and I sincerely doubt they're going to be able to force a monopoly given the fact that everyone else is fine with Modrinth and now it's their only alternative to using Curse.

Also, I don't care if something a company does "makes sense" if the only reason it makes sense is that they want more money, and that thing makes my life more difficult if I want to use their service. To me that's reason to look for alternatives and, if possible, stop using them. Companies have to make money, I get it, but they can do that without negatively impacting their users in a blatantly anti-competitive way like what Curse is doing with this.

Not everyone is okay with Modrinth, at best it's 50/50. When something better rolls around I'll support it.

@foul-fortune-feline
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I literally don't see how anyone could prefer curse to modrinth for any reason other than the fact it's more established. I've published to modrinth and it's easy as pie, and idk how anyone could go "ah yes, I prefer having to choose between filtering by minecraft version and filtering by loader, and I love not having the ability to filter by more than one version at a time!". And real time search as you type isn't inconvenient

I think the UI is cleaner but that's a matter of subjective opinion. Fact is tho, modrinth is far more feature rich and constantly innovating. These days curse is more likely to remove a feature than to add one.

@PureFallen
Copy link

@PureFallen PureFallen commented on 0a827ba May 21, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

FTB and Curse's decision to further restrict third-party integration so that users have to use their software only to be flooded with ads and monetized by tracking and profiling surely marks one of the darkest days in the history of the modding community. There will never be all developers switching to Modrinth, simply because many in the community are no longer active. Even if they do, it doesn't guarantee that Modrinth itself will get any bad ideas once given the opportunity of a huge reach.
The whole thing calls for a decentralized solution for the redistribution of Minecraft mods to eliminate the failure of a centralized instance in the long run.

@neverabsolute
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

FTB and Curse's decision to further restrict third-party integration so that users have to use their software only to be flooded with ads and monetized by tracking and profiling surely marks one of the darkest days in the history of the modding community. There will never be all developers switching to Modrinth, simply because many in the community are no longer active. Even if they do, it doesn't guarantee that Modrinth itself will get any bad ideas once given the opportunity of a huge reach. The whole thing calls for a decentralized solution for the redistribution of Minecraft mods to eliminate the failure of a centralized instance in the long run.

agreed, overwolf is straight up bloatware/pup and the curseforge launcher is extremely slow + has targeted ads. will be checking out Modrinth asap.

@IoIxD
Copy link

@IoIxD IoIxD commented on 0a827ba May 24, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"Private", they have a client so the API can be reverse engineered just like before.

"Private" means authentication will be required to access the API. I imagine they'll be prepared to making it a living hell to even get obfuscated data when you aren't using the intended program.
Then again I'm not entirely sure how cyber security works. But I'm pretty sure that even if they can't make API access impossible, they can make it very hard.
And yes, they can also just be a bully and take down reverse engineering attempts, and still get what they want even if they lose.
Have I ever told you the story of Bleem!, the company that won multiple lawsuits against Sony for making a PS1 emulator, but ceased operation because they lost so much money on petty lawsuits? Github reinstated youtube-dl for PR, its stupid to rely on them as a defense for something that can spark a petty lawsuit and still waste somebody thousands of dollars.

Please sign in to comment.