From 851f5f05142fda1c500994f98917ea838b77bacb Mon Sep 17 00:00:00 2001 From: DeathsGun Date: Wed, 6 Oct 2021 09:28:29 +0200 Subject: [PATCH] Overwrite files to delete and delete them fully on restart Windows doesn't allow you to delete files while there open in a program. So I can't delete the jars on Windows directly. So write "MODMANAGER" into the jar to make it invalid. After that when minecraft restarts it will be deleted by ModManager Signed-off-by: DeathsGun --- .../xyz/deathsgun/modmanager/ModManager.kt | 1 + .../modmanager/update/UpdateManager.kt | 23 +++++++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/xyz/deathsgun/modmanager/ModManager.kt b/src/main/kotlin/xyz/deathsgun/modmanager/ModManager.kt index 40c807e..7898bdc 100644 --- a/src/main/kotlin/xyz/deathsgun/modmanager/ModManager.kt +++ b/src/main/kotlin/xyz/deathsgun/modmanager/ModManager.kt @@ -68,6 +68,7 @@ class ModManager : ClientModInitializer { provider[modrinth.getName().lowercase()] = modrinth updateProvider[modrinth.getName().lowercase()] = modrinth GlobalScope.launch { + update.fullyDeleteMods() update.checkUpdates() icons.cleanupCache() } diff --git a/src/main/kotlin/xyz/deathsgun/modmanager/update/UpdateManager.kt b/src/main/kotlin/xyz/deathsgun/modmanager/update/UpdateManager.kt index ca268aa..a8c1746 100644 --- a/src/main/kotlin/xyz/deathsgun/modmanager/update/UpdateManager.kt +++ b/src/main/kotlin/xyz/deathsgun/modmanager/update/UpdateManager.kt @@ -47,6 +47,7 @@ import java.net.http.HttpRequest import java.net.http.HttpResponse import java.nio.file.Files import java.nio.file.Path +import java.nio.file.StandardOpenOption import java.security.MessageDigest import java.time.Duration import java.util.zip.ZipFile @@ -388,8 +389,8 @@ class UpdateManager { try { Files.delete(this) } catch (e: Exception) { - logger.info("Error while deleting {} trying on exit again", this.absolutePathString()) - this.toFile().deleteOnExit() + logger.info("Error while deleting {} trying on restart again", this.absolutePathString()) + Files.writeString(this, "MODMANAGER", StandardOpenOption.WRITE) } } @@ -420,4 +421,22 @@ class UpdateManager { return URI("dummy", url.replace("\t", ""), null).rawSchemeSpecificPart } + fun fullyDeleteMods() { + val jars = + FileUtils.listFiles(FabricLoader.getInstance().gameDir.resolve("mods").toFile(), arrayOf("jar"), true) + for (jar in jars) { + val content = try { + Files.readString(jar.toPath()) + } catch (e: Exception) { + logger.info("Failed to read file ignoring it: {}", e.message) + "" + } + if (content != "MODMANGER") { + continue + } + logger.info("Deleting {}", jar.absolutePath) + jar.delete() + } + } + } \ No newline at end of file