diff options
Diffstat (limited to 'src/main/java/kubatech/api/utils/ModUtils.java')
-rw-r--r-- | src/main/java/kubatech/api/utils/ModUtils.java | 33 |
1 files changed, 30 insertions, 3 deletions
diff --git a/src/main/java/kubatech/api/utils/ModUtils.java b/src/main/java/kubatech/api/utils/ModUtils.java index 0f598dcfa8..53f0086e25 100644 --- a/src/main/java/kubatech/api/utils/ModUtils.java +++ b/src/main/java/kubatech/api/utils/ModUtils.java @@ -20,9 +20,11 @@ package kubatech.api.utils; import cpw.mods.fml.common.Loader; -import java.util.AbstractMap; -import java.util.HashMap; -import java.util.Map; +import cpw.mods.fml.common.ModContainer; +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; +import java.util.*; +import javax.xml.bind.DatatypeConverter; import net.minecraft.launchwrapper.Launch; public class ModUtils { @@ -47,4 +49,29 @@ public class ModUtils { .orElse(emptyEntry) .getValue(); } + + private static String modListVersion = null; + + public static String getModListVersion() { + if (modListVersion != null) return modListVersion; + ArrayList<ModContainer> modlist = (ArrayList<ModContainer>) + ((ArrayList<ModContainer>) Loader.instance().getActiveModList()).clone(); + String sortedList = modlist.stream() + .filter(m -> m.getMod() != null) + .sorted(Comparator.comparing(ModContainer::getModId)) + .collect( + StringBuilder::new, + (a, b) -> a.append(b.getModId()).append(b.getVersion()), + (a, b) -> a.append(", ").append(b)) + .toString(); + try { + MessageDigest md = MessageDigest.getInstance("MD5"); + modListVersion = DatatypeConverter.printHexBinary(md.digest(sortedList.getBytes(StandardCharsets.UTF_8))) + .toUpperCase(); + return modListVersion; + } catch (Exception e) { + modListVersion = sortedList; + return sortedList; + } + } } |