Résolu 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 ! -
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 suiteEDIT : ça fonctionne très bien
Pulgarn -> je voulais qu’il soit insensible au jour, pas au feu.