Encore quelques problèmes. Attaque de mobs, impossible de se lever et autres ..



  • Salut

    J'ai, en plus du traîneau, quelques problèmes avec mon mod.

    1. J'ai voulu faire en sorte que quand un joueur a un effet que j'ai créé, il ne peut plus attaquer aucun mob, à l'exception des boss. Ca marche très bien mais j'ai quand même une erreur dans les logs quand "j'attaque" :
    [15:43:32] [Server thread/ERROR] [FML]: Exception caught during firing event net.minecraftforge.event.entity.player.AttackEntityEvent@100f1c7b:
    java.lang.NullPointerException
    at net.minecraft.entity.EntityLivingBase.attackEntityFrom(EntityLivingBase.java:924) ~[EntityLivingBase.class:?]
    at net.minecraft.entity.monster.EntityMob.attackEntityFrom(EntityMob.java:80) ~[EntityMob.class:?]
    at This_is_Christmas.CommonEventHandler.MagicOfChristmasEffectPlayerAttack(CommonEventHandler.java:123) ~[CommonEventHandler.class:?]
    at net.minecraftforge.fml.common.eventhandler.ASMEventHandler_8_CommonEventHandler_MagicOfChristmasEffectPlayerAttack_AttackEntityEvent.invoke(.dynamic) ~[?:?]
    at net.minecraftforge.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:49) ~[ASMEventHandler.class:?]
    at net.minecraftforge.fml.common.eventhandler.EventBus.post(EventBus.java:140) [EventBus.class:?]
    at net.minecraftforge.common.ForgeHooks.onPlayerAttackTarget(ForgeHooks.java:916) [ForgeHooks.class:?]
    at net.minecraft.entity.player.EntityPlayer.attackTargetEntityWithCurrentItem(EntityPlayer.java:1297) [EntityPlayer.class:?]
    at net.minecraft.entity.player.EntityPlayerMP.attackTargetEntityWithCurrentItem(EntityPlayerMP.java:1373) [EntityPlayerMP.class:?]
    at net.minecraft.network.NetHandlerPlayServer.processUseEntity(NetHandlerPlayServer.java:1092) [NetHandlerPlayServer.class:?]
    at net.minecraft.network.play.client.CPacketUseEntity.processPacket(CPacketUseEntity.java:93) [CPacketUseEntity.class:?]
    at net.minecraft.network.play.client.CPacketUseEntity.processPacket(CPacketUseEntity.java:14) [CPacketUseEntity.class:?]
    at net.minecraft.network.PacketThreadUtil$1.run(PacketThreadUtil.java:15) [PacketThreadUtil$1.class:?]
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_92]
    at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_92]
    at net.minecraft.util.Util.runTask(Util.java:25) [Util.class:?]
    at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:740) [MinecraftServer.class:?]
    at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:685) [MinecraftServer.class:?]
    at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:155) [IntegratedServer.class:?]
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:534) [MinecraftServer.class:?]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_92]
    [15:43:32] [Server thread/ERROR] [FML]: Index: 1 Listeners:
    [15:43:32] [Server thread/ERROR] [FML]: 0: NORMAL
    [15:43:32] [Server thread/ERROR] [FML]: 1: ASM: This_is_Christmas.CommonEventHandler@1bdc5006 MagicOfChristmasEffectPlayerAttack(Lnet/minecraftforge/event/entity/player/AttackEntityEvent;)V
    [15:43:32] [Server thread/ERROR] [FML]: 2: ASM: This_is_Christmas.CommonEventHandler@24a170e0 MagicOfChristmasEffectPlayerAttack(Lnet/minecraftforge/event/entity/player/AttackEntityEvent;)V
    [15:43:32] [Server thread/FATAL]: Error executing task
    java.util.concurrent.ExecutionException: java.lang.NullPointerException
    at java.util.concurrent.FutureTask.report(Unknown Source) ~[?:1.8.0_92]
    at java.util.concurrent.FutureTask.get(Unknown Source) ~[?:1.8.0_92]
    at net.minecraft.util.Util.runTask(Util.java:26) [Util.class:?]
    at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:740) [MinecraftServer.class:?]
    at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:685) [MinecraftServer.class:?]
    at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:155) [IntegratedServer.class:?]
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:534) [MinecraftServer.class:?]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_92]
    Caused by: java.lang.NullPointerException
    at net.minecraft.entity.EntityLivingBase.attackEntityFrom(EntityLivingBase.java:924) ~[EntityLivingBase.class:?]
    at net.minecraft.entity.monster.EntityMob.attackEntityFrom(EntityMob.java:80) ~[EntityMob.class:?]
    at This_is_Christmas.CommonEventHandler.MagicOfChristmasEffectPlayerAttack(CommonEventHandler.java:123) ~[CommonEventHandler.class:?]
    at net.minecraftforge.fml.common.eventhandler.ASMEventHandler_8_CommonEventHandler_MagicOfChristmasEffectPlayerAttack_AttackEntityEvent.invoke(.dynamic) ~[?:?]
    at net.minecraftforge.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:49) ~[ASMEventHandler.class:?]
    at net.minecraftforge.fml.common.eventhandler.EventBus.post(EventBus.java:140) ~[EventBus.class:?]
    at net.minecraftforge.common.ForgeHooks.onPlayerAttackTarget(ForgeHooks.java:916) ~[ForgeHooks.class:?]
    at net.minecraft.entity.player.EntityPlayer.attackTargetEntityWithCurrentItem(EntityPlayer.java:1297) ~[EntityPlayer.class:?]
    at net.minecraft.entity.player.EntityPlayerMP.attackTargetEntityWithCurrentItem(EntityPlayerMP.java:1373) ~[EntityPlayerMP.class:?]
    at net.minecraft.network.NetHandlerPlayServer.processUseEntity(NetHandlerPlayServer.java:1092) ~[NetHandlerPlayServer.class:?]
    at net.minecraft.network.play.client.CPacketUseEntity.processPacket(CPacketUseEntity.java:93) ~[CPacketUseEntity.class:?]
    at net.minecraft.network.play.client.CPacketUseEntity.processPacket(CPacketUseEntity.java:14) ~[CPacketUseEntity.class:?]
    at net.minecraft.network.PacketThreadUtil$1.run(PacketThreadUtil.java:15) ~[PacketThreadUtil$1.class:?]
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) ~[?:1.8.0_92]
    at java.util.concurrent.FutureTask.run(Unknown Source) ~[?:1.8.0_92]
    at net.minecraft.util.Util.runTask(Util.java:25) ~[Util.class:?]
    … 5 more
    

    Ca me renvoie à la ligne ```java
    target.attackEntityFrom(null, 0);

    Voilà le code en entier : ```java
    @SubscribeEvent
    public void MagicOfChristmasEffectPlayerAttack(AttackEntityEvent event)
    {
    EntityPlayer player = event.getEntityPlayer();
    Entity target = event.getTarget();
    ChristmasPotion potion = ChristmasPotion.MagicOfChristmasEffect;
    
    if(player.isPotionActive(potion))
    {
    if(target instanceof EntityPlayer)
    {
    TextComponentTranslation textcomponenttranslation = new TextComponentTranslation("msg.christmas.effect.attack.player");
    textcomponenttranslation.getStyle().setColor(TextFormatting.RED);
    player.addChatMessage(textcomponenttranslation);
    target.attackEntityFrom(null, 0);
    }
    else if(((target instanceof EntityAmbientCreature) || (target instanceof EntityAnimal) || (target instanceof EntityTameable) || (target instanceof EntityWaterMob) || (target instanceof EntityIronGolem) || (target instanceof EntitySnowman)) && !(target instanceof EntityVillager))
    {
    TextComponentTranslation textcomponenttranslation = new TextComponentTranslation("msg.christmas.effect.attack.passive");
    textcomponenttranslation.getStyle().setColor(TextFormatting.RED);
    player.addChatMessage(textcomponenttranslation);
    target.attackEntityFrom(null, 0);
    }
    else if(((target instanceof EntityMob) || (target instanceof EntityGhast) || (target instanceof EntityShulker) || (target instanceof EntitySlime)) && !(target instanceof EntityWither))
    {
    TextComponentTranslation textcomponenttranslation = new TextComponentTranslation("msg.christmas.effect.attack.monster");
    textcomponenttranslation.getStyle().setColor(TextFormatting.RED);
    player.addChatMessage(textcomponenttranslation);
    target.attackEntityFrom(null, 0);
    }
    else if(target instanceof EntityVillager)
    {
    TextComponentTranslation textcomponenttranslation = new TextComponentTranslation("msg.christmas.effect.attack.villager");
    textcomponenttranslation.getStyle().setColor(TextFormatting.RED);
    player.addChatMessage(textcomponenttranslation);
    target.attackEntityFrom(null, 0);
    }
    }
    }
    

    Mais ce qui est bizarre, c'est que même si y'a une erreur ça marche quand même.

    1. J'ai aussi voulu faire que les monstres ne peuvent plus attaqué les joueurs ayant l'effet. J'ai fait :
    @SubscribeEvent
    public void test(LivingSetAttackTargetEvent event)
    {
    EntityLivingBase target = event.getTarget();
    if(target instanceof EntityPlayer)
    {
    EntityPlayer player = (EntityPlayer)event.getTarget();
    ChristmasPotion potion = ChristmasPotion.MagicOfChristmasEffect;
    if(player.isPotionActive(potion))
    {
    Entity entity = event.getEntity();
    System.out.println(entity);
    System.out.println(player);
    
    System.out.println("target est instance EntityPlayer");
    if(((entity instanceof EntityMob) || (entity instanceof EntityGhast) || (entity instanceof EntityShulker) || (entity instanceof EntitySlime)) && !(entity instanceof EntityWither))
    {
    System.out.println("entity est bien instance de monstre");
    player = (EntityPlayer)null;
    System.out.println("après mise de player à null, player est = " + player);
    }
    }
    }
    }
    ``` (j'ai appelé la fonction test mais je modifierai quand ça marcherai, c'est une mauvaise habitude que j'ai qui est à l'origine d'un autre problème) Mais ça ne marche pas, les monstres continuent quand même à vouloir m'attaqué. Voilà les logs :
    

    [15:41:20] [Server thread/INFO] [STDOUT]: [This_is_Christmas.CommonEventHandler:test:159]: EntityCreeper['Creeper'/29, l='New World', x=-1221,08, y=4,00, z=-1997,38]
    [15:41:20] [Server thread/INFO] [STDOUT]: [This_is_Christmas.CommonEventHandler:test:160]: EntityPlayerMP['Player367'/93, l='New World', x=-1226,63, y=4,00, z=-2000,26]
    [15:41:20] [Server thread/INFO] [STDOUT]: [This_is_Christmas.CommonEventHandler:test:162]: target est instance EntityPlayer
    [15:41:20] [Server thread/INFO] [STDOUT]: [This_is_Christmas.CommonEventHandler:test:165]: entity est bien instance de monstre
    [15:41:20] [Server thread/INFO] [STDOUT]: [This_is_Christmas.CommonEventHandler:test:167]: après mise de player à null, player est = null

    Là, on voit bien que player est null à la fin, alors je vois pas pourquoi les monstres veulent quand même m'attaqué.
    
    3) J'aimerai modifié le nom interne d'un mob. Qu'est ce que j'appelle le nom interne ? C'est le 1er string qui est à la création d'un mob :
    ```java
    EntityRegistry.registerModEntity(EntitySantaClausHelper.class, "MOB", 503, "This_is_Christmas", 40, 1, true);
    

    Comme vous pouvez voir, j'ai mis MOB. Je vais vous expliquer pourquoi. Je voulais créer un mob ayant la particularité et la fonction que je lui est donné, mais je ne savais pas encore quoi mettre comme nom. J'ai finalement trouvé : SantaClausHelper. Je l'ai modifié partout, sauf à cet endroit. J'aimerais modifié ce nom, mais du coup il faudrait aussi modifié les mondes ayant cettte entité, car je savais que les mondes utilise les noms internes et que si on le modifie, le monde ne le trouve plus et donc le supprime. J'ai testé pour être sûr, et ce fut le cas.
    Je ne sais pas du tout si c'est possible.

    1. J'ai un problème avec mon effet. C'est la magie de Noël, et j'ai fait en sorte que quand on est en décembre, on ait une chance sur x que l'effet s'active quand on se réveille, et où x diminue quand on s'approche du 25 (en gros, plus on se rapproche de Noël, plus on a de chance de l'obtenir). J'ai aussi fait que quand l'effet s'active, il neige. Et là arrive le problème.
      J'ai fait comme ça :
    @SubscribeEvent
    public void MagicOfChristmasEffectActivator(PlayerWakeUpEvent event)
    {
    if(calendar.get(2) + 1 == 11 && calendar.get(5) < 26)
    {
    Random random = event.getEntityPlayer().worldObj.rand;
    
    int dayNumber = calendar.get(calendar.DAY_OF_MONTH);
    int randomNumberExcluded = (25 - dayNumber) + 1;
    int randomNumber = random.nextInt(randomNumberExcluded);
    
    if(randomNumber == 0)
    {
    MagicOfChristmasEffect(event.getEntityPlayer());
    }
    }
    }
    
    public void MagicOfChristmasEffect(EntityPlayer player)
    {
    ChristmasPotion potion = ChristmasPotion.MagicOfChristmasEffect;
    PotionEffect potioneffect = new PotionEffect(potion, 12536, 0, false, true);
    WorldServer worldserver = player.getServer().worldServers[0];
    WorldInfo worldinfo = worldserver.getWorldInfo();
    TextComponentTranslation textcomponenttranslation = new TextComponentTranslation("msg.christmas.effect");
    textcomponenttranslation.getStyle().setColor(TextFormatting.RED);
    
    player.addPotionEffect(potioneffect);
    player.addChatMessage(textcomponenttranslation);
    worldinfo.setCleanWeatherTime(0);
    worldinfo.setRainTime(12536);
    worldinfo.setThunderTime(0);
    worldinfo.setRaining(true);
    worldinfo.setThundering(false);
    }
    
    ```Et quand je me lève, je me peux pas me lever (veut rien dire). En fait, le jour se lève, j'obtient bien l'effet mais il ne neige pas et ça ne me lève pas, je reste dans le lit (comme s'il fait nuit). Quand j'appuie sur Leave Bed (pour me lever), la neige commence à tomber, mais je ne peux toujours pas me lever.
    J'obtient une erreur dans les logs seulement quand le jour arrive (donc une seule fois), pas quand j'appuie sur le bouton :
    

    [17:37:37] [Client thread/ERROR] [FML]: Exception caught during firing event net.minecraftforge.event.entity.player.PlayerWakeUpEvent@78abcd0:
    java.lang.NullPointerException
    at This_is_Christmas.CommonEventHandler.MagicOfChristmasEffect(CommonEventHandler.java:81) ~[CommonEventHandler.class:?]
    at This_is_Christmas.CommonEventHandler.MagicOfChristmasEffectActivator(CommonEventHandler.java:72) ~[CommonEventHandler.class:?]
    at net.minecraftforge.fml.common.eventhandler.ASMEventHandler_10_CommonEventHandler_MagicOfChristmasEffectActivator_PlayerWakeUpEvent.invoke(.dynamic) ~[?:?]
    at net.minecraftforge.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:49) ~[ASMEventHandler.class:?]
    at net.minecraftforge.fml.common.eventhandler.EventBus.post(EventBus.java:140) [EventBus.class:?]
    at net.minecraftforge.event.ForgeEventFactory.onPlayerWakeup(ForgeEventFactory.java:383) [ForgeEventFactory.class:?]
    at net.minecraft.entity.player.EntityPlayer.wakeUpPlayer(EntityPlayer.java:1711) [EntityPlayer.class:?]
    at net.minecraft.client.network.NetHandlerPlayClient.handleAnimation(NetHandlerPlayClient.java:928) [NetHandlerPlayClient.class:?]
    at net.minecraft.network.play.server.SPacketAnimation.processPacket(SPacketAnimation.java:49) [SPacketAnimation.class:?]
    at net.minecraft.network.play.server.SPacketAnimation.processPacket(SPacketAnimation.java:11) [SPacketAnimation.class:?]
    at net.minecraft.network.PacketThreadUtil$1.run(PacketThreadUtil.java:15) [PacketThreadUtil$1.class:?]
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_92]
    at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_92]
    at net.minecraft.util.Util.runTask(Util.java:25) [Util.class:?]
    at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1109) [Minecraft.class:?]
    at net.minecraft.client.Minecraft.run(Minecraft.java:404) [Minecraft.class:?]
    at net.minecraft.client.main.Main.main(Main.java:118) [Main.class:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_92]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_92]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_92]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_92]
    at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?]
    at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_92]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_92]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_92]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_92]
    at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97) [start/:?]
    at GradleStart.main(GradleStart.java:26) [start/:?]
    [17:37:37] [Client thread/ERROR] [FML]: Index: 1 Listeners:
    [17:37:37] [Client thread/ERROR] [FML]: 0: NORMAL
    [17:37:37] [Client thread/ERROR] [FML]: 1: ASM: This_is_Christmas.CommonEventHandler@451426ac MagicOfChristmasEffectActivator(Lnet/minecraftforge/event/entity/player/PlayerWakeUpEvent;)V
    [17:37:37] [Client thread/ERROR] [FML]: 2: ASM: This_is_Christmas.CommonEventHandler@1bdc5006 MagicOfChristmasEffectActivator(Lnet/minecraftforge/event/entity/player/PlayerWakeUpEvent;)V
    [17:37:37] [Client thread/FATAL]: Error executing task
    java.util.concurrent.ExecutionException: java.lang.NullPointerException
    at java.util.concurrent.FutureTask.report(Unknown Source) ~[?:1.8.0_92]
    at java.util.concurrent.FutureTask.get(Unknown Source) ~[?:1.8.0_92]
    at net.minecraft.util.Util.runTask(Util.java:26) [Util.class:?]
    at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1109) [Minecraft.class:?]
    at net.minecraft.client.Minecraft.run(Minecraft.java:404) [Minecraft.class:?]
    at net.minecraft.client.main.Main.main(Main.java:118) [Main.class:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_92]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_92]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_92]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_92]
    at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?]
    at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_92]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_92]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_92]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_92]
    at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97) [start/:?]
    at GradleStart.main(GradleStart.java:26) [start/:?]
    Caused by: java.lang.NullPointerException
    at This_is_Christmas.CommonEventHandler.MagicOfChristmasEffect(CommonEventHandler.java:81) ~[CommonEventHandler.class:?]
    at This_is_Christmas.CommonEventHandler.MagicOfChristmasEffectActivator(CommonEventHandler.java:72) ~[CommonEventHandler.class:?]
    at net.minecraftforge.fml.common.eventhandler.ASMEventHandler_10_CommonEventHandler_MagicOfChristmasEffectActivator_PlayerWakeUpEvent.invoke(.dynamic) ~[?:?]
    at net.minecraftforge.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:49) ~[ASMEventHandler.class:?]
    at net.minecraftforge.fml.common.eventhandler.EventBus.post(EventBus.java:140) ~[EventBus.class:?]
    at net.minecraftforge.event.ForgeEventFactory.onPlayerWakeup(ForgeEventFactory.java:383) ~[ForgeEventFactory.class:?]
    at net.minecraft.entity.player.EntityPlayer.wakeUpPlayer(EntityPlayer.java:1711) ~[EntityPlayer.class:?]
    at net.minecraft.client.network.NetHandlerPlayClient.handleAnimation(NetHandlerPlayClient.java:928) ~[NetHandlerPlayClient.class:?]
    at net.minecraft.network.play.server.SPacketAnimation.processPacket(SPacketAnimation.java:49) ~[SPacketAnimation.class:?]
    at net.minecraft.network.play.server.SPacketAnimation.processPacket(SPacketAnimation.java:11) ~[SPacketAnimation.class:?]
    at net.minecraft.network.PacketThreadUtil$1.run(PacketThreadUtil.java:15) ~[PacketThreadUtil$1.class:?]
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) ~[?:1.8.0_92]
    at java.util.concurrent.FutureTask.run(Unknown Source) ~[?:1.8.0_92]
    at net.minecraft.util.Util.runTask(Util.java:25) ~[Util.class:?]
    … 15 more

    Le crash me rapporte cette ligne : ```java
    WorldServer worldserver = player.getServer().worldServers[0];
    ```J'ai essayé de l'enlevé, ça marche bien, ce qui prouve que c'est bien le changement de météo qui rentre en conflit avec le réveil.
    
    5) Ce dernier problème n'est pas très grave, mais si on pouvait le résoudre, ça serait mieux. Le 25 décembre, j'ai un joli message nous souhaitant un joyeux Noël. Jusque là, rien de grave. Mais ce message s'affiche deux fois, comme si on se connectait 2 fois instantannément.
    Voilà le code :
    ```java
    Calendar calendar = Calendar.getInstance();
    
    @SubscribeEvent
    public void onPlayerLoggedIn(PlayerEvent.PlayerLoggedInEvent worldEvent)
    {
    if (calendar.get(2) + 1 == 12 && calendar.get(5) == 25)
    {
    TextComponentTranslation textcomponenttranslation = new TextComponentTranslation("msg.christmas.merry", worldEvent.player.getDisplayName());
    textcomponenttranslation.getStyle().setColor(TextFormatting.DARK_GREEN);
    worldEvent.player.addChatMessage(textcomponenttranslation);
    }
    }
    

    Voilà. Si vous pouvez m'aider à résoudre ces problèmes, n'hésitez pas 😉

    Merci d'avance


  • Administrateurs

    Salut,

    1. Tu cherches à faire quoi avec ton target.attackEntityFrom(null, 0); ?
      Car là ce que tu fais c'est attaquer 0 de dégât depuis une source null, or la source n'a pas le droit d'être null (d'où le npe).
      Si tu veux annuler les dégâts, il faut faire un event.setCancel(true);

    2. La seule chose que tu fais c'est mettre à null ta variable local.
      Forcement ça ne fonctionne pas …
      Il faut faire comme ça :
      ((EntityLiving)event.getEntityLiving()).setAttackTarget(null);

    3. je ne crois pas qu'on peut.
      Pour les blocs et item, il y a MissingMappingEvent. Mais rien pour les entités

    4. player.getServer() n'existe que côté serveur, tu as surement un problème de side.
      Utilises plutôt player.worldObj.
      Si tu as vraiment besoin du world 0, ajoutes un if(!player.worldObj.isRemote) avant.

    5. à nouveau surement un problème de side, ajoutes dans le if && !worldEvent.player.worldObj.isRemote



  • Ok merci, ça marche mieux (du moins pour les 2 premiers).J'ai toujours des problèmes pour les 2 derniers. Quand j'obtient l'effet, je peux à nouveau me lever, mais il ne neige toujours pas. J'ai essayer tes 2 méthodes, mais rien, il ne neige toujours pas. Pourtant, dans la condition, j'ai mis un message et ça s'affiche bien.

    Pour le message de Noël, au départ j'avais pensé comme toi, que c'était un problème de side. Du coup, j'ai essayé de le mettre dans le clientProxy mais ça faisait rien de plus. Mais j'ai pas pensé à le faire comme t'as proposé : uniquement serveur. En tout cas, ça l'affiche toujours 2 fois. Ce qui est bizarre, c'est que en 1.7 et 1.8, j'utilisais le même code et ça ne l'affichait qu'une seule fois.


  • Administrateurs

    1. étrange.

    2. ahhh je sais pourquoi.
      En fait rien à voir avec le side (cet event est en serveur only).
      Dans ta classe principale, retires la ligne FMLCommonHandle.instance().bus().register(new TaClassD'event());
      Depuis la 1.8 la méthode de forge sert pour tous les event, celle de fml est déprécié (elle disparaît en 1.9) et fait temporairement la même chose que celle de forge.
      Donc actuellement tout tes event se font en double …



  • Ok merci. Ca marche bien maintenant. Mais t'es sûr qu'elle va disparaître ? Parce que pour mon mod d'halloween (qui est en 1.10), elle existe toujours.

    Je vais faire des recherches pour mon problème 4 et je reviens quand j'aurais trouvé


  • Administrateurs

    Ils ne l'ont pas retiré en 1.9 ? C'était pourtant prévu. Ils ont sûrement oublié.



  • Salut
    Pour la 4, c'est bien le WorldServer qui fait que je ne me peut pas me lever. J'ai décomposé : ```java
    EntityPlayer worldserver = event.getEntityPlayer();//.getServer().worldServers[0];
    MinecraftServer mcserver = worldserver.getServer();
    WorldServer worldserv = mcserver.worldServers[0];
    //World worldserver = player.worldObj;
    WorldInfo worldinfo = worldserv.getWorldInfo();

    J'ai donc essayer de faire ça :```java
    EntityPlayer worldserver = event.getEntityPlayer();//.getServer().worldServers[0];
    MinecraftServer mcserver = worldserver.getServer();
    WorldServer worldserv = mcserver.worldServerForDimension(worldserver.dimension);
    //World worldserver = player.worldObj;
    WorldInfo worldinfo = worldserv.getWorldInfo();
    ```(en récupérant la dimension du joueur) mais c'est pareil, même erreur au même endroit.
    
    Du coup, je sais pas comment faire. J'aimerais vraiment que la neige s'active. Après, peut-être qu'il y a une autre méthode de faire ça : il faudrait que ça neige tant que l'effet est actif (comme l'effet dure 12536 ticks, la neige devra aussi durer 12536 ticks).

  • Administrateurs

    Pour la deuxième fois, player.getServer() n'existe que côté serveur.
    Côté client ça renvoies null.

    Donc tant que tu utilisera cette fonction tu aura un NPE.



  • Ah oui c'est vrai, j'ai complètement oublié. Désolé
    Du coup, j'ai mis la condition si le monde n'est pas remote, y'a pas d'erreur mais il ne neige toujours pas. Du coup, il faudrait passer par autre chose pour mettre la neige en même temps que l'effet. Mais je sais pas quoi


  • Administrateurs

    event.getEntityPlayer().worldObj.getWorldInfo(); ça ne va pas ?



  • Bah en fait c'est bizarre. J'ai mis ton code, et quand je me couche et que je me lève en appuyant sur le bouton, il neige. Mais quand j'attend que le jour arrive, il ne neige pas. Ce qu'il y a de plus bizarre, c'est les logs. J'ai mis ça : ```java
    WorldInfo worldinfo = event.getEntityPlayer().worldObj.getWorldInfo();
    System.out.println(worldinfo);
    worldinfo.setRainTime(12536);
    worldinfo.setThunderTime(0);
    worldinfo.setRaining(true);
    worldinfo.setThundering(false);
    System.out.println(worldinfo.isRaining());
    System.out.println(worldinfo.getRainTime());

    Et les logs me donnent ça : ```
    [15:53:02] [Server thread/INFO] [STDOUT]: [This_is_Christmas.CommonEventHandler:MagicOfChristmasEffectActivator:88]: net.minecraft.world.storage.WorldInfo@5883e379
    true
    12536
    [15:53:02] [Client thread/INFO]: [CHAT] msg.christmas.effect
    [15:53:02] [Client thread/INFO] [STDOUT]: [This_is_Christmas.CommonEventHandler:MagicOfChristmasEffectActivator:88]: net.minecraft.world.storage.WorldInfo@1ad39c66
    true
    12536
    [15:53:02] [Client thread/INFO]: [CHAT] msg.christmas.effect
    ```Pourtant, y'a tout pour qu'il neige et même les logs le disent. Je ne pense pas, mais est-ce que ça serait parce que le code s'exécute deux fois ?

  • Administrateurs

    Je sais où est le problème.
    Quand on dort et qu'il neige ou pleut, la pluie / la neige s'arrête.
    Le code qui gère ça s'exécute donc après ton code, ce qui désactive ta neige.



  • Ah ouais, c'est vrai …
    Mais du coup, y'aurait pas un moyen d'annuler ça ?


  • Administrateurs

    Aucune idée.



  • J'ai trouvé où ça remet à zéro le temps. Dans la classe WorldServer, dans la fonction wakeAllPlayers, ça appelle une fonction de la même classe qui, à son tour appelle cette fonction dans la classe WorldProvider :

    public void resetRainAndThunder()
    {
    worldObj.worldInfo.setRainTime(0);
    worldObj.worldInfo.setRaining(false);
    worldObj.worldInfo.setThunderTime(0);
    worldObj.worldInfo.setThundering(false);
    }
    ``` Du coup, je me demande si ça serait possible d'annuler l'appelle de cette fonction, ou alors de modifier les valeurs. J'avais essayé de cancel l'event PlayerWakeUp pour ensuite mettre le jour manuellement, mais on peut pas le cancel.
    Une idée ?

  • Administrateurs

    Sans modification du byte code (via un coremod) tu ne pourra pas changer la fonction (ni ses valeurs ni le fait qu'elle soit appelé)

    Une solution que je vois (mais pas super propre) est de changer la valeur d'une variable int qui serait dans la classe de tes évent, et ensuite via l'évent WorldTickEvent décrémenter cette variable et activer la neige lorsqu'elle arrive à 0.



  • Salut
    Pourquoi dit tu que ce n'est pas très propre ?
    Sinon voilà ce que j'ai fait :

    int timer = 5;
    […]
    @SubscribeEvent
    public void SnowTimer(WorldTickEvent event)
    {
    if(timer == 4)
    {
    WorldInfo worldinfo = event.world.getWorldInfo();
    worldinfo.setRainTime(12532);
    worldinfo.setThunderTime(0);
    worldinfo.setRaining(true);
    worldinfo.setThundering(false);
    }
    if(timer <= 4)
    {
    timer++;
    }
    }
    

    Et dans l'obtention de mon effet (en gros, quand le jouer se lève) :```java
    timer = 0;

    Ca marche bien. Mais j'ai un autre problème (que j'avais déjà avant). Je sais pas si on pourra y faire grand chose mais quand j'obtient l'effet, je fais afficher un message par ```java
    public void MagicOfChristmasEffect(EntityPlayer player)
    {
    ChristmasPotion potion = ChristmasPotion.MagicOfChristmasEffect;
    PotionEffect potioneffect = new PotionEffect(potion, 12536, 0, false, true);
    TextComponentTranslation textcomponenttranslation = new TextComponentTranslation("msg.christmas.effect");
    textcomponenttranslation.getStyle().setColor(TextFormatting.RED);
    
    player.addPotionEffect(potioneffect);
    player.addChatMessage(textcomponenttranslation);
    }
    ```Et le problème, c'est que le message s'affiche deux fois. Mais cette fonction n'est appelée qu'une seule fois, quand le joueur se lève. Une idée pour régler ?
    
    Merci d'avance

  • Administrateurs

    Tu as essayé avec if(!player.worldObj.isRemote()) ?

    Je dis que ce n'est pas très propre car la solution nécessite une fonction qui est exécuté à chaque tick pour faire quelque chose seulement a un moment donné et non à chaque fois.



  • Salut
    Mais avec ce que j'ai fait, ce n'est exécuté qu'à un moment donné, tant que ma variable n'atteint pas 5. Je comprend, mais c'est (sans doute) la seule solution (en tout cas pour l'instant).
    Sinon, pour la condition ça marche. Je le savais qu'il faut mettre cette condition mais à chaque fois, j'y pense jamais. 😕
    Je vais essayé d'y penser les autres fois, mais c'est pas gagné. Je sais pas pourquoi, j'arrive à faire/penser des trucs compliqué de tête (par exemple, hier un ami m'a demandé 91*500) mais des trucs aussi simple que ça, j'y arrive pas. Mais bon, je vais arrêté le HS, c'est de la psychologie, plus du codage

    En tout cas, merci à toi 😄 Tout marche bien