MFF

    Minecraft Forge France
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes
    • Forge Events
      • Automatique
      • Foncé
      • Clair
    • S'inscrire
    • Se connecter

    Source des dégâts/EntityThrowable

    Planifier Épinglé Verrouillé Déplacé Résolu 1.7.x
    1.7.10
    13 Messages 3 Publieurs 1.6k Vues 1 Watching
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • robin4002R Hors-ligne
      robin4002 Moddeurs confirmés Rédacteurs Administrateurs
      dernière édition par

      DamageSource damage = new EntityDamageSourceIndirect(“nom”, this, entityQuiATiré)).setProjectile();

      Pour faire passer le joueur dans la classe de ton entity fait la mettre dans le constructeur.

      1 réponse Dernière réponse Répondre Citer 0
      • FolganskyF Hors-ligne
        Folgansky Correcteurs
        dernière édition par

        J’ai remplacé la source des dégâts. Apparemment c’est comme pour les flèches ce bout de code

        Voici mes constructeurs (sans y avoir retouché), normalement c’est le paramètre EntityLivingBase throwerIn qui définit qui a lancé mais je ne sais pas la mettre en paramètre pour mon DamageSource.
        Jj’ai plutôt mis Minecraft.getMinecraft().thePlayer., qui fonctionne tout aussi bien je crois. (en tout cas dans les logs c’est le joueur qui est appelé)

        package fr.powergame.modpg2.common;
        
        import net.minecraft.client.Minecraft;
        import net.minecraft.entity.EntityLivingBase;
        import net.minecraft.entity.projectile.EntityThrowable;
        import net.minecraft.util.DamageSource;
        import net.minecraft.util.EntityDamageSourceIndirect;
        import net.minecraft.util.MathHelper;
        import net.minecraft.util.MovingObjectPosition;
        import net.minecraft.world.World;
        
        public class EntityBullet extends EntityThrowable
        {
            public float strength;
            public int ticksAlive;
        
            public EntityBullet(World worldIn)
            {
                super(worldIn);
                strength = 7.5F;
                this.setSize(0.3F, 0.3F);
                this.setThrowableHeading(this.motionX, this.motionY, this.motionZ, this.func_70182_d(), 1.0F);
            }
        
            public EntityBullet(World worldIn, EntityLivingBase throwerIn)
            {
                super(worldIn, throwerIn);
                strength = 7.5F;
                this.setSize(1.0F, 1.0F);
                this.setThrowableHeading(this.motionX, this.motionY, this.motionZ, this.func_70182_d(), 1.0F);
            }
        
            public EntityBullet(World worldIn, double x, double y, double p_i1778_6_)
            {
                super(worldIn, x, y, p_i1778_6_);
                strength = 7.5F;
                this.setSize(1.0F, 1.0F);
                this.setThrowableHeading(this.motionX, this.motionY, this.motionZ, this.func_70182_d(), 1.0F /*Précision du tir!*/);
            }
        
            public void setArrowHeading(double d, double d1, double d2, float spread, float speed)
            {
               […] // Le calcul
        
            }
        
            @Override
            protected void onImpact(MovingObjectPosition mop)
            {
                DamageSource damage = new EntityDamageSourceIndirect("Plasma", this, Minecraft.getMinecraft().thePlayer).setProjectile();
                if(mop.entityHit != null)
                {
                    float l = strength;
                    if (mop.entityHit instanceof EntityLivingBase)
                    {
                        mop.entityHit.attackEntityFrom(damage, l);
                    }
                    else
                    {
                        mop.entityHit.attackEntityFrom(damage, l);
                    }
                    setDead();
                }
                else
                {
                    setDead();
                }
            }
        
            public void onUpdate()
            {
              […] // Des choses
            }
        
            protected float getGravityVelocity()
            {
                return 0.0F;
            }
        }
        
        1 réponse Dernière réponse Répondre Citer 0
        • DylemD Hors-ligne
          Dylem
          dernière édition par

          Sinon tu fais un getter pour récupérer le joueur

          public EntityLivingBase getThrower() {
          return this.throwerIn;
          }
          

          Si je t'ai aidé, n'hésite pas à cliquer sur le nombre vert en dessous de mon image de profil, pour me le faire savoir. Ca me motive pour continuer …

          1 réponse Dernière réponse Répondre Citer 0
          • FolganskyF Hors-ligne
            Folgansky Correcteurs
            dernière édition par

            ça me demande de créer soit un field soit une constante à propos du throwerIn
            Je pensais que le fait d’être dans le constructeur suffirait.

            1 réponse Dernière réponse Répondre Citer 0
            • robin4002R Hors-ligne
              robin4002 Moddeurs confirmés Rédacteurs Administrateurs
              dernière édition par

              En haut de la classe :
              private EntityLivingBase thrower;

              Et dans le deuxième constructeur :
              this.thrower = throwerIn;

              Et ensuite tu aura juste à utiliser this.thrower.

              Si tu utilises Minecraft.getMinecraft().thePlayer tu vas te manger un NoClassDefFoundException avec un serveur.

              1 réponse Dernière réponse Répondre Citer 0
              • FolganskyF Hors-ligne
                Folgansky Correcteurs
                dernière édition par

                Ouki ça marche, ça m’en apprend un peu plus sur le fonctionnement des constructeurs, merci les gars.

                1 réponse Dernière réponse Répondre Citer 0
                • DylemD Hors-ligne
                  Dylem
                  dernière édition par

                  Je vais regarder plus en détail quand j’aurai le temps, sinon ça sert à quoi ce bout de ton code ? :

                  
                  1.  **if** (mop.entityHit **instanceof** EntityLivingBase)
                  2.              {
                  3.                  mop.entityHit.attackEntityFrom(damage, l);
                  4.              }
                  5.              **else**
                  6.              {
                  7.                  mop.entityHit.attackEntityFrom(damage, l);
                  8.              }
                  
                  

                  Si c’est une entité vivante, tu l’attaque, et si c’est pas une entité vivante, tu l’attaques quand meme ?

                  Si je t'ai aidé, n'hésite pas à cliquer sur le nombre vert en dessous de mon image de profil, pour me le faire savoir. Ca me motive pour continuer …

                  1 réponse Dernière réponse Répondre Citer 0
                  • FolganskyF Hors-ligne
                    Folgansky Correcteurs
                    dernière édition par

                    Non mais c’est que je détecte par la suite différentes entités touchées pour appliquer des dégâts différents. J’ai juste pas tout enlevé pour présenter la classe sur le forum ^^

                    1 réponse Dernière réponse Répondre Citer 0
                    • DylemD Hors-ligne
                      Dylem
                      dernière édition par

                      juste enlève le else,

                      
                      **if** (mop.entityHit **instanceof** EntityLivingBase)
                                mop.entityHit.attackEntityFrom(damage, l);
                      
                      

                      Si je t'ai aidé, n'hésite pas à cliquer sur le nombre vert en dessous de mon image de profil, pour me le faire savoir. Ca me motive pour continuer …

                      1 réponse Dernière réponse Répondre Citer 0
                      • FolganskyF Hors-ligne
                        Folgansky Correcteurs
                        dernière édition par

                        En gros ça donne ça

                        if(mop.entityHit != null)
                                {
                                    float l = strength;
                                    if (mop.entityHit instanceof MonMob || mop.entityHit instanceof MonMob2)
                                    {
                                        mop.entityHit.attackEntityFrom(plasma, l + 5);
                                    }
                                    else
                                    {
                                        mop.entityHit.attackEntityFrom(plasma, l);
                                    }
                                    setDead();
                                }
                                else
                                {
                                    setDead();
                                }
                        

                        Mob différent, dégâts différents.

                        1 réponse Dernière réponse Répondre Citer 0
                        • DylemD Hors-ligne
                          Dylem
                          dernière édition par

                          En fait c’est comme si t’écrivais ça 🙂

                          %(#000000)[[size=small]mop]%(#666600)[[size=small].]%(#000000)[[size=small]entityHit]%(#666600)[[size=small].]%(#000000)[[size=small]attackEntityFrom]%(#666600)[[size=small](]%(#000000)[[size=small]plasma]%(#666600)[[size=small],] %(#000000)[[size=small]mop]%(#666600)[[size=small].]%(#000000)[[size=small]entityHit ]%(#7f0055)[[size=small]**instanceof**] %(#000000)[[size=small]MonMob] %(#666600)[[size=small]||]%(#000000)[[size=small] mop]%(#666600)[[size=small].]%(#000000)[[size=small]entityHit ]%(#7f0055)[[size=small]**instanceof**] %(#000000)[[size=small]MonMob2 ? l + 5 : l]%(#666600)[[size=small]);]
                          

                          Si je t'ai aidé, n'hésite pas à cliquer sur le nombre vert en dessous de mon image de profil, pour me le faire savoir. Ca me motive pour continuer …

                          1 réponse Dernière réponse Répondre Citer 0
                          • FolganskyF Hors-ligne
                            Folgansky Correcteurs
                            dernière édition par

                            Je note.

                            Même si je ne cherche pas à poster dans la section “Vos meilleurs optimisations”, ça reste agréable.

                            1 réponse Dernière réponse Répondre Citer 0
                            • 1 / 1
                            • Premier message
                              Dernier message
                            Design by Woryk
                            ContactMentions Légales

                            MINECRAFT FORGE FRANCE © 2024

                            Powered by NodeBB