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 !