Crash inexpliquable Tick Handler



  • Salut à tous et à toutes.
    Cela faisait fort longtemps que je n'avais pas posté dans la section Support de mff, mais l'heure est venu je viens à contrecœur (car j'aurai voulu résoudre le problème tout seul :s) vous demander votre aide la plus attentionnée.

    Bon finis les blabla, rentrons dans le vif du sujet. J'ai récemment crée (ou plutôt "tenté", le terme serait plus approprié) un tick handler pour l'avenir de mon mod mais au moment du lancement. Il crash. J'ai remarqué qu'il suffit que j'ajoute une ligne de code via l'instance mc pour que le jeu se mette à faire des siennes ; car si je laisse toute seule la ligne  : "system.out.println("test du tick handler);", le jeu ne crash pas. Désolé je ne sais pas encore résoudre parfaitement un NPE donc je vous remercie d'avance.

    Mes class :

    Mon client proxy

    
    package mrplaigon.psccraft.minesagasmod.client;
    
    import mrplaigon.psccraft.minesagasmod.common.MineSagasCommonProxy;
    import mrplaigon.psccraft.minesagasmod.common.MineSagasMod;
    import mrplaigon.psccraft.minesagasmod.common.RenderTickHandler;
    import net.minecraft.client.Minecraft;
    import cpw.mods.fml.common.FMLCommonHandler;
    
    public class MineSagasClientProxy extends MineSagasCommonProxy
    {
    
    @Override
    public void registerEntityRenderer()
    {
    
    }
    
    @Override
    public void registerItemRenderer()
    {
    
    }
    
    @Override
    public void initialiseTickHandler()
    {
    
    FMLCommonHandler.instance().bus().register(new RenderTickHandler(Minecraft.getMinecraft()));
    }
    
    @Override
    public void registerTileEntitySpecialRenderer()
    {
    
    }
    }
    
    

    Mon renderTickHandler

    
    package mrplaigon.psccraft.minesagasmod.common;
    
    import net.minecraft.client.Minecraft;
    import cpw.mods.fml.common.eventhandler.SubscribeEvent;
    import cpw.mods.fml.common.gameevent.TickEvent.Phase;
    import cpw.mods.fml.common.gameevent.TickEvent.RenderTickEvent;
    import cpw.mods.fml.relauncher.Side;
    import cpw.mods.fml.relauncher.SideOnly;
    
    @SideOnly(Side.CLIENT)
    public class RenderTickHandler 
    {
    
    private Minecraft mc;
    
    public RenderTickHandler(Minecraft mc) 
    {
    
    this.mc = mc;
    
    }
    
    @SubscribeEvent
    public void onRenderTick(RenderTickEvent event) 
    {
    
    if (event.phase == Phase.START) 
    {
    
    test();
    
       System.out.println("test du tick handler");
    }
    
    }
    private void test()
    {
    mc.thePlayer.setDead();
    }
    
    }
    
    

    et au cas où mon common proxy et ma classe principale :

    
    package mrplaigon.psccraft.minesagasmod.common;
    
    import cpw.mods.fml.common.gameevent.TickEvent;
    
    public class MineSagasCommonProxy 
    {
    public void registerEntityRenderer() 
    {
    
    }
    public void registerItemRenderer()
    {
    
    }
    public void registerTileEntitySpecialRenderer()
    {
    
    }
    
    public void initialiseTickHandler()
     {
    
    }
    
    }
    
    
    
    package mrplaigon.psccraft.minesagasmod.common;
    
    import net.minecraft.block.Block;
    import net.minecraft.block.material.Material;
    import net.minecraft.creativetab.CreativeTabs;
    import net.minecraft.init.Items;
    import net.minecraft.item.Item;
    import net.minecraft.item.Item.ToolMaterial;
    import net.minecraft.item.ItemArmor.ArmorMaterial;
    import net.minecraft.item.ItemStack;
    import net.minecraft.item.ItemSword;
    import net.minecraft.world.biome.BiomeGenBase;
    import net.minecraftforge.common.BiomeDictionary;
    import net.minecraftforge.common.BiomeDictionary.Type;
    import net.minecraftforge.common.BiomeManager;
    import net.minecraftforge.common.MinecraftForge;
    import net.minecraftforge.common.util.EnumHelper;
    import cpw.mods.fml.common.FMLCommonHandler;
    import cpw.mods.fml.common.Mod;
    import cpw.mods.fml.common.Mod.EventHandler;
    import cpw.mods.fml.common.Mod.Instance;
    import cpw.mods.fml.common.SidedProxy;
    import cpw.mods.fml.common.event.FMLInitializationEvent;
    import cpw.mods.fml.common.event.FMLPostInitializationEvent;
    import cpw.mods.fml.common.event.FMLPreInitializationEvent;
    import cpw.mods.fml.common.registry.EntityRegistry;
    import cpw.mods.fml.common.registry.GameRegistry;
    
    @Mod(modid="minesagasmod", name="MineSagasMod", version="1.0.0")
    
    public class MineSagasMod
    {
    public static final String MODID = "minesagasmod";
    @Instance("minesagasmod")
    public static MineSagasMod instance;
    @SidedProxy(clientSide="mrplaigon.psccraft.minesagasmod.client.MineSagasClientProxy", serverSide="mrplaigon.psccraft.minesagasmod.common.MineSagasCommonProxy")
    public static MineSagasCommonProxy commonproxy;
    
     @EventHandler
     public void preInit(FMLPreInitializationEvent event)
     {
       System.out.println("preinit");
    
     }
    
     @EventHandler
     public void init(FMLInitializationEvent event)
     {
       System.out.println("init");
    
       commonproxy.registerEntityRenderer();
       commonproxy.registerItemRenderer();
       commonproxy.registerTileEntitySpecialRenderer();
       commonproxy.initialiseTickHandler();
    
    if(event.getSide().isClient())
    {
    MinecraftForge.EVENT_BUS.register(new MineSagasEventHandler());
    }
    
    FMLCommonHandler.instance().bus().register(new MineSagasEventHandler());
    MinecraftForge.EVENT_BUS.register(new MineSagasEventHandler());
    
     }
    
     @EventHandler
     public void postInit(FMLPostInitializationEvent event)
     {
    
     System.out.println("postinit");
    
     }
    }
    
    

    et le crash-report :

    
    –-- Minecraft Crash Report ----
    
    // On the bright side, I bought you a teddy bear!
    
    Time: 30/10/14 18:30
    Description: Unexpected error
    
    java.lang.NullPointerException: Unexpected error
    at mrplaigon.psccraft.minesagasmod.common.RenderTickHandler.test(RenderTickHandler.java:44)
    at mrplaigon.psccraft.minesagasmod.common.RenderTickHandler.onRenderTick(RenderTickHandler.java:35)
    at cpw.mods.fml.common.eventhandler.ASMEventHandler_7_RenderTickHandler_onRenderTick_RenderTickEvent.invoke(.dynamic)
    at cpw.mods.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:51)
    at cpw.mods.fml.common.eventhandler.EventBus.post(EventBus.java:122)
    at cpw.mods.fml.common.FMLCommonHandler.onRenderTickStart(FMLCommonHandler.java:334)
    at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1064)
    at net.minecraft.client.Minecraft.run(Minecraft.java:961)
    at net.minecraft.client.main.Main.main(Main.java:164)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at net.minecraft.launchwrapper.Launch.launch(Launch.java:134)
    at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at GradleStart.bounce(GradleStart.java:107)
    at GradleStart.startClient(GradleStart.java:100)
    at GradleStart.main(GradleStart.java:55)
    
    A detailed walkthrough of the error, its code path and all known details is as follows:
    ---------------------------------------------------------------------------------------
    
    -- System Details --
    Details:
    Minecraft Version: 1.7.10
    Operating System: Windows 7 (amd64) version 6.1
    Java Version: 1.7.0_71, Oracle Corporation
    Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
    Memory: 865548040 bytes (825 MB) / 1038876672 bytes (990 MB) up to 1038876672 bytes (990 MB)
    JVM Flags: 3 total; -Xincgc -Xmx1024M -Xms1024M
    AABB Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used
    IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0
    FML: MCP v9.05 FML v7.10.18.1180 Minecraft Forge 10.13.0.1180 4 mods loaded, 4 mods active
    mcp{9.05} [Minecraft Coder Pack] (minecraft.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available
    FML{7.10.18.1180} [Forge Mod Loader] (forgeSrc-1.7.10-10.13.0.1180.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available
    Forge{10.13.0.1180} [Minecraft Forge] (forgeSrc-1.7.10-10.13.0.1180.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available
    minesagasmod{1.0.0} [MineSagasMod] (bin) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available
    Launched Version: 1.7.10
    LWJGL: 2.9.1
    OpenGL: AMD Radeon HD 8570D GL version 4.4.13084 Compatibility Profile Context 14.301.1004.0, ATI Technologies Inc.
    GL Caps: Using GL 1.3 multitexturing.
    Using framebuffer objects because OpenGL 3.0 is supported and separate blending is supported.
    Anisotropic filtering is supported and maximum anisotropy is 16.
    Shaders are available because OpenGL 2.1 is supported.
    
    Is Modded: Definitely; Client brand changed to 'fml,forge'
    Type: Client (map_client.txt)
    Resource Packs: [Soartex-Fanver-1.8.zip]
    Current Language: Français (France)
    Profiler Position: N/A (disabled)
    Vec3 Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used
    Anisotropic Filtering: On (16)
    
    

    Juste pour l'info j'ai suivi ce tuto donc si il y a une erreur peut-être qu'elle viendra de ce dernier il me semble l'avoir suivi à la lettr à moins qu'il y ait une différence du tick handler entre la 1.7.2 et la 1.7.10 :
    http://www.minecraftforum.net/forums/mapping-and-modding/mapping-and-modding-tutorials/1571567-1-7-2-1-6-4-eventhandler-and

    PS = j'ai déplacé l'appel de la méthode initialiseTickHandler() dans les 3 event init  : rien à faire ! le résultat est le même ; à savoir un crash ou plutôt un NPE


  • Administrateurs

    if(mc.thePlayer != null)
    {
        mc.thePlayer.setDead();
    }
    

    Faut juste mettre un petit null check …
    Temps que tu n'es pas dans un monde, le joueur est nul.



  • @'robin4002':

    if(mc.thePlayer != null)
    {
        mc.thePlayer.setDead();
    }
    

    Faut juste mettre un petit null check …
    Temps que tu n'es pas dans un monde, le joueur est nul.

    Pendant un moment je me suis dit il faut surement une condition qui check si le joueur est dans le monde mais à ma connaissance je n'en connaissais pas mais tout simplement il fallait check si il n'est pas null….. (facepalm)

    HAHAHA je ne pense jamais ça !!!! Je teste et j'édite

    EDIT = c'est bon ça marche mais pourquoi n'a-t-il pas mis cette condition dans son tutoriel? surement car tout le monde qui le lisait aurait du  y pense honte à moi ><) nan sinon merci encore à toi robin  😄