Mob qui lorsqu'il attaque met en feu



  • Bonjour !

    Je suis nouveau sur le forum , et je souhaiterais savoir comment mettre un joueur en feu lorsque le joueur est attaquer/toucher par le mob .
    -> Comme le zombie quand il est en feu mais là ce serais pas en fonction de l'heure , ni si le mob est en feu … Le mob n'est pas en feu mais metle joueur en feu .

    Merci d'avance !

    Cordialement ,

    JEREMY60800



  • Rajoute ça dans la classe de ton entity

    
    public boolean attackEntityAsMob(Entity entity)
       {
           if (super.attackEntityAsMob(entity))
           {
                entity.setFire(5 * 20);//5 est le nombre de secondes souhaitées durant laquelle l'entity brûlera
               return true;
           }
           return false;
       }
    
    

  • Administrateurs

    Salut,
    Il suffit de reprendre le code du zombie et de le modifier :

       public boolean attackEntityAsMob(Entity entityIn)
       {
           boolean flag = super.attackEntityAsMob(entityIn); // obtient le résultat de la valeur de EntityMob.attackEntityAsMob(entity) comme EntityZombie est extends EntityMob. Cette fonction renvoie true si l'entité a été attaqué.
    
           if (flag) // si l'entité a bien été attaqué.
           {
               int i = this.worldObj.getDifficulty().getDifficultyId(); // on récupère la difficulté
    
               if (this.getHeldItem() == null && this.isBurning() && this.rand.nextFloat() < (float)i * 0.3F) // si le zombie n'a pas de casque, qu'il brule et qu'un nombre compris entre 0 et 1 (exclut) est inférieur à 0,3* la difficulté
               {
                   entityIn.setFire(2 * i); // on brule l'entité touché pendant 2* la difficulté secondes.
               }
           }
    
           return flag;
       }
    

    Version modifié :

       public boolean attackEntityAsMob(Entity entityIn)
       {
           boolean flag = super.attackEntityAsMob(entityIn); // ton entité doit être extends EntityMob
    
           if (flag) // si l'entité a bien été attaqué.
           {
                   entityIn.setFire(3); // à toi de mettre ce que tu veux ici
           }
           return flag;
       }
    

    Rien de compliqué.

    EDIT : Plaigon a été plus rapide que moi, par contre il s'est planté, dans la fonction setFire(int time) time est en seconde et non en tick donc il ne faut pas multiplier par 20.



  • Re ,

    Merci !
    Cela fonctionne parfaitement !

    Cordialement ,

    JEREMY60800