1.8 Effet d'une EntityTrowable



  • Bonjour a tûs.
    Donc, il y a quelques temps, j'ai fait une bouteille de lava jettable.
    Et je n'ai pas encore fait ses effet
    J'ai tester quelques trucs, mais bon…
    Donc j'aimerai que ma bouteille ait plusieurs effet a son impact

    Si possible dans Algorithme, car je ne sais pas les utiliser ^^'
    Ce n'est pas très important si je ne met pas le feu dans un rayon, au minimum, sur le block de l'impact

    Et j'ai un petit problème…
    La méthode onImpact ne possède pas comme paramètres BlockPos, Entity, etc...

    La méthode onImpact actuelle

    protected void onImpact(MovingObjectPosition p_70184_1_)
    {
    if (!this.worldObj.isRemote)
    {
    this.worldObj.playAuxSFX(2002, new BlockPos(this), 0);
    int i = 3 + this.worldObj.rand.nextInt(5) + this.worldObj.rand.nextInt(5);
    
    this.setDead();
    }
    }
    

    Pour l'instant, a l'impact, sa fait juste disparaitre l'item ( Ce qui est voulu hein ) et fait paraitre des particules semblables a ceux de la Bottle O'Enchantement
    (Normal, mon entity est un copié collé de cet entity)



  • As-tu regardé ce qu'était la classe MovingObjectPosition ? Cette classe est utilisée pour contenir soit un block si ton entité a touché un block, sinon si ton entité a touché une autre entité le paramètre contiendra l'entité touchée.



  • Euh ouais, mais comment je fais poure faire ce que je veut faire ?
    Car p_70184_1_.setFire(10.0F) ne fonctione pas
    Idem pour p_70184_1_.setBlockState(ETC)


  • Moddeurs confirmés Rédacteurs Administrateurs

    Déjà remplaces
    protected void onImpact(MovingObjectPosition p_70184_1_)
    par
    protected void onImpact(MovingObjectPosition mop)
    Car bon, p_70184_1_ c'est pas très implicite.
    Ensuite tu as mop.typeOfHit il vaut MovingObjectPosition.MovingObjectType.BLOCK si ça a touché à un bloc, MovingObjectPosition.MovingObjectType.ENTITY pour une entité et MovingObjectPosition.MovingObjectType.MISS pour rien.
    Donc à toi de faire des conditions pour les deux premiers cas.
    Pour le premier cas tu as mop.getBlockPos() pour avoir les coordonnées du bloc touché et dans le second cas tu as mop.entityHit pour avoir l'instance de l'entité touché.
    Donc tu peux faire mop.entityHit.setFire(10.0F); mop.entityHit.attackEntityFrom(DamageSource.lava, valeur des dégâts); etc …



  • Bon voila, après pluseiurs crash, plusieurs test, j'ai enfin 'réussi'
    'Reussi' car seule l'effet sur les entity est fait.
    Pour les blocs je cale…

    La fonctione onImpact actuelle

    protected void onImpact(MovingObjectPosition mop)
    {
    if (!this.worldObj.isRemote)
    {
    this.worldObj.playAuxSFX(2002, new BlockPos(this), 0);
    int i = 3 + this.worldObj.rand.nextInt(5) + this.worldObj.rand.nextInt(5);
    
    this.setDead();
    if(mop.typeOfHit.ENTITY != null) {
    mop.entityHit.setFire(20);
    mop.entityHit.attackEntityFrom(DamageSource.lava, 5);
    }
    
    if(mop.typeOfHit.BLOCK != null) {
    mop.getBlockPos();
    }
    
    }
    }
    

  • Administrateurs

    Pour les blocks, c'est normal. Tu get juste le BlockPos là… Et dans le vide en plus.



  • Comment faire pour pouvoir poser un bloc de feu au bloc de l'impact ?
    J'ia déjà essayer quelques trucs, mais sans succès


  • Administrateurs

    worldObj.setBlockState(mop.getBlockPos(), Blocks.fire.getDefaultState());

    (Par exemple)


  • Moddeurs confirmés Rédacteurs Administrateurs

    if(mop.typeOfHit.ENTITY != null) {
    Drôle de façon de faire. J'aurai plutôt utilisé if(mop.typeOfHit == MovingObjectPosition.MovingObjectType.ENTITY)

    Pour le set de bloc faut passer par une boucle for.



  • Excusez moi cette répoonse très tardive, mais mon ordi commence a perdre des points de vies a vitesse grand V.
    J'ai du lancer 3-4 CCleaner d'une dizaine de minutes chacun, avant d'attendre 20 min que mon client se lance…
    Déja que mon ordi est tout pourri ( Un bon AMD E-1 TMTC ), là, il pu la bouzin de chevreuil couplé avec du fumier qui a pouri 4ans au soleil

    Pour que vous vous rendez compte

    Donc efectivement, sa fonctionne mieux avec ta condition robin ^^'
    Et sinon, c'est bon le bloc ets placé. Mais problème... La bouteille fait preuve d'une énorme violance et puissance, car la flamme REMPLACE le bloc. Tu lance une bouteille sur la bedrock, a pu bedrock
    Comment faire pour que la flamme soit généré 1 bloc plus haut ?


  • Moddeurs confirmés Rédacteurs Administrateurs

    Tu check si c'est de l'air. Si non tu check si le bloc au dessus est de l'air. Si oui tu pose, sinon tu pose pas.

    Quelle idée d'acheter un pc avec un E1 aussi … Faut prendre un A8 minimum pour Minecraft.



  • Perso, je déteste AMD. Je préfère LARGEMENT Nvidia
    Et je n'ai pas choisis mon PC.
    Et de toute façon, je n'ai pas l'argent. J'ai même pas 10$…
    C'est l'ancien PC de ma mère. Elle me l'a donné quand elle en a changé
    (Intel I7 - Nvidia 780m bave )

    Bref, on est pas la pour parler PC

    Donc, j'ia plusieurs problemes, comment mettre la variable block ?
    j'ai repris le code de ma bouteille et je trouve sa
    Block block = worldIn.getBlockState(movingobjectposition.getBlockPos()).getBlock();
    mais je n'ai pas le paramètre World
    Ensuite, comment faire pour poser sur l'air ?



  • L'air est un bloc comme un autre, pas besoin de savoir comment fonctionne le schmiblik.
    Pour le world, tu es dans une classe Entity donc tu peux faire this.worldObj.


  • Moddeurs confirmés Rédacteurs Administrateurs

    this.worldObj pour le monde.
    Pour poser sur de l'air c'est pas compliqué c'est comme pour poser n'importe où. Si ta question était comment savoir si un bloc est de l'air c'est this.worldObj.isAirBlock(pos)

    Pas étonnant que tu détester AMD si le échantillon que tu as c'est du ultra bas de gamme. Perso je préfère largement AMD, Nvidia a une politique de merde.



  • Donc, enfaite, je coprends pas trop votre logqieu.
    Vous regardez si le bloc sur lequel la potion à éclaté…
    Or, l'air n'a pas de 'matière', de 'hitbox', donc je vois pas comment une potion peut exploser sur de l'air...
    Sinon je comprend vraiment rien.

    Je pensais plus a un truc simple qui génère le bloc, juste 1 bloc plus haut quoi..

    Bon, je vais me coucher, je part bientôt en vacances ( Et quand je reviendrais, j'aurais ENFIN fais les tutos Openclassroom !! ), donc faut que j'aide pour le préparatifs, je peut pas me permettre de me coucher a 4h ( Endormisement ~6h )
    Vu que je m'endort très tard ( Je regarde des vidéos pour m'endormir, pas d'autres moyens pour moi que de dormir devant mon téléphone ), je serais toujours présent sur le forum via Tapatalk, mais je pourrais donc biensur, pas pouvoir faire du code


Log in to reply