From 8502b513963c225c8f8a4a0f1a61c25b5b20125c Mon Sep 17 00:00:00 2001 From: minjaesong Date: Sun, 2 Jan 2022 23:54:22 +0900 Subject: [PATCH] mod dependency version checking --- src/net/torvald/terrarum/ModMgr.kt | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/net/torvald/terrarum/ModMgr.kt b/src/net/torvald/terrarum/ModMgr.kt index 006973df5..bdb9a0ec6 100644 --- a/src/net/torvald/terrarum/ModMgr.kt +++ b/src/net/torvald/terrarum/ModMgr.kt @@ -147,24 +147,26 @@ object ModMgr { val releaseDate = modMetadata.getProperty("releasedate") val version = modMetadata.getProperty("version") val jar = modMetadata.getProperty("jar") - val dependency = modMetadata.getProperty("dependency").split(Regex(""";[ ]*""")).toTypedArray() + val dependency = modMetadata.getProperty("dependency").split(Regex(""";[ ]*""")).filter { it.isNotEmpty() }.toTypedArray() val isDir = FileSystems.getDefault().getPath("$modDir/$moduleName").toFile().isDirectory val versionNumeral = version.split('.') val versionNumber = versionNumeral.toVersionNumber() - dependency.forEach { - val (moduleName, moduleVersionStr) = it.split(' ') + dependency.forEach { nameAndVersionStr -> + val (moduleName, moduleVersionStr) = nameAndVersionStr.split(' ') val numbers = moduleVersionStr.split('.') val checkVersionNumber = numbers.toVersionNumber() // version number required var operator = numbers.last().last() // can be '+', '*', or a number - val checkAgainst = moduleInfo[moduleName]?.version // version number of what's installed - ?: throw ModuleDependencyNotSatisfied(it, "(module not installed)") - - // TODO make version number check here (hint: use moduleInfo) + val checkAgainstStr = moduleInfo[moduleName]?.version ?: throw ModuleDependencyNotSatisfied(nameAndVersionStr, "(module not installed)") + val checkAgainst =checkAgainstStr.split('.').toVersionNumber() // version number of what's installed + when (operator) { + '+', '*' -> if (checkVersionNumber > checkAgainst) throw ModuleDependencyNotSatisfied(nameAndVersionStr, "$moduleName $checkAgainstStr") + else -> if (checkVersionNumber != checkAgainst) throw ModuleDependencyNotSatisfied(nameAndVersionStr, "$moduleName $checkAgainstStr") + } }