RandomArmor



  • Bonjour à tous,
    j'ai un petit problème de compréhension concernant la méthode addRandomArmor()
    En fait, je l'ai retrouvé dans la class du zombie :

    
        protected void addRandomArmor()
    
        {
            super.addRandomArmor();
    
            if (this.rand.nextFloat() < (this.worldObj.difficultySetting == EnumDifficulty.HARD ? 0.05F : 0.01F))
            {
                int i = this.rand.nextInt(3);
    
                if (i == 0)
                {
                    this.setCurrentItemOrArmor(0, new ItemStack(Items.iron_sword));
                }
                else
                {
                    this.setCurrentItemOrArmor(0, new ItemStack(Items.iron_shovel));
                }
            }
        }
    
    

    j'ai pensé qu'elle pourrait m'aider à équiper mon mob "bandit" car il craint le feu et je voudrais lui mettre aléatoirement des casques (en forme de head customs) pour à la fois contrer l'effet du feu et aussi pouvoir leur mettre des visages différents. Mais alors là j'ai deux problèmes :

    En fait je voudrais lui obliger à avoir à la fois une probable arme parmi 6 armes ou la main nue, mais dans tout les cas un casque obligatoire parmi les 4 casques (bandithead1, bandithead2 …). Je ne sais pas trop comment transformer la méthode pour rendre ça possible.
    J'ai essayé quelques codes mais ça retournait à chaque fois au "else" sans prendre en compte les valeurs conditionnées dans les "if".
    De plus je ne sais pas comment dire qu'il faut une des 6 armes (ou pas) et un des 4 casques (obligatoirement).
    C'est comme si à chaque fois il fallait deux return, ou alors deux fois la même méthode.

    Si quelqu'un peut m'aider je lui en serais très reconnaissant. 🙂
    Merci d'avance !


  • Administrateurs

        protected void addRandomArmor()
        {
            super.addRandomArmor();
    
    //on s'occupe d'abord du casque
    int helmet = this.rand.nextInt(4); // génère un nombre entre 0 et 4 exclut (donc 0, 1, 2 ou 3)
    if(helmet == 0)
    {
    this.setCurrentItemOrArmor(4, new ItemStack(ClassePrincipale.bandithead1));
    }
    else if(helmet == 1)
    {
    this.setCurrentItemOrArmor(4, new ItemStack(ClassePrincipale.bandithead2));
    }
    else if(helmet == 2)
    {
    this.setCurrentItemOrArmor(4, new ItemStack(ClassePrincipale.bandithead3));
    }
    else if(helmet == 3)
    {
    this.setCurrentItemOrArmor(4, new ItemStack(ClassePrincipale.bandithead4));
    }
    
            if (this.rand.nextFloat() < 0.10F) // nextFloat() génère un nombre entre 0.0 et 1.0 exclut, il y a donc 10 % de chance que cette boucle soit exécuté
            {
                int weapon = this.rand.nextInt(6); // génère un nombre entre 0 et 6 exclut
    
                if (weapon == 0)
                {
                    this.setCurrentItemOrArmor(0, new ItemStack(ClassePrincipale.arme1));
                }
                else if(weapon == 1)
                {
    this.setCurrentItemOrArmor(0, new ItemStack(ClassePrincipale.arme2));
                }
    else if(weapon == 2)
    {
    this.setCurrentItemOrArmor(0, new ItemStack(ClassePrincipale.arme3));
    }
    else if(weapon == 3)
    {
    this.setCurrentItemOrArmor(0, new ItemStack(ClassePrincipale.arme4));
    }
    else if(weapon == 4)
    {
    this.setCurrentItemOrArmor(0, new ItemStack(ClassePrincipale.arme5));
    }
    else if(weapon == 5)
    {
    this.setCurrentItemOrArmor(0, new ItemStack(ClassePrincipale.arme6));
    }
            }
        }
    
    

    Voila, je pense que tu as la réponse à tes deux questions.



  • il y a moyen de changer test sa dans le constructeur de ton entité

    this.isImmuneToFire = false;
    


  • Merci beaucoup pour le coup de main.
    Je vais essayer ça de suite

    EDIT : ça fonctionne très bien 😉
    Pulgarn -> je voulais qu'il soit insensible au jour, pas au feu. 🙂