Hodgepodge 排序兜底
基本信息
| 属性 | 值 |
|---|---|
| 实现位置 | JarUtil.applyConfiguredSortOrder |
| 触发条件 | coremod = com.mitchej123.hodgepodge.core.HodgepodgeCore 且版本 < 2.7.147 |
| 强制值 | sortOrder = 1 |
| 失效条件 | 配置文件 enableSortingIndexOverrides = false |
| 常量 | HODGEPODGE_LATE_TRANSFORMER_VERSION = "2.7.147" |
Hodgepodge 在 2.7.147 之前会向 cpw.mods.fml.common.asm.transformers.ModAccessTransformer.embedded 注册其修改,但要求 NEI 在它之前注册。否则 OreDictionary verifier 失效。该兜底不依赖用户配置文件。
实现
private static final String HODGEPODGE_COREMOD = "com.mitchej123.hodgepodge.core.HodgepodgeCore";
private static final DefaultArtifactVersion HODGEPODGE_LATE_TRANSFORMER_VERSION = new DefaultArtifactVersion("2.7.147");
private static final int HODGEPODGE_SORT_ORDER = 1;
private static void applyConfiguredSortOrder(ModCandidateV2 candidate) {
final String coreMod = candidate.getCoreMod();
if (coreMod == null || !Config.enableSortingIndexOverrides) return;
if (Config.sortingIndexOverrides.containsKey(coreMod)) {
final int sortOrder = Config.sortingIndexOverrides.get(coreMod);
candidate.setSortOrder(sortOrder);
FMLRelaunchLog.log(Level.INFO, "Applying configured SortingIndex %d to coremod %s", sortOrder, coreMod);
} else if (HODGEPODGE_COREMOD.equals(coreMod) && candidate.getVersion().compareTo(HODGEPODGE_LATE_TRANSFORMER_VERSION) < 0) {
// Hodgepodge pre 2.7.147 must register after NEI or OreDictionary won't verify.
candidate.setSortOrder(HODGEPODGE_SORT_ORDER);
FMLRelaunchLog.log(Level.INFO, "Forcing SortingIndex %d for Hodgepodge (%s).", HODGEPODGE_SORT_ORDER, candidate.getVersion());
}
}
优先级顺序
- 用户在
jarjar.properties中显式配置SortingIndex.com.mitchej123.hodgepodge.core.HodgepodgeCore=<n>→ 使用<n> - 兜底分支:Hodgepodge < 2.7.147 → 强制
1 - 其它情况:使用 manifest
TweakOrder(无则 0)
触发时机
JarUtil.examineJarCandidate 内 if (coremodPass) applyConfiguredSortOrder(modCandidate); —— 只在 coremod 扫描阶段生效(避免污染 mod 阶段)。
日志
Forcing SortingIndex 1 for Hodgepodge (2.7.100).
相关条目
- JarJar 配置文件 -
SortingIndex.<coremod>=<n>语法 - JarUtil 嵌套抽取与版本识别 -
applyConfiguredSortOrder实现 - CoreModManagerV2 - coremod sort 阶段使用
candidate.getSortOrder()