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

    Effets de potions qui ne disparaissent pas

    Sans suite
    1.7.2
    3
    9
    3230
    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.
    • S
      SkyLop dernière édition par

      C’est encore moi,

      J’ai maintenant un autre problème, toujours avec mes papillotes, cette fois-ci on admet que ma papillote me donne un morceau de chocolat moisi. Celui-ci est censé me donné des effets négatifs quand je le mange. C’est ce qu’il fait, mais il y a 2 problèmes :

      il arrive d’avoir 2effets en même temps quand je le mange, et les effets ne disparaissent pas tous le temps, il restent pour certains afficher dans l’inventaire.

      Voici ma classe :

      package fr.cloudcommunity.fiesta.common;
      
      import net.minecraft.client.renderer.texture.IIconRegister;
      import net.minecraft.entity.player.EntityPlayer;
      import net.minecraft.item.ItemFood;
      import net.minecraft.item.ItemStack;
      import net.minecraft.potion.Potion;
      import net.minecraft.potion.PotionEffect;
      import net.minecraft.world.World;
      
      public class Morceau_chocolat extends ItemFood
      {
      
      @Override
      public void registerIcons(IIconRegister iconregister)
      {
      this.itemIcon = iconregister.registerIcon(ModFiesta.MODID + ":morceau_chocolat");
      //Défini son icone
      }
      
      public Morceau_chocolat()
      {
      super(5,false); // D'abord combien de demi-gigot ça rend + si c'est de la bouffe pour les loups
      this.setCreativeTab(ModFiesta.FiestaMod);
      }
      
      public ItemStack onEaten(ItemStack ItemStack, World World, EntityPlayer EntityPlayer)
      {
      int random = (int)(Math.random()*9);
      switch(random){
      case 1:
      EntityPlayer.addPotionEffect(new PotionEffect(Potion.regeneration.id, 60, 1)); //Durée de l'effet en tick (20tick = 1s) puis niveau de l'effet(Avec amplificateur de 0, la potion sera de niveau 1\. Avec un amplificateur de 1, la potion sera de niveau 2\. L'amplificateur monte jusqu'à 4, au-delà le niveau de la potion ne s'affiche plus en jeu.)
      break;
      case 2:
      EntityPlayer.addPotionEffect(new PotionEffect(Potion.nightVision.id, 60, 1));
      break;
      case 3:
      EntityPlayer.addPotionEffect(new PotionEffect(Potion.fireResistance.id, 60, 1));
      break;
      case 4:
      EntityPlayer.addPotionEffect(new PotionEffect(Potion.heal.id, 60, 1));
      break;
      case 5:
      EntityPlayer.addPotionEffect(new PotionEffect(Potion.waterBreathing.id, 60, 1));
      break;
      case 6:
      EntityPlayer.addPotionEffect(new PotionEffect(Potion.moveSpeed.id, 60, 1));
      break;
      case 7:
      EntityPlayer.addPotionEffect(new PotionEffect(Potion.jump.id, 60, 1));
      break;
      case 8:
      EntityPlayer.addPotionEffect(new PotionEffect(Potion.digSpeed.id, 60, 1));
      break;
      case 9:
      EntityPlayer.addPotionEffect(new PotionEffect(Potion.resistance.id, 60, 1));
      break;
      default:
      break;
      }
      
      System.out.println(random + "");
      ItemStack.stackSize –;
      return ItemStack;
      
      }
      
      }
      
      

      Voilà, et je ne comprends pas d’où vient le problème.
      Merci d’avance aux personnes qui prendront du temps pour me répondre.

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

        Il me semble que les niveaux de potions sont 1-2-3-4 et pas 0-1-2-3
        Ensuite remplace (int)(Math.random()*9) par new Random().nextInt(9)+1

        Moddeur à la retraite et développeur de trucs en Java.

        J'aide les gens comme je peux, alors si mon message v…

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

          Le problème c’est que tu fais l’effet sur les deux sides (client et serveur)
          Mets tout le code dans une condition : if(!World.isRemote) ça devrait régler le problème.

          1 réponse Dernière réponse Répondre Citer 0
          • S
            SkyLop dernière édition par

            Alors, dans l’ordre, j’ai essayé ça :

            package fr.cloudcommunity.fiesta.common;
            
            import java.util.Random;
            
            import net.minecraft.client.renderer.texture.IIconRegister;
            import net.minecraft.entity.player.EntityPlayer;
            import net.minecraft.item.ItemFood;
            import net.minecraft.item.ItemStack;
            import net.minecraft.potion.Potion;
            import net.minecraft.potion.PotionEffect;
            import net.minecraft.world.World;
            
            public class Morceau_chocolat_moisi extends ItemFood
            {
            
            @Override
            public void registerIcons(IIconRegister iconregister)
            {
            this.itemIcon = iconregister.registerIcon(ModFiesta.MODID + ":Morceau_chocolat_moisi");
            //Défini son icone
            }
            
            public Morceau_chocolat_moisi()
            {
            super(2,false); // D'abord combien de demi-gigot ça rend + si c'est de la bouffe pour les loups
            this.setCreativeTab(ModFiesta.FiestaMod);
            
            }
            
            public ItemStack onEaten(ItemStack ItemStack, World World, EntityPlayer EntityPlayer)
            {
            if(!World.isRemote){
            
            int random = (int)(Math.random()*9);
            switch(random){
            case 1:
            EntityPlayer.addPotionEffect(new PotionEffect(Potion.blindness.id, 60, 1)); //Durée de l'effet en tick (20tick = 1s) puis niveau de l'effet(Avec amplificateur de 0, la potion sera de niveau 1\. Avec un amplificateur de 1, la potion sera de niveau 2\. L'amplificateur monte jusqu'à 4, au-delà le niveau de la potion ne s'affiche plus en jeu.)
            break;
            case 2:
            EntityPlayer.addPotionEffect(new PotionEffect(Potion.confusion.id, 60, 1));
            break;
            case 3:
            EntityPlayer.addPotionEffect(new PotionEffect(Potion.digSlowdown.id, 60, 1));
            break;
            case 4:
            EntityPlayer.addPotionEffect(new PotionEffect(Potion.hunger.id, 60, 1));
            break;
            case 5:
            EntityPlayer.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, 60, 1));
            break;
            case 6:
            EntityPlayer.addPotionEffect(new PotionEffect(Potion.poison.id, 60, 1));
            break;
            case 7:
            EntityPlayer.addPotionEffect(new PotionEffect(Potion.invisibility.id, 60, 1));
            break;
            case 8:
            EntityPlayer.addPotionEffect(new PotionEffect(Potion.weakness.id, 60, 1));
            break;
            case 9:
            EntityPlayer.addPotionEffect(new PotionEffect(Potion.wither.id, 60, 1));
            break;
            default:
            break;
            }
            ItemStack.stackSize –;
            return ItemStack;
            }
            
            }
            
            }
            
            

            Puis j’ai essayé ça :

            package fr.cloudcommunity.fiesta.common;
            
            import java.util.Random;
            
            import net.minecraft.client.renderer.texture.IIconRegister;
            import net.minecraft.entity.player.EntityPlayer;
            import net.minecraft.item.ItemFood;
            import net.minecraft.item.ItemStack;
            import net.minecraft.potion.Potion;
            import net.minecraft.potion.PotionEffect;
            import net.minecraft.world.World;
            
            public class Morceau_chocolat_moisi extends ItemFood
            {
            
            @Override
            public void registerIcons(IIconRegister iconregister)
            {
            this.itemIcon = iconregister.registerIcon(ModFiesta.MODID + ":Morceau_chocolat_moisi");
            //Défini son icone
            }
            
            public Morceau_chocolat_moisi()
            {
            super(2,false); // D'abord combien de demi-gigot ça rend + si c'est de la bouffe pour les loups
            this.setCreativeTab(ModFiesta.FiestaMod);
            
            }
            
            public ItemStack onEaten(ItemStack ItemStack, World World, EntityPlayer EntityPlayer)
            {
            if(!World.isRemote){
            
            int random = new Random().nextInt(9)+1;
            switch(random){
            case 1:
            EntityPlayer.addPotionEffect(new PotionEffect(Potion.blindness.id, 60, 1)); //Durée de l'effet en tick (20tick = 1s) puis niveau de l'effet(Avec amplificateur de 0, la potion sera de niveau 1\. Avec un amplificateur de 1, la potion sera de niveau 2\. L'amplificateur monte jusqu'à 4, au-delà le niveau de la potion ne s'affiche plus en jeu.)
            break;
            case 2:
            EntityPlayer.addPotionEffect(new PotionEffect(Potion.confusion.id, 60, 1));
            break;
            case 3:
            EntityPlayer.addPotionEffect(new PotionEffect(Potion.digSlowdown.id, 60, 1));
            break;
            case 4:
            EntityPlayer.addPotionEffect(new PotionEffect(Potion.hunger.id, 60, 1));
            break;
            case 5:
            EntityPlayer.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, 60, 1));
            break;
            case 6:
            EntityPlayer.addPotionEffect(new PotionEffect(Potion.poison.id, 60, 1));
            break;
            case 7:
            EntityPlayer.addPotionEffect(new PotionEffect(Potion.invisibility.id, 60, 1));
            break;
            case 8:
            EntityPlayer.addPotionEffect(new PotionEffect(Potion.weakness.id, 60, 1));
            break;
            case 9:
            EntityPlayer.addPotionEffect(new PotionEffect(Potion.wither.id, 60, 1));
            break;
            default:
            break;
            }
            }
            
            }
            
            }
            
            

            Et enfin j’ai essayé ça :

            package fr.cloudcommunity.fiesta.common;
            
            import java.util.Random;
            
            import net.minecraft.client.renderer.texture.IIconRegister;
            import net.minecraft.entity.player.EntityPlayer;
            import net.minecraft.item.ItemFood;
            import net.minecraft.item.ItemStack;
            import net.minecraft.potion.Potion;
            import net.minecraft.potion.PotionEffect;
            import net.minecraft.world.World;
            
            public class Morceau_chocolat_moisi extends ItemFood
            {
            
            @Override
            public void registerIcons(IIconRegister iconregister)
            {
            this.itemIcon = iconregister.registerIcon(ModFiesta.MODID + ":Morceau_chocolat_moisi");
            //Défini son icone
            }
            
            public Morceau_chocolat_moisi()
            {
            super(2,false); // D'abord combien de demi-gigot ça rend + si c'est de la bouffe pour les loups
            this.setCreativeTab(ModFiesta.FiestaMod);
            
            }
            
            protected void onFoodEaten(ItemStack ItemStack, World World, EntityPlayer EntityPlayer)
            {
            if(!World.isRemote){
            
            int random = World.rand.nextInt(8)+1;
            switch(random){
            case 1:
            EntityPlayer.addPotionEffect(new PotionEffect(Potion.blindness.id, 60, 1)); //Durée de l'effet en tick (20tick = 1s) puis niveau de l'effet(Avec amplificateur de 0, la potion sera de niveau 1\. Avec un amplificateur de 1, la potion sera de niveau 2\. L'amplificateur monte jusqu'à 4, au-delà le niveau de la potion ne s'affiche plus en jeu.)
            break;
            case 2:
            EntityPlayer.addPotionEffect(new PotionEffect(Potion.confusion.id, 60, 1));
            break;
            case 3:
            EntityPlayer.addPotionEffect(new PotionEffect(Potion.digSlowdown.id, 60, 1));
            break;
            case 4:
            EntityPlayer.addPotionEffect(new PotionEffect(Potion.hunger.id, 60, 1));
            break;
            case 5:
            EntityPlayer.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, 60, 1));
            break;
            case 6:
            EntityPlayer.addPotionEffect(new PotionEffect(Potion.poison.id, 60, 1));
            break;
            case 7:
            EntityPlayer.addPotionEffect(new PotionEffect(Potion.invisibility.id, 60, 1));
            break;
            case 8:
            EntityPlayer.addPotionEffect(new PotionEffect(Potion.weakness.id, 60, 1));
            break;
            case 9:
            EntityPlayer.addPotionEffect(new PotionEffect(Potion.wither.id, 60, 1));
            break;
            default:
            break;
            }
            }
            
            }
            
            }
            
            

            Au final ces trois solutions arrivent au même résultat :
            -C’est à dire que oui les effets disparaissent à tous les coups.
            -Cependant 1fois sur 10 je chope encore 2 effets de potions, ils apparaissent l’un après l’autre, mais les deux sont actifs en même temps quand même…

            Donc bon, ceci est-il réparable ?

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

              switch(World.rand.nextInt(9)
              Et commence à 0 à la place de 1.

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

                Fait, et le soucis est le même 😞

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

                  La deuxième solution avec la modification proposée par Robin à l’air d’être la bonne. Ajoute un @Override, on ne sait jamais

                  Moddeur à la retraite et développeur de trucs en Java.

                  J'aide les gens comme je peux, alors si mon message v…

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

                    En fait cela est vraiment bizarre. J’ai l’impression que l’erreur ne vient pas de mon code, mais du jeu en lui même.
                    Le fait que 1fois sur 10 j’ai 2 effets au lieu d’un est étrange.
                    Faudrait tester avec un mod vierge pour voir, un item mangeable qui te donne des effets et c’est tout, juste pour voir si le problème persiste.
                    Je ferai peut-être cela plus tard, je posterai à l’occasion dans ce sujet les résultats 😉

                    En tout cas j’aime bien ce forum très réactif, je reviendrai surement poser mes autres problèmes, peut-être qu’à force de me les corriger je n’en ferai plus 😉

                    Aller, et un +1 pour vous deux !

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

                      Ce bug doit sûrement être dû à un lag ou un problème de synchronisation client/serveur

                      Moddeur à la retraite et développeur de trucs en Java.

                      J'aide les gens comme je peux, alors si mon message v…

                      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