Change how Forge itself is located to be loaded similar to a real mod.

Fixes Minecraft/Forge annotation data missing.
Fix Capability injection.
This commit is contained in:
LexManos committed 2018-12-21 16:07:39 -08:00
1 parent d11a67499d
commit 4879b0611a
18 files changed
+304 -349

No files matched your search

@@ -19,13 +19,11 @@
package net.minecraftforge.fml;
import com.google.common.collect.Streams;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.client.event.ModelRegistryEvent;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.capabilities.CapabilityManager;
import net.minecraftforge.fml.language.IModInfo;
import net.minecraftforge.fml.loading.DefaultModInfos;
import net.minecraftforge.fml.loading.FMLLoader;
import net.minecraftforge.fml.loading.LoadingModList;
import net.minecraftforge.fml.loading.moddiscovery.ModFile;
@@ -34,7 +32,6 @@ import net.minecraftforge.registries.GameData;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.lang.reflect.InvocationTargetException;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@@ -76,18 +73,6 @@ public class ModLoader
public void loadMods() {
final ModList modList = ModList.of(loadingModList.getModFiles().stream().map(ModFileInfo::getFile).collect(Collectors.toList()), loadingModList.getMods());
ModContainer forgeModContainer;
try
{
forgeModContainer = (ModContainer)Class.forName("net.minecraftforge.common.ForgeModContainer", true, modClassLoader).
getConstructor(ModLoadingClassLoader.class).newInstance(modClassLoader);
}
catch (ClassNotFoundException | IllegalAccessException | NoSuchMethodException | InstantiationException | InvocationTargetException e)
{
LOGGER.error(CORE,"Unable to load the Forge Mod Container", e);
loadingExceptions.add(new ModLoadingException(DefaultModInfos.forgeModInfo, ModLoadingStage.VALIDATE, "fml.modloading.failedtoloadforge", e));
forgeModContainer = null;
}
if (!this.loadingExceptions.isEmpty()) {
throw new LoadingFailedException(loadingExceptions);
}
@@ -99,10 +84,8 @@ public class ModLoader
LOGGER.error(CORE, "Failed to initialize mod containers");
throw new LoadingFailedException(loadingExceptions);
}
modList.setLoadedMods(Streams.concat(Stream.of(forgeModContainer), modContainerStream).collect(Collectors.toList()));
modList.setLoadedMods(modContainerStream.collect(Collectors.toList()));
dispatchAndHandleError(LifecycleEventProvider.CONSTRUCT);
WorldPersistenceHooks.addHook(new FMLWorldPersistenceHook());
WorldPersistenceHooks.addHook((WorldPersistenceHooks.WorldPersistenceHook)forgeModContainer.getMod());
GameData.fireCreateRegistryEvents();
CapabilityManager.INSTANCE.injectCapabilities(modList.getAllScanData());
dispatchAndHandleError(LifecycleEventProvider.PREINIT);