From 0c5ced1bbf91450024436573f16da8177b684c13 Mon Sep 17 00:00:00 2001 From: cpw Date: Fri, 13 Nov 2020 20:41:20 -0500 Subject: [PATCH] Fix NPE problem when modid is mismatched. Signed-off-by: cpw --- .../java/net/minecraftforge/fml/ModContainer.java | 10 ++++++++++ src/main/java/net/minecraftforge/fml/ModLoader.java | 11 ++++++----- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/main/java/net/minecraftforge/fml/ModContainer.java b/src/main/java/net/minecraftforge/fml/ModContainer.java index 681284874..4456c9482 100644 --- a/src/main/java/net/minecraftforge/fml/ModContainer.java +++ b/src/main/java/net/minecraftforge/fml/ModContainer.java @@ -75,6 +75,16 @@ public abstract class ModContainer (incoming, isNetwork)->Objects.equals(incoming, this.modInfo.getVersion().toString()))); } + /** + * Errored container state, used for filtering. Does nothing. + */ + ModContainer() + { + this.modLoadingStage = ModLoadingStage.ERROR; + modId = "BROKEN"; + namespace = "BROKEN"; + modInfo = null; + } /** * @return the modid for this mod */ diff --git a/src/main/java/net/minecraftforge/fml/ModLoader.java b/src/main/java/net/minecraftforge/fml/ModLoader.java index cdd724710..fa69954bf 100644 --- a/src/main/java/net/minecraftforge/fml/ModLoader.java +++ b/src/main/java/net/minecraftforge/fml/ModLoader.java @@ -33,6 +33,7 @@ import net.minecraftforge.fml.loading.LoadingModList; import net.minecraftforge.fml.loading.moddiscovery.InvalidModIdentifier; import net.minecraftforge.fml.loading.moddiscovery.ModFile; import net.minecraftforge.fml.loading.moddiscovery.ModFileInfo; +import net.minecraftforge.fml.loading.moddiscovery.ModInfo; import net.minecraftforge.fml.loading.progress.StartupMessageManager; import net.minecraftforge.fml.network.FMLNetworkConstants; import net.minecraftforge.fml.network.NetworkRegistry; @@ -282,7 +283,7 @@ public class ModLoader loadingExceptions.add(new ModLoadingException(null, ModLoadingStage.CONSTRUCT, "fml.modloading.missingclasses", null, modFile.getFilePath())); } // remove errored mod containers - return containers.stream().filter(obj -> !(obj instanceof ErroredModContainer)).collect(Collectors.toList()); + return containers.stream().filter(mc -> mc.modLoadingStage != ModLoadingStage.ERROR).collect(Collectors.toList()); } private ModContainer buildModContainerFromTOML(final ModFile modFile, final TransformingClassLoader modClassLoader, final Map modInfoMap, final Map.Entry idToProviderEntry) { @@ -297,7 +298,7 @@ public class ModLoader // exceptions are caught and added to the error list for later handling loadingExceptions.add(mle); // return an errored container instance here, because we tried and failed building a container. - return new ErroredModContainer(mle); + return new ErroredModContainer(); } } @@ -341,9 +342,9 @@ public class ModLoader return runningDataGen; } - static class ErroredModContainer extends ModContainer { - public ErroredModContainer(final ModLoadingException mle) { - super(mle.getModInfo()); + private static class ErroredModContainer extends ModContainer { + public ErroredModContainer() { + super(); } @Override