From 7a58542fb8e53b3f4c17b0bc21b274949b8ff599 Mon Sep 17 00:00:00 2001 From: Christian Date: Tue, 4 Sep 2012 11:39:51 -0400 Subject: [PATCH] Rescan mod packages where there was a possible mod identified to try and make sure we load it. Fixes Matmos r16 --- .../mods/fml/common/ModContainerFactory.java | 5 +++++ .../fml/common/discovery/ModCandidate.java | 18 +++++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/fml/common/cpw/mods/fml/common/ModContainerFactory.java b/fml/common/cpw/mods/fml/common/ModContainerFactory.java index b0a0b926e..c57fd1d9e 100644 --- a/fml/common/cpw/mods/fml/common/ModContainerFactory.java +++ b/fml/common/cpw/mods/fml/common/ModContainerFactory.java @@ -25,6 +25,11 @@ public class ModContainerFactory FMLLog.fine("Identified a BaseMod type mod %s", className); return new ModLoaderModContainer(className, modSource, modParser.getBaseModProperties()); } + else if (modClass.matcher(className).find()) + { + FMLLog.fine("Identified a class %s following modloader naming convention but not directly a BaseMod or currently seen subclass", className); + container.rememberModCandidateType(modParser); + } else if (modParser.isBaseMod(container.getRememberedBaseMods())) { FMLLog.fine("Found a basemod %s of non-standard naming format", className); diff --git a/fml/common/cpw/mods/fml/common/discovery/ModCandidate.java b/fml/common/cpw/mods/fml/common/discovery/ModCandidate.java index 0de968a0c..5abd9862c 100644 --- a/fml/common/cpw/mods/fml/common/discovery/ModCandidate.java +++ b/fml/common/cpw/mods/fml/common/discovery/ModCandidate.java @@ -5,7 +5,9 @@ import java.util.List; import com.google.common.collect.Lists; +import cpw.mods.fml.common.FMLLog; import cpw.mods.fml.common.ModContainer; +import cpw.mods.fml.common.discovery.asm.ASMModParser; public class ModCandidate @@ -16,6 +18,7 @@ public class ModCandidate private boolean classpath; private List baseModTypes = Lists.newArrayList(); private boolean isMinecraft; + private List baseModCandidateTypes = Lists.newArrayListWithCapacity(1); public ModCandidate(File classPathRoot, File modContainer, ContainerType sourceType) { @@ -46,7 +49,16 @@ public class ModCandidate } public List explore(ASMDataTable table) { - return sourceType.findMods(this, table); + List mods = sourceType.findMods(this, table); + if (!baseModCandidateTypes.isEmpty()) + { + FMLLog.info("Attempting to reparse the mod container %s", getModContainer().getName()); + return sourceType.findMods(this, table); + } + else + { + return mods; + } } public boolean isClasspath() @@ -65,4 +77,8 @@ public class ModCandidate { return isMinecraft; } + public void rememberModCandidateType(ASMModParser modParser) + { + baseModCandidateTypes.add(modParser); + } } \ No newline at end of file