From fef3d66e17cce18d6f846e7bafe87ea807968ac0 Mon Sep 17 00:00:00 2001 From: Moritz Zwerger Date: Tue, 19 Dec 2023 15:29:29 +0100 Subject: [PATCH] mod loader: ignore non `.class` files, verbose logging, replace "/" with File.separator --- .../modding/loader/phase/LoadingPhaseTest.kt | 2 +- .../directory/DirectoryAssetsManager.kt | 2 +- .../assets/file/ResourcesAssetsUtil.kt | 3 ++- .../loader/mod/source/DirectorySource.kt | 22 ++++++++++++++----- 4 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/integration-test/kotlin/de/bixilon/minosoft/modding/loader/phase/LoadingPhaseTest.kt b/src/integration-test/kotlin/de/bixilon/minosoft/modding/loader/phase/LoadingPhaseTest.kt index 99b6ec38c..d8812266e 100644 --- a/src/integration-test/kotlin/de/bixilon/minosoft/modding/loader/phase/LoadingPhaseTest.kt +++ b/src/integration-test/kotlin/de/bixilon/minosoft/modding/loader/phase/LoadingPhaseTest.kt @@ -32,7 +32,7 @@ class LoadingPhaseTest { val phase = LoadingPhase(path) val rootResources = LoadingPhaseTest::class.java.classLoader.getResource("mods/") - phase::class.java.getFieldOrNull("path")!!.forceSet(phase, File(rootResources.path.removeSuffix("/") + "/" + path)) + phase::class.java.getFieldOrNull("path")!!.forceSet(phase, File(rootResources.path.removeSuffix(File.separator) + File.separator + path)) return phase } diff --git a/src/main/java/de/bixilon/minosoft/assets/directory/DirectoryAssetsManager.kt b/src/main/java/de/bixilon/minosoft/assets/directory/DirectoryAssetsManager.kt index e7405fc27..e4f4010d1 100644 --- a/src/main/java/de/bixilon/minosoft/assets/directory/DirectoryAssetsManager.kt +++ b/src/main/java/de/bixilon/minosoft/assets/directory/DirectoryAssetsManager.kt @@ -56,7 +56,7 @@ class DirectoryAssetsManager( scanDirectory(file) continue } - val path = file.slashPath.removePrefix(basePath).removePrefix("/").toAssetName(false, prefix) ?: continue + val path = file.slashPath.removePrefix(basePath).removePrefix(File.separator).toAssetName(false, prefix) ?: continue assets += path } } diff --git a/src/main/java/de/bixilon/minosoft/assets/file/ResourcesAssetsUtil.kt b/src/main/java/de/bixilon/minosoft/assets/file/ResourcesAssetsUtil.kt index 11f38a75c..3f6095edd 100644 --- a/src/main/java/de/bixilon/minosoft/assets/file/ResourcesAssetsUtil.kt +++ b/src/main/java/de/bixilon/minosoft/assets/file/ResourcesAssetsUtil.kt @@ -19,6 +19,7 @@ import de.bixilon.minosoft.assets.resource.ResourceAssetsManager import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType +import java.io.File import java.net.URLDecoder import java.nio.charset.StandardCharsets @@ -33,7 +34,7 @@ object ResourcesAssetsUtil { } return when (rootResources.protocol) { - "file" -> DirectoryAssetsManager(rootResources.path.removeSuffix("/").removeSuffix(prefix), canUnload, prefix) // Read them directly from the folder + "file" -> DirectoryAssetsManager(rootResources.path.removeSuffix(File.separator).removeSuffix(prefix), canUnload, prefix) // Read them directly from the folder "jar" -> { val path: String = rootResources.path val jarPath = path.substring(5, path.indexOf("!")) diff --git a/src/main/java/de/bixilon/minosoft/modding/loader/mod/source/DirectorySource.kt b/src/main/java/de/bixilon/minosoft/modding/loader/mod/source/DirectorySource.kt index 4f3225ce5..062dc6953 100644 --- a/src/main/java/de/bixilon/minosoft/modding/loader/mod/source/DirectorySource.kt +++ b/src/main/java/de/bixilon/minosoft/modding/loader/mod/source/DirectorySource.kt @@ -22,6 +22,10 @@ import de.bixilon.minosoft.data.text.formatting.TextFormattable import de.bixilon.minosoft.modding.loader.LoaderUtil import de.bixilon.minosoft.modding.loader.LoaderUtil.load import de.bixilon.minosoft.modding.loader.mod.MinosoftMod +import de.bixilon.minosoft.terminal.RunConfiguration +import de.bixilon.minosoft.util.logging.Log +import de.bixilon.minosoft.util.logging.LogLevels +import de.bixilon.minosoft.util.logging.LogMessageType import java.io.File import java.io.FileInputStream @@ -58,13 +62,19 @@ class DirectorySource( companion object { - fun scanClasses(mod: MinosoftMod, baseDirectory: File, currentDirectory: File) { - if (currentDirectory.isFile) { - mod.classLoader.load(currentDirectory.path.removePrefix(baseDirectory.path).removePrefix("/"), FileInputStream(currentDirectory).readAllBytes()) + fun scanClasses(mod: MinosoftMod, base: File, file: File) { + if (file.isFile) { + if (!file.name.endsWith(".class")) return + + val path = file.path.removePrefix(base.path).removePrefix(File.separator) + if (RunConfiguration.VERBOSE_LOGGING) { + Log.log(LogMessageType.MOD_LOADING, LogLevels.VERBOSE) { "Injecting class $path" } + } + mod.classLoader.load(path, FileInputStream(file).readAllBytes()) } - if (currentDirectory.isDirectory) { - for (sub in currentDirectory.listFiles()!!) { - scanClasses(mod, baseDirectory, sub) + if (file.isDirectory) { + for (sub in file.listFiles()!!) { + scanClasses(mod, base, sub) } } }