diff --git a/CHANGELOG.md b/CHANGELOG.md index 559ff8fe..7518bfb2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,7 +22,7 @@ * Make `queueInMainThread` take in a movable callback (0c35a92) * Add `CCMenuItemExt` for lambda versions of CCMenuItem classes (de73317) * Add `scrollToTop` for ScrollLayer (7071bb1) - * Add a new `Task` class for generic task implementations + * Add a new `Task` class for generic asynchronous task implementations * Documentation can be found [here](https://docs.geode-sdk.org/tutorials/tasks/) * Add a special task named `WebTask` for handling web requests * Fix `Unzip` crash on missing progress callback (1145426) diff --git a/loader/src/server/Server.cpp b/loader/src/server/Server.cpp index 551fefcd..48494dd7 100644 --- a/loader/src/server/Server.cpp +++ b/loader/src/server/Server.cpp @@ -327,10 +327,19 @@ Result<ServerModVersion> ServerModVersion::parse(matjson::Value const& raw) { auto obj = incompat.obj(); ModMetadata::Incompatibility incompatibility; - obj.needs("mod_id").validate(MiniFunction<bool(std::string const&)>(&ModMetadata::validateID)).into(incompatibility.id); - obj.needs("version").into(incompatibility.version); obj.has("importance").into(incompatibility.importance); + auto modIdValue = obj.needs("mod_id"); + + // Do not validate if we have a supersede, maybe the old ID is invalid + if (incompatibility.importance == ModMetadata::Incompatibility::Importance::Superseded) { + modIdValue.into(incompatibility.id); + } else { + modIdValue.validate(MiniFunction<bool(std::string const&)>(&ModMetadata::validateID)).into(incompatibility.id); + } + + obj.needs("version").into(incompatibility.version); + // Check if this incompatability is installed, and if so assign the `mod` member to mark that auto mod = Loader::get()->getInstalledMod(incompatibility.id); if (mod && incompatibility.version.compare(mod->getVersion())) {