Résolu 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-andPS = 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
-
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