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());
    }
}

优先级顺序

  1. 用户在 jarjar.properties 中显式配置 SortingIndex.com.mitchej123.hodgepodge.core.HodgepodgeCore=<n> → 使用 <n>
  2. 兜底分支:Hodgepodge < 2.7.147 → 强制 1
  3. 其它情况:使用 manifest TweakOrder(无则 0)

触发时机

JarUtil.examineJarCandidate 内 if (coremodPass) applyConfiguredSortOrder(modCandidate); —— 只在 coremod 扫描阶段生效(避免污染 mod 阶段)。

日志

Forcing SortingIndex 1 for Hodgepodge (2.7.100).

相关条目