diff --git a/src/main/java/net/minecraftforge/fml/packs/ResourcePackLoader.java b/src/main/java/net/minecraftforge/fml/packs/ResourcePackLoader.java index 08da380c8..369de3847 100644 --- a/src/main/java/net/minecraftforge/fml/packs/ResourcePackLoader.java +++ b/src/main/java/net/minecraftforge/fml/packs/ResourcePackLoader.java @@ -19,14 +19,7 @@ package net.minecraftforge.fml.packs; -import net.minecraft.resources.IPackFinder; -import net.minecraft.resources.ResourcePackInfo; -import net.minecraft.resources.ResourcePackList; -import net.minecraftforge.fml.ModList; -import net.minecraftforge.fml.loading.moddiscovery.ModFile; -import net.minecraftforge.fml.loading.moddiscovery.ModFileInfo; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; +import static net.minecraftforge.fml.Logging.CORE; import java.util.Map; import java.util.Map.Entry; @@ -34,7 +27,19 @@ import java.util.Optional; import java.util.function.Function; import java.util.stream.Collectors; -import static net.minecraftforge.fml.Logging.CORE; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import net.minecraft.resources.IPackFinder; +import net.minecraft.resources.ResourcePackInfo; +import net.minecraft.resources.ResourcePackList; +import net.minecraftforge.fml.ModList; +import net.minecraftforge.fml.ModLoader; +import net.minecraftforge.fml.ModLoadingStage; +import net.minecraftforge.fml.ModLoadingWarning; +import net.minecraftforge.fml.loading.moddiscovery.ModFile; +import net.minecraftforge.fml.loading.moddiscovery.ModFileInfo; +import net.minecraftforge.forgespi.language.IModInfo; public class ResourcePackLoader { @@ -63,8 +68,14 @@ public class ResourcePackLoader { for (Entry e : modResourcePacks.entrySet()) { - final String name = "mod:" + e.getKey().getModInfos().get(0).getModId(); + IModInfo mod = e.getKey().getModInfos().get(0); + final String name = "mod:" + mod.getModId(); final T packInfo = ResourcePackInfo.func_195793_a(name, true, e::getValue, factory, ResourcePackInfo.Priority.BOTTOM); + if (packInfo == null) { + // Vanilla only logs an error, instead of propagating, so handle null and warn that something went wrong + ModLoader.get().addWarning(new ModLoadingWarning(mod, ModLoadingStage.ERROR, "fml.modloading.brokenresources", e.getKey())); + continue; + } e.getValue().setPackInfo(packInfo); LOGGER.debug(CORE, "Generating PackInfo named {} for mod file {}", name, e.getKey().getFilePath()); packList.put(name, packInfo); diff --git a/src/main/resources/assets/forge/lang/en_us.json b/src/main/resources/assets/forge/lang/en_us.json index 7ea486dbd..a30ccd770 100644 --- a/src/main/resources/assets/forge/lang/en_us.json +++ b/src/main/resources/assets/forge/lang/en_us.json @@ -31,6 +31,7 @@ "fml.modloading.cycle": "Detected a mod dependency cycle: {0}", "fml.modloading.failedtoprocesswork":"{0,modinfo,name} ({0,modinfo,id}) encountered an error processing deferred work\n\u00a77{2,exc,msg}", "fml.modloading.brokenfile": "File {2} is not a valid mod file", + "fml.modloading.brokenresources": "File {2} failed to load a valid ResourcePackInfo", "fml.messages.artifactversion.ornotinstalled":"{0,ornull,fml.messages.artifactversion.notinstalled}", "fml.messages.artifactversion":"{0,ornull,fml.messages.artifactversion.none}",