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.
    • 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