@@ -23,9 +23,7 @@ import kotlinx.serialization.ExperimentalSerializationApi
2323import kotlinx.serialization.decodeFromString
2424import kotlinx.serialization.json.Json
2525import net.fabricmc.loader.api.FabricLoader
26- import net.fabricmc.loader.api.SemanticVersion
2726import net.fabricmc.loader.api.metadata.ModMetadata
28- import net.fabricmc.loader.util.version.VersionDeserializer
2927import net.minecraft.text.TranslatableText
3028import org.apache.commons.io.FileUtils
3129import org.apache.logging.log4j.LogManager
@@ -99,7 +97,12 @@ class UpdateManager {
9997 }
10098 var result = updateProvider.getVersionsForMod(metadata.id)
10199 if (result is VersionResult .Success ) {
102- val version = findLatestCompatible(metadata.version.friendlyString, result.versions)
100+ val version = VersionFinder .findUpdate(
101+ metadata.version.friendlyString,
102+ ModManager .getMinecraftVersion(),
103+ ModManager .modManager.config.updateChannel,
104+ result.versions
105+ )
103106 if (version == null ) {
104107 logger.info(" No update for {} found!" , metadata.id)
105108 ModManager .modManager.setModState(metadata.id, metadata.id, ModState .INSTALLED )
@@ -142,7 +145,12 @@ class UpdateManager {
142145 }
143146 is VersionResult .Success -> result.versions
144147 }
145- val version = findLatestCompatible(metadata.version.friendlyString, versions)
148+ val version = VersionFinder .findUpdate(
149+ metadata.version.friendlyString,
150+ ModManager .getMinecraftVersion(),
151+ ModManager .modManager.config.updateChannel,
152+ versions
153+ )
146154 if (version == null ) {
147155 logger.info(" No update for {} found!" , metadata.id)
148156 ModManager .modManager.setModState(metadata.id, mod.id, ModState .INSTALLED )
@@ -183,7 +191,12 @@ class UpdateManager {
183191 }
184192 is VersionResult .Success -> result.versions
185193 }
186- val version = findLatestCompatible(metadata.version.friendlyString, versions)
194+ val version = VersionFinder .findUpdate(
195+ metadata.version.friendlyString,
196+ ModManager .getMinecraftVersion(),
197+ ModManager .modManager.config.updateChannel,
198+ versions
199+ )
187200 if (version == null ) {
188201 logger.info(" No update for {} found!" , metadata.id)
189202 ModManager .modManager.setModState(metadata.id, id, ModState .INSTALLED )
@@ -212,7 +225,12 @@ class UpdateManager {
212225 is VersionResult .Error -> return ModInstallResult .Error (result.text, result.cause)
213226 is VersionResult .Success -> result.versions
214227 }
215- val version = findLatestCompatible(" 0.0.0.0" , versions)
228+ val version = VersionFinder .findUpdate(
229+ " 0.0.0.0" ,
230+ ModManager .getMinecraftVersion(),
231+ ModManager .modManager.config.updateChannel,
232+ versions
233+ )
216234 ? : return ModInstallResult .Error (TranslatableText (" modmanager.error.noCompatibleModVersionFound" ))
217235
218236 val dir = FabricLoader .getInstance().gameDir.resolve(" mods" )
@@ -258,47 +276,6 @@ class UpdateManager {
258276 }
259277 }
260278
261- private fun findLatestCompatible (installedVersion : String , versions : List <Version >): Version ? {
262- var latest: Version ? = null
263- var latestVersion: SemanticVersion ? = null
264- var installed: Version ? = null
265- val installVersion =
266- VersionDeserializer .deserializeSemantic(installedVersion)
267- for (version in versions) {
268- if (version.version == installedVersion) {
269- installed = version
270- }
271- if (! version.gameVersions.contains(ModManager .getMinecraftVersion()) ||
272- ! ModManager .modManager.config.isReleaseAllowed(version.type)
273- ) {
274- continue
275- }
276- val ver = try {
277- VersionDeserializer .deserializeSemantic(version.version) // Remove additional info from version
278- } catch (e: Exception ) {
279- if (latestVersion == null || version.releaseDate > latest?.releaseDate) {
280- logger.info(" Setting version {} via release date" , version.version)
281- latest = version
282- latestVersion = null
283- continue
284- }
285- logger.warn(" Skipping error producing version {}" , version.version)
286- continue
287- }
288- if (latestVersion == null || ver > latestVersion || version.releaseDate > latest?.releaseDate) {
289- latest = version
290- latestVersion = ver
291- }
292- }
293- if (installed != null && installed.releaseDate > latest?.releaseDate) {
294- return null
295- }
296- if (latestVersion?.compareTo(installVersion) == 0 ) {
297- return null
298- }
299- return latest
300- }
301-
302279 fun updateMod (update : Update ): ModUpdateResult {
303280 val oldUpdate = FabricLoader .getInstance().allMods.find { it.metadata.id == update.fabricId }
304281 ? : return ModUpdateResult .Error (TranslatableText (" modmanager.error.container.notFound" ))
0 commit comments