diff --git a/fml/client/cpw/mods/fml/client/FMLClientHandler.java b/fml/client/cpw/mods/fml/client/FMLClientHandler.java index 86068f948..42e170e5d 100644 --- a/fml/client/cpw/mods/fml/client/FMLClientHandler.java +++ b/fml/client/cpw/mods/fml/client/FMLClientHandler.java @@ -124,7 +124,7 @@ public class FMLClientHandler implements IFMLSidedHandler Class optifineConfig = Class.forName("Config", false, Loader.instance().getModClassLoader()); String optifineVersion = (String) optifineConfig.getField("VERSION").get(null); Map dummyOptifineMeta = ImmutableMap.builder().put("name", "Optifine").put("version", optifineVersion).build(); - ModMetadata optifineMetadata = MetadataCollection.from(getClass().getResourceAsStream("optifinemod.info")).getMetadataForId("optifine", dummyOptifineMeta); + ModMetadata optifineMetadata = MetadataCollection.from(getClass().getResourceAsStream("optifinemod.info"),"optifine").getMetadataForId("optifine", dummyOptifineMeta); optifineContainer = new DummyModContainer(optifineMetadata); FMLLog.info("Forge Mod Loader has detected optifine %s, enabling compatibility features",optifineContainer.getVersion()); } diff --git a/fml/common/cpw/mods/fml/common/MetadataCollection.java b/fml/common/cpw/mods/fml/common/MetadataCollection.java index bcb624365..e686f9dbb 100644 --- a/fml/common/cpw/mods/fml/common/MetadataCollection.java +++ b/fml/common/cpw/mods/fml/common/MetadataCollection.java @@ -3,10 +3,12 @@ package cpw.mods.fml.common; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Map; +import java.util.logging.Level; import argo.jdom.JdomParser; import argo.jdom.JsonNode; import argo.jdom.JsonRootNode; +import argo.saj.InvalidSyntaxException; import com.google.common.base.Throwables; import com.google.common.collect.Maps; @@ -17,13 +19,13 @@ public class MetadataCollection private Map metadatas = Maps.newHashMap(); private int metadataVersion = 1; - public static MetadataCollection from(InputStream inputStream) + public static MetadataCollection from(InputStream inputStream, String sourceName) { if (inputStream == null) { return new MetadataCollection(); } - + InputStreamReader reader = new InputStreamReader(inputStream); try { @@ -37,6 +39,11 @@ public class MetadataCollection return parseModInfo(root); } } + catch (InvalidSyntaxException e) + { + FMLLog.log(Level.SEVERE, e, "The mcmod.info file in %s cannot be parsed as valid JSON. It will be ignored", sourceName); + return null; + } catch (Exception e) { throw Throwables.propagate(e); diff --git a/fml/common/cpw/mods/fml/common/discovery/DirectoryDiscoverer.java b/fml/common/cpw/mods/fml/common/discovery/DirectoryDiscoverer.java index 055786a6e..1df79c186 100644 --- a/fml/common/cpw/mods/fml/common/discovery/DirectoryDiscoverer.java +++ b/fml/common/cpw/mods/fml/common/discovery/DirectoryDiscoverer.java @@ -53,13 +53,13 @@ public class DirectoryDiscoverer implements ITypeDiscoverer try { FileInputStream fis = new FileInputStream(metadata); - mc = MetadataCollection.from(fis); + mc = MetadataCollection.from(fis,modDir.getName()); fis.close(); FMLLog.fine("Found an mcmod.info file in directory %s", modDir.getName()); } catch (Exception e) { - mc = MetadataCollection.from(null); + mc = MetadataCollection.from(null,""); FMLLog.info("No mcmod.info file found in directory %s", modDir.getName()); } } diff --git a/fml/common/cpw/mods/fml/common/discovery/JarDiscoverer.java b/fml/common/cpw/mods/fml/common/discovery/JarDiscoverer.java index 40b046a4a..03f63457a 100644 --- a/fml/common/cpw/mods/fml/common/discovery/JarDiscoverer.java +++ b/fml/common/cpw/mods/fml/common/discovery/JarDiscoverer.java @@ -33,12 +33,12 @@ public class JarDiscoverer implements ITypeDiscoverer if (modInfo != null) { FMLLog.finer("Located mcmod.info file in file %s", candidate.getModContainer().getName()); - mc = MetadataCollection.from(jar.getInputStream(modInfo)); + mc = MetadataCollection.from(jar.getInputStream(modInfo), candidate.getModContainer().getName()); } else { FMLLog.info("The mod container %s appears to be missing an mcmod.info file", candidate.getModContainer().getName()); - mc = MetadataCollection.from(null); + mc = MetadataCollection.from(null, ""); } for (ZipEntry ze : Collections.list(jar.entries())) {