23 mars 2014, 11:35

Bonjour tout le monde ! C’est AlphaSwittleTeam pour un petit tuto sur comment faire régénérer des points de vie à un mob au contact d’autres !

Sommaire :

  • Pré-requis
  • Au contact d’autres ? Gné o_O ?
  • Un peu de théorie.
  • Enfin la pratique !

Pré-requis

  • Connaître un peu le Java.
  • Savoir faire un mob simple.

Au contact d’autres ? Gné o_O ?

Vous vous demandez ce que je veut dire par au contact d’autres ? Je veut dire que si par exemple votre mob est un boss (pharaon), et que ses sous-fifres (momies) sont à cotés de lui, il récupéreras de la vie !

Un peu de théorie.

Bon , voici la partie la plus ennuyeuse du tuto :D. Cette partie est certe ennuyeuse (et pour les flemmards, vous pouvez la passer), mais elle est importante pour comprendre la suite du tuto. Alors, allons-y !

Premièrement, de quoi allons-nous avoirs besoin ?

  • La classe du mob “chef”
  • La classe du mob “sous-fifre”

Nous avons aussi besoin d’une méthode qui s’exécute à chaque tick de l’entitée. Quoi de mieux dans ce cas que le onLivingUpdate() ?

Nous n’aurons pas besoin de modifier la classe du “sous-fifre”, seulement celle du chef 😉

Enfin la pratique !

Alors, prêts ? 1, 2, 3… Allons-y !

Ouvrez la classe de votre mob “chef”, et allez dans la fonction onLivingUpdate(), comme ceci :

public void onLivingUpdate()
{
    super.onLivingUpdate();
}

Bien ! C’est facile pour l’instant mais ça se corse 😄

Dans la méthode ci-dessus, ajoutez ce bout de code :

this.getEntitiesNearby(this.worldObj, this.posX, this.posY, this.posZ);

Expliquons ce code :

-Le worldObj est l’instance de l’objet World présent dans chaque mob.
-Les 3 autres paramètres sont les coordonnées qu’on utiliseras plus tard.

Vous devriez avoir une erreur : ne vous inquiétez pas, c’est normal, nous n’avons pas encore créer la méthode getEntitiesNearby().
Remédions à cela et créons la, voulez vous ?

private void getEntitiesNearby(World world, double currentPosX, double currentPosY, double currentPosZ)
{
}

Réglons les paramètres pour qu’ils soient utilisables :

private void getEntitiesNearby(World world, double currentPosX, double currentPosY, double currentPosZ)
{
    currentPosX = this.posX;
    currentPosY = this.posY;
    currentPosZ = this.posZ;
}

Passons maintenant à la partie dure du tuto !

Pour avoir un objet List de toutes les entitées dans un rayon donné, nous allons utiliser un objet AxisAlignedBB !

List entitiesNearby = world.getEntitiesWithinAABB(VotreSousFifre.class, AxisAlignedBB.getBoundingBox(currentPosX, currentPosY, currentPosZ, currentPosX + 32, currentPosY + 32, currentPosZ + 32));

Dans cet exemple, le mob aura une sphère de sélection invisible de 32 blocs !

Maintenant, je veut faire que plus il y a d’entitées, plus le mob régénère ! Cela est possible à l’aide d’une boucle for :

for (float i = 0; i <= mummiesNearby.size(); i++)
{

}

Maintenant, il suffit de vérifier qu’on est sur le coté serveur, et de heal le mob !

if (!this.worldObj.isRemote)
{
    this.heal(i);
}

Et voila ! Notre méthode est finie ! Vous devriez avoir ça :

private void getEntitiesNearby(World world, double currentPosX, double currentPosY, double currentPosZ)
{
    currentPosX = this.posX;
    currentPosY = this.posY;
    currentPosZ = this.posZ;
    List entitiesNearby = world.getEntitiesWithinAABB(VotreSousFifre.class, AxisAlignedBB.getBoundingBox(currentPosX, currentPosY, currentPosZ, currentPosX + 32, currentPosY + 32, currentPosZ + 32));

    for (float i = 0; i <= mummiesNearby.size(); i++)
    {
        if (!this.worldObj.isRemote)
        {
            this.heal(i);
        }
    }
}

Et voila c’est fini ! A bientôt les amis !