ExtendedAE_Plus/src/main/java/com/extendedae_plus/util/ModCheckUtils.java

82 lines
2.5 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.extendedae_plus.util;
import net.minecraftforge.fml.loading.LoadingModList;
import net.minecraftforge.fml.loading.moddiscovery.ModFileInfo;
/**
* Forge 加载阶段的 Mod 检测工具
* 适用于 MixinConfigPlugin 阶段使用
* 包含版本比较工具
*/
public class ModCheckUtils {
private static final LoadingModList MOD_LIST = LoadingModList.get();
public static final String
MODID_JEI = "jei",
MODID_EMI = "emi",
MODID_AE = "ae2",
MODID_AAE = "advanced_ae",
MODID_AE2WTLIB = "ae2wtlib",
MODID_FTB_TEAMS = "ftbteams",
MODID_APPFLUX = "appflux",
MODID_GUIDEME = "guideme",
MODID_MAE2 = "mae2";
/**
* 检查指定模组是否存在
*/
public static boolean isLoaded(String modid) {
return MOD_LIST != null && MOD_LIST.getModFileById(modid) != null;
}
/**
* 获取模组版本号x.x.x若不存在则返回 "0.0.0"
*/
public static String getVersion(String modid) {
if (MOD_LIST == null) return "0.0.0";
ModFileInfo file = MOD_LIST.getModFileById(modid);
if (file == null || file.getMods().isEmpty()) return "0.0.0";
return file.getMods().get(0).getVersion().toString();
}
/**
* 检查模组是否存在且版本低于指定版本
*/
public static boolean isLoadedAndLowerThan(String modid, String targetVersion) {
if (!isLoaded(modid)) return false;
return isVersionLower(getVersion(modid), targetVersion);
}
/**
* 比较两个版本号
*
* @param current 当前版本号,格式 x.x.x
* @param target 目标版本号,格式 x.x.x
* @return true 如果 current < target否则 false
*/
public static boolean isVersionLower(String current, String target) {
if (current == null || target == null) return false;
String[] curParts = current.split("\\.");
String[] tarParts = target.split("\\.");
for (int i = 0; i < 3; i++) {
int curNum = i < curParts.length ? parse(curParts[i]) : 0;
int tarNum = i < tarParts.length ? parse(tarParts[i]) : 0;
if (curNum < tarNum) return true;
if (curNum > tarNum) return false;
}
return false; // 相等则不小于
}
private static int parse(String s) {
try {
return Integer.parseInt(s.replaceAll("[^0-9]", ""));
} catch (Exception e) {
return 0;
}
}
}