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 !
- Connaître un peu le Java.
- Savoir faire un mob simple.
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 !
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 
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 !