Résolu Problème ClientTick Pluie Acide
-
Bonjour ! Pour mon mod j’ai créer un damage de “pluies acides” (le mod est aussi un serveur)
donc dans ClientTicks.java j’ai:
:::
package zeamateis.viruz.client; import java.util.EnumSet; import net.minecraft.client.Minecraft; import net.minecraft.client.model.ModelBiped; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.DamageSource; import net.minecraft.world.World; import zeamateis.viruz.manage.DamageSourcesManager; import cpw.mods.fml.common.ITickHandler; import cpw.mods.fml.common.TickType; public class ClientTicks implements ITickHandler { public World worldObj; public EntityPlayer entityPlayer; public void tickStart(EnumSet <ticktype>type, Object… tickData)//Actions au debut d un tick { } public void tickEnd(EnumSet <ticktype>type, Object... tickData)//Actions a la fin d un tick { if(type.equals(EnumSet.of(TickType.PLAYER))) { acidRainDamage((EntityPlayer)tickData[0]); } } @Override public EnumSet <ticktype>ticks() { return EnumSet.of(TickType.PLAYER, TickType.RENDER, TickType.CLIENT); } public void acidRainDamage(EntityPlayer player) { if (entityPlayer.worldObj.isRaining()) { player.attackEntityFrom(DamageSourcesManager.acidRain, 0); } } @Override public String getLabel() {return null;} }
:::
Et comme code d’erreur:
:::
–-- Minecraft Crash Report ---- // Don't be sad. I'll do better next time, I promise! Time: 26/12/13 00:20 Description: Ticking entity java.lang.NullPointerException at zeamateis.viruz.client.ClientTicks.acidRainDamage(ClientTicks.java:45) at zeamateis.viruz.client.ClientTicks.tickEnd(ClientTicks.java:32) at cpw.mods.fml.common.SingleIntervalHandler.tickEnd(SingleIntervalHandler.java:34) at cpw.mods.fml.common.FMLCommonHandler.tickEnd(FMLCommonHandler.java:141) at cpw.mods.fml.common.FMLCommonHandler.onPlayerPostTick(FMLCommonHandler.java:389) at net.minecraft.entity.player.EntityPlayer.onUpdate(EntityPlayer.java:404) at net.minecraft.client.entity.EntityClientPlayerMP.onUpdate(EntityClientPlayerMP.java:76) at net.minecraft.world.World.updateEntityWithOptionalForce(World.java:2342) at net.minecraft.world.World.updateEntity(World.java:2304) at net.minecraft.world.World.updateEntities(World.java:2150) at net.minecraft.client.Minecraft.runTick(Minecraft.java:1853) at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:835) at net.minecraft.client.Minecraft.run(Minecraft.java:760) at java.lang.Thread.run(Unknown Source) A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- Head -- Stacktrace: at zeamateis.viruz.client.ClientTicks.acidRainDamage(ClientTicks.java:45) at zeamateis.viruz.client.ClientTicks.tickEnd(ClientTicks.java:32) at cpw.mods.fml.common.SingleIntervalHandler.tickEnd(SingleIntervalHandler.java:34) at cpw.mods.fml.common.FMLCommonHandler.tickEnd(FMLCommonHandler.java:141) at cpw.mods.fml.common.FMLCommonHandler.onPlayerPostTick(FMLCommonHandler.java:389) at net.minecraft.entity.player.EntityPlayer.onUpdate(EntityPlayer.java:404) at net.minecraft.client.entity.EntityClientPlayerMP.onUpdate(EntityClientPlayerMP.java:76) at net.minecraft.world.World.updateEntityWithOptionalForce(World.java:2342) at net.minecraft.world.World.updateEntity(World.java:2304) -- Entity being ticked -- Details: Entity Type: null (net.minecraft.client.entity.EntityClientPlayerMP) Entity ID: 34 Entity Name: Survivant 156 Entity's Exact location: 1267,71, 6,79, -904,75 Entity's Block location: World: (1267,6,-905), Chunk: (at 3,0,7 in 79,-57; contains blocks 1264,0,-912 to 1279,255,-897), Region: (2,-2; contains chunks 64,-64 to 95,-33, blocks 1024,0,-1024 to 1535,255,-513) Entity's Momentum: 0,00, -0,08, 0,00 Stacktrace: at net.minecraft.world.World.updateEntities(World.java:2150) -- Affected level -- Details: Level name: MpServer All players: 1 total; [EntityClientPlayerMP['Survivant 156'/34, l='MpServer', x=1267,71, y=6,79, z=-904,75]] Chunk stats: MultiplayerChunkCache: 50 Level seed: 0 Level generator: ID 01 - flat, ver 0\. Features enabled: false Level generator options: Level spawn location: World: (1270,4,-877), Chunk: (at 6,0,3 in 79,-55; contains blocks 1264,0,-880 to 1279,255,-865), Region: (2,-2; contains chunks 64,-64 to 95,-33, blocks 1024,0,-1024 to 1535,255,-513) Level time: 23585 game time, 4153 day time Level dimension: 0 Level storage version: 0x00000 - Unknown? Level weather: Rain time: 0 (now: true), thunder time: 0 (now: false) Level game mode: Game mode: survival (ID 0). Hardcore: false. Cheats: false Forced entities: 2 total; [EntityClientPlayerMP['Survivant 156'/34, l='MpServer', x=1267,71, y=6,79, z=-904,75], EntityChicken['Chicken'/20, l='MpServer', x=1323,56, y=4,00, z=-869,56]] Retry entities: 0 total; [] Stacktrace: at net.minecraft.client.multiplayer.WorldClient.addWorldInfoToCrashReport(WorldClient.java:441) at net.minecraft.client.Minecraft.addGraphicsAndWorldToCrashReport(Minecraft.java:2414) at net.minecraft.client.Minecraft.run(Minecraft.java:776) at java.lang.Thread.run(Unknown Source) – System Details -- Details: Minecraft Version: 1.5.2 Operating System: Windows 8 (x86) version 6.2 Java Version: 1.7.0_45, Oracle Corporation Java VM Version: Java HotSpot(TM) Client VM (mixed mode), Oracle Corporation Memory: 880740896 bytes (839 MB) / 1046937600 bytes (998 MB) up to 1046937600 bytes (998 MB) JVM Flags: 3 total; -Xincgc -Xmx1024M -Xms1024M AABB Pool Size: 806 (45136 bytes; 0 MB) allocated, 15 (840 bytes; 0 MB) used Suspicious classes: FML and Forge are installed IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0 FML: MCP v7.51 FML v5.2.23.738 Minecraft Forge 7.8.1.738 4 mods loaded, 4 mods active mcp{7.51} [Minecraft Coder Pack] (minecraft.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available FML{5.2.23.738} [Forge Mod Loader] (coremods) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available Forge{7.8.1.738} [Minecraft Forge] (coremods) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available ViruZ{1.2} [ViruZ] (bin) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available LWJGL: 2.4.2 OpenGL: Intel(R) HD Graphics 3000 GL version 3.1.0 - Build 9.17.10.3347, Intel Is Modded: Definitely; Client brand changed to 'fml,forge' Type: Client (map_client.txt) Texture Pack: ViruZ -Texture Pack.zip Profiler Position: N/A (disabled) Vec3 Pool Size: 40 (2240 bytes; 0 MB) allocated, 40 (2240 bytes; 0 MB) used
:::
J’espère que vous trouverez l’erreur car je cherche en vains ….</ticktype></ticktype></ticktype>
-
java.lang.NullPointerException
Vérifie que toutes tes variables sont initialisées.
La preuve :
La ligne 53 possède une erreur, et sur cette ligne :
return null;
-
C’est à dire ?
-
Au lieu de return null, change en quelque chose.
Juste “” suffit, mais ne laisse pas le return null, car sinon, le client va demander le label, on va lui dire qu’il est null : Le client pointe vers null et cause une erreur nullPointerException
-
Je me suis apperçu que l’error log est faut je corrige ça, parce-que à aucun moment il n’y a de “retrun null;” donc voilà le problème
-
Si, ici :
@Override public String getLabel() {return null;}
Sinon plutôt qu’utiliser un tickHandler qui n’agit que sur le joueur, j’utiliserai plutôt l’event LivingUpdateEvent qui agit sur toutes les entités vivantes. Également, tu as oublié de vérifier que l’entité voit le ciel. (il devrait avoir ça dans le code de l’enderman).
Et pour finir, dégât = serveur et pas client, donc faut pas utiliser un tickhandler de type client mais de type serveur (ou l’event que je t’ai proposé).
-
Un event serait en effet plus approprié.
De plus, j’ai bien dis que c’était ligne 53 qu’il y avait un return null.
Enfin, j’ai simplement penser a corriger le crash et non le principe
-
Si je met “return false;”, il me demande de mettre en boolean, et même avec le boolean j’ai une erreur
-
Normal, il te demande de retourner un String, non un boolean.
Mets simplement deux guillemets : “”
-
j’ai la même erreur même avec les guillemets donc, robin tu parlé d’un event “LivingUpdateEvent” comment je fait ?
genre ?
public onLivingUpdateEvent (LivingUpdateEvent livingUpdateEvent)
{
} -
Bon j’y arrive pas, ce que je fait ne marche pas ou crash.
Je l’ai mis dans un Ticks pour le serveur “ServerTicks.java” je l’ai bien déclaré dans commonproxy mais marche pas -
Fait avec l’event
-
Comme tout les event, dans ta classe principale tu enregistre la classe ou tu as l’event, et cette classe du mets le void avec @ForgeSubscribe (cf : tutoriel sur le son ou l’event drop).
-
Bien ! J’avance ! Mais j’ai une nouvelle erreur !
J’ai ce code::::
package zeamateis.viruz.manage; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.player.EntityPlayer; import net.minecraftforge.event.EventPriority; import net.minecraftforge.event.ForgeSubscribe; import net.minecraftforge.event.entity.living.LivingEvent; public class LivingEventManager { @ForgeSubscribe(priority = EventPriority.NORMAL) public void LivingUpdateEvent(LivingEvent event) { if(event.entity instanceof EntityPlayer) { if (event.entity.isWet()) { event.entity.attackEntityFrom(DamageSourcesManager.acidRain, 1); } } } }
:::
et cette erreur:
-
LivingUpdateEvent pas LivingEvent :
package zeamateis.viruz.manage; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.player.EntityPlayer; import net.minecraftforge.event.EventPriority; import net.minecraftforge.event.ForgeSubscribe; import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent; public class LivingEventManager { @ForgeSubscribe(priority = EventPriority.NORMAL) public void LivingUpdateEvent(LivingUpdateEvent event) { if(event.entity instanceof EntityPlayer) { if (event.entity.isWet()) { event.entity.attackEntityFrom(DamageSourcesManager.acidRain, 1); } } } }
Juste, pourquoi event.entity.isWet() et pas event.entityLiving.worldObj.isRaining() ?
-
Merci ! ça fonctionne ! quelle bête erreur ! Merci
-
En effet, isWet() peut aussi compter pour l’eau ( Comme les endermans ) et donc faire que l’eau soit acide.
-
Puis-je supprimer ce post ?
-
Pourquoi le supprimer? D’autres personnes peuvent en avoir besoin!
-
Si ton problème est résolu, passe le résolu mais ne le supprime pas.