From 9e7e9e5cbfa202648b8e5485662363a97f149a00 Mon Sep 17 00:00:00 2001 From: Lex Manos Date: Fri, 27 Mar 2015 02:54:55 -0700 Subject: [PATCH] MinecraftForge/FML@24cb4a42c4e4bddde95c0e49d1f8b8bcc20c626d Enhance output of common FML errors in crash reports and server GUI. Force load anonymous minecraft classes used in crash reports. This prevents some crashes being hiddedn behind class definiton exceptions. --- fml | 2 +- .../minecraftforge/common/MinecraftForge.java | 112 +++++++++++++++++- 2 files changed, 111 insertions(+), 3 deletions(-) diff --git a/fml b/fml index 13ac015f0c..24cb4a42c4 160000 --- a/fml +++ b/fml @@ -1 +1 @@ -Subproject commit 13ac015f0c36b8e2091ae332c556be315429f4c8 +Subproject commit 24cb4a42c4e4bddde95c0e49d1f8b8bcc20c626d diff --git a/src/main/java/net/minecraftforge/common/MinecraftForge.java b/src/main/java/net/minecraftforge/common/MinecraftForge.java index c0f0414cbd..93692ed9f0 100644 --- a/src/main/java/net/minecraftforge/common/MinecraftForge.java +++ b/src/main/java/net/minecraftforge/common/MinecraftForge.java @@ -1,8 +1,14 @@ package net.minecraftforge.common; +import java.util.concurrent.Callable; + +import com.google.common.collect.ObjectArrays; + +import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.FMLLog; import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.eventhandler.EventBus; +import cpw.mods.fml.relauncher.Side; import net.minecraft.crash.CrashReport; import net.minecraft.item.ItemStack; import net.minecraftforge.common.ForgeHooks.SeedEntry; @@ -47,11 +53,113 @@ public class MinecraftForge OreDictionary.getOreName(0); //Force these classes to be defined, Should prevent derp error hiding. - new CrashReport("ThisIsFake", new Exception("Not real")); - + CrashReport fake = new CrashReport("ThisIsFake", new Exception("Not real")); + //Lets init World's crash report inner classes to prevent them from hiding errors. + String[] handlers = { + "net.minecraft.world.World$1", + "net.minecraft.world.World$2", + "net.minecraft.world.World$3", + "net.minecraft.world.World$4", + "net.minecraft.world.chunk.Chunk$1", + "net.minecraft.crash.CrashReportCategory$1", + "net.minecraft.crash.CrashReportCategory$2", + "net.minecraft.crash.CrashReportCategory$3", + "net.minecraft.entity.Entity$1", + "net.minecraft.entity.Entity$2", + "net.minecraft.entity.EntityTracker$1", + "net.minecraft.world.gen.layer.GenLayer$1", + "net.minecraft.world.gen.layer.GenLayer$2", + "net.minecraft.entity.player.InventoryPlayer$1", + "net.minecraft.world.gen.structure.MapGenStructure$1", + "net.minecraft.world.gen.structure.MapGenStructure$2", + "net.minecraft.world.gen.structure.MapGenStructure$3", + "net.minecraft.server.MinecraftServer$3", + "net.minecraft.server.MinecraftServer$4", + "net.minecraft.server.MinecraftServer$5", + "net.minecraft.nbt.NBTTagCompound$1", + "net.minecraft.nbt.NBTTagCompound$2", + "net.minecraft.network.NetHandlerPlayServer$2", + "net.minecraft.network.NetworkSystem$3", + "net.minecraft.tileentity.TileEntity$1", + "net.minecraft.tileentity.TileEntity$2", + "net.minecraft.tileentity.TileEntity$3", + "net.minecraft.world.storage.WorldInfo$1", + "net.minecraft.world.storage.WorldInfo$2", + "net.minecraft.world.storage.WorldInfo$3", + "net.minecraft.world.storage.WorldInfo$4", + "net.minecraft.world.storage.WorldInfo$5", + "net.minecraft.world.storage.WorldInfo$6", + "net.minecraft.world.storage.WorldInfo$7", + "net.minecraft.world.storage.WorldInfo$8", + "net.minecraft.world.storage.WorldInfo$9" + }; + String[] client = { + "net.minecraft.client.Minecraft$3", + "net.minecraft.client.Minecraft$4", + "net.minecraft.client.Minecraft$5", + "net.minecraft.client.Minecraft$6", + "net.minecraft.client.Minecraft$7", + "net.minecraft.client.Minecraft$8", + "net.minecraft.client.Minecraft$9", + "net.minecraft.client.Minecraft$10", + "net.minecraft.client.Minecraft$11", + "net.minecraft.client.Minecraft$12", + "net.minecraft.client.Minecraft$13", + "net.minecraft.client.Minecraft$14", + "net.minecraft.client.Minecraft$15", + "net.minecraft.client.multiplayer.WorldClient$1", + "net.minecraft.client.multiplayer.WorldClient$2", + "net.minecraft.client.multiplayer.WorldClient$3", + "net.minecraft.client.multiplayer.WorldClient$4", + "net.minecraft.client.particle,EffectRenderer$1", + "net.minecraft.client.particle,EffectRenderer$2", + "net.minecraft.client.particle,EffectRenderer$3", + "net.minecraft.client.particle,EffectRenderer$4", + "net.minecraft.client.renderer.EntityRenderer$1", + "net.minecraft.client.renderer.EntityRenderer$2", + "net.minecraft.client.renderer.EntityRenderer$3", + "net.minecraft.server.integrated.IntegratedServer$1", + "net.minecraft.server.integrated.IntegratedServer$2", + "net.minecraft.client.renderer.RenderGlobal$1", + "net.minecraft.client.renderer.entity.RenderItem$1", + "net.minecraft.client.renderer.entity.RenderItem$2", + "net.minecraft.client.renderer.entity.RenderItem$3", + "net.minecraft.client.renderer.entity.RenderItem$4", + "net.minecraft.client.renderer.texture.TextureAtlasSprite$1", + "net.minecraft.client.renderer.texture.TextureManager$1", + "net.minecraft.client.renderer.texture.TextureMap$1", + "net.minecraft.client.renderer.texture.TextureMap$2", + "net.minecraft.client.renderer.texture.TextureMap$3" + }; + String[] server = { + "net.minecraft.server.dedicated.DedicatedServer$3", + "net.minecraft.server.dedicated.DedicatedServer$4" + }; + if (FMLCommonHandler.instance().getSide() == Side.CLIENT) + handlers = ObjectArrays.concat(handlers, client, String.class); + else + handlers = ObjectArrays.concat(handlers, server, String.class); + + FMLLog.info("Preloading CrashReport classes", ForgeVersion.getVersion()); + for (String s : handlers) + { + FMLLog.info("\t" + s); + try + { + Class cls = Class.forName(s, false, MinecraftForge.class.getClassLoader()); + if (cls != null && !Callable.class.isAssignableFrom(cls)) + { + FMLLog.info("\t% s is not a instance of callable!", s); + } + } + catch (Exception e){} + } + UsernameCache.load(); } + + public static String getBrandingVersion() { return "Minecraft Forge "+ ForgeVersion.getVersion();