SOLVED 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

  • Administrateurs Rédacteurs Moddeurs confirmés

    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

  • Administrateurs Rédacteurs Moddeurs confirmés

    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:

    http://pastebin.com/GZXVr3yS

  • Administrateurs Rédacteurs Moddeurs confirmés

    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!

  • Modérateurs

    Si ton problème est résolu, passe le résolu mais ne le supprime pas.