• S'inscrire
    • Se connecter
    • Recherche
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes

    Résolu Crash inexpliquable Tick Handler

    1.7.x
    1.7.10
    2
    3
    931
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • Deleted
      Deleted dernière édition par

      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

      1 réponse Dernière réponse Répondre Citer 0
      • robin4002
        robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

        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.

        1 réponse Dernière réponse Répondre Citer 1
        • Deleted
          Deleted dernière édition par

          @‘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  😄

          1 réponse Dernière réponse Répondre Citer 0
          • 1 / 1
          • Premier message
            Dernier message
          Design by Woryk
          Contact / Mentions Légales

          MINECRAFT FORGE FRANCE © 2018

          Powered by NodeBB