[1.7]Item/Entity lancé par un mob



  • Bonjour, bonjour à vous !

    Alors, je vous explicite mon problème un peu plus que mon maigre titre.

    L’idée est simple. J’aimerais faire un "sort", un peu similaire à une boule de feu (dont j’ai déjà regardé le code à l’occasion), et qui puisse se "lancer" sans l’aide d’un arc, etc.
    L’item servant de sort doit également laisser des particules sur le chemin qu’il suit… Et pareil je n’arrive pas à trouver où aller chercher pour cela.
    Dans la finalité, ce serait pour qu’un mob précis uniquement puisse lancer ce "sort" (j’ai déjà un mob de prêt je cherche juste comment faire l’interaction en fait).

    Donc je ne sais pas si je dois :

    1| Faire une entity qui va être lancé. Là je vais avoir besoin d‘un coup de main parce que j’ai testé de faire une flèche custom, mais je suis un peu perdu sur comment bien faire (et puis je n’ai pas trouvé comment lancé un objet sans arc) et je n’arrive à rien.

    2| Faire un item que le mob tiens et lance… J’arrive à lui faire tenir un item que j’étends de Fireball, mais le mob n’est pas censé tenir quoi que ce soit, juste lancer le "sort" (pattern d’attaque du squelette mais sans arc…), ce que je n'arrive pas à lui faire faire d'ailleurs…

    Bref j’ai besoin d‘un peu d’aide ou d’une marche à suivre pour savoir où aller chercher les choses 🙂

    Merci d’avance !


  • Modérateurs

    1. Crée une flèche avec une classe fille de EntityThrowable et customise là. Clique moi pour avoir un exemple.
      Ensuite il te faudra faire quelque chose de la sorte:
    
    World monde = …;
    EntitySuperBottleOfXp bottle = new EntitySuperBottleOfXp(monde, lanceur);
    monde.spawnEntityInWorld(bottle);
    
    

    (De tête, peut être faux sur certains points)

    1. Honnêtement, je n'ai pas trop compris ce que tu veux (c'est surement parce que je suis juste fatigué)

    J'espère avoir pu t'aider



  • Oui j'ai du mal m'exprimer, je m'en excuse. En fait c'est parce que j'aurais voulu qu'il n'y est pas de rendu au niveau du mob, comme s'il ne tenait rien du tout dans les mains, mais qu'il pouvait quand même lancer quelque chose (mon sort ici), mais je ne sais pas si c'est vraiment possible…

    Ou alors créer un item invisible, mais ça m'enchante pas des masses/

    Je vais aller regarder du coté de ton git, je te remercie, je vous tiens au courant.


  • Administrateurs

    Salut,
    Tu n'as pas besoin de faire en sorte que ton mob ait un item en main, il suffit juste d'ajouter le code pour spawner ton EntityThrowable lorsque le mob attaque.



  • @'Kazeyome':

    Bonjour, bonjour à vous !

    Alors, je vous explicite mon problème un peu plus que mon maigre titre.

    L’idée est simple. J’aimerais faire un "sort", un peu similaire à une boule de feu (dont j’ai déjà regardé le code à l’occasion), et qui puisse se "lancer" sans l’aide d’un arc, etc.
    L’item servant de sort doit également laisser des particules sur le chemin qu’il suit… Et pareil je n’arrive pas à trouver où aller chercher pour cela.
    Dans la finalité, ce serait pour qu’un mob précis uniquement puisse lancer ce "sort" (j’ai déjà un mob de prêt je cherche juste comment faire l’interaction en fait).

    Donc je ne sais pas si je dois :

    1| Faire une entity qui va être lancé. Là je vais avoir besoin d‘un coup de main parce que j’ai testé de faire une flèche custom, mais je suis un peu perdu sur comment bien faire (et puis je n’ai pas trouvé comment lancé un objet sans arc) et je n’arrive à rien.

    2| Faire un item que le mob tiens et lance… J’arrive à lui faire tenir un item que j’étends de Fireball, mais le mob n’est pas censé tenir quoi que ce soit, juste lancer le "sort" (pattern d’attaque du squelette mais sans arc…), ce que je n'arrive pas à lui faire faire d'ailleurs…

    Bref j’ai besoin d‘un peu d’aide ou d’une marche à suivre pour savoir où aller chercher les choses 🙂

    Merci d’avance !

    Salut Kazeyome regarde un peu du côté de l'EntityGhast.
    Pour ma part je t'ai dégoté un code dont je ne suis pas sûr de la réussite essaie de passer ton mob en EntityMob et ajoute lui ceci et dis moi tout

    
    protected void updateEntityActionState()
    {
    if (this.tempsentrechaqueattaque== 20)
    {
    this.worldObj.playAuxSFXAtEntity((EntityPlayer)null, 1008, (int)this.posX, (int)this.posY, (int)this.posZ, 0);
    EntityLargeFireball entitybouledeghast= new EntityLargeFireball(this.worldObj, this, d5, d6, d7);
    entitybouledeghast.field_92057_e = this.explosionStrength;
    double d8 = 4.0D;
    Vec3 vec3 = this.getLook(1.0F);
    entitybouledeghast.posX = this.posX + vec3.xCoord * d8;
    entitybouledeghast.posY = this.posY + (double)(this.height / 2.0F) + 0.5D;
    entitybouledeghast.posZ = this.posZ + vec3.zCoord * d8;
    this.worldObj.spawnEntityInWorld(entitybouledeghast);
    this.tempsentrechaqueattaque= -40;
    }
    }
    else if (this.tempsentrechaqueattaque> 0)
    {
    –this.tempsentrechaqueattaque;
    }
    }
    
    

    Et ajoute cette variable en haut de ta class, je ne suis pas sûr mais je te conseille de ne pas l'initialiser

    
    public int tempsentrechaqueattaque;
    
    


  • Bonjour ! Alors j’ai essayé de voir mais je n’arrive pas à grand-chose…
    @Julot10085 : J'ai essayé de rajouter ça dans le mob mais ça n'a pas marché, aucune réaction… En initialisant la variable ou pas la variable d'ailleurs /:
    Je n’arrive pas à faire attaquer le mob autrement qu’à la main.
    Je chercher vraiment un truc simple, quelques chose qui fasse le même effet que quand on reçoit une flèche... Eventuellement par la suite rajouter un effet négatif de potion mais j'aimerais bien réussir la première étape 🙂

    Je vous donnes les classes que j'ai trafiqué...

    Alors, la classe de l'entitié : http://pastebin.com/rsVcHMX3
    Puis, la classe du render : http://pastebin.com/1SBj5XG3
    La classe de mon mob : http://pastebin.com/wgBL52br
    dans mon proxy client : http://pastebin.com/FMn2b94x

    J'ai bien un sortilege.png dans le dossier textures/entity
    Le mob est bien déclaré au niveau de la classe principale.


  • Modérateurs

    Cherche la méthode attackEntityAsMob(…) dans EntitySpider et copie/colle la sur ton code. Normalement, à ce point, ton mob devrait te sauter dessus pour attaquer (comme les araignées). Si oui, customise ensuite ce morceau de code pour faire que ton mob envoie le sortilège.



  • Il n'y a pas attackEntityAsMob(…), juste attackEntity (ce n'est d'ailleurs pas censé être le pattern d'attaque par défaut ?).
    En fait je n'arrive pas à comprendre comment faire pour justement lui faire envoyer le sortilège 😕


  • Modérateurs

    C'était bien attackEntity(), désolé

    Sinon, je pense que ceci devrait marcher.

    
    @Override
    protected void attackEntity(Entity par1Entity, float par2) {
    if(this.attackTime <= 0 && par2 < 2.0F && par1Entity.boundingBox.maxY > this.boundingBox.minY && par1Entity.boundingBox.minY < this.boundingBox.maxY){
    if(worldObj.isRemote) // On vérifie que l'on soit bien en serveur
    return;
    this.attackTime = 20;
    EntitySortilege sortilege = new EntitySortilege(this.worldObj, this);
    this.worldObj.spawnEntityInWorld(sortilege);
    }
    }
    


  • Je viens de tester… Et non, ça ne fonctionne pas 😕
    Il n'attaque pas de loin comme il devrait le faire et me fonce dessus pour venir se coller à moi... sans pour autant m'attaquer ! (bon ça fait de la compagnie un peu collante, c'est sympa).

    Une question au passage, à quoi sert ceci :

    if(worldObj.isRemote) // On vérifie que l'on soit bien en serveur
    return;
    

    lorsqu'il est placé à cet endroit ?



  • Je me permet un petit up, je suis toujours bloqué sur le problème, impossible de lui faire envoyer l'item de loin plutôt qu'il ne vienne au corps à corps…