MFF

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

    Faire un objet pour faire spawn un mob

    Planifier Épinglé Verrouillé Déplacé Résolu Anciennes versions
    1.6.4
    19 Messages 3 Publieurs 5.0k 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.
    • bin4r1sB Hors-ligne
      bin4r1s
      dernière édition par

      J’ai essayé ça :

      
      public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ)
      {
      EntityFireDragon fireDragon = new EntityFireDragon(world);
      this.worldObj.spawnEntityInWorld(fireDragon);
      return false;
      }
      
      

      Mais quand j’utilise l’item, Minecraft crash et me dit qu’il y a une erreur à ça :

      Dans ontItemUse :

      
      this.worldObj.spawnEntityInWorld(fireDragon);
      
      

      Mes mods:

      • New Ores
      • More Dragons
      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

        What ?
        Il n’y a pas de variable worldObj dans Item.java, je sais pas ce que tu fais, le monde est null c’est pour ça que ça crash.
        Utilise ça :

        public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ)
        {
        EntityFireDragon fireDragon = new EntityFireDragon(world, x, y, z);
        world.spawnEntityInWorld(fireDragon);
        return false;
        }
        
        1 réponse Dernière réponse Répondre Citer 0
        • bin4r1sB Hors-ligne
          bin4r1s
          dernière édition par

          D’accord merci 🙂 (et pour le worldObj, je l’avais déclaré dans ma classe)

          EDIT : ça marche ! merci 🙂

          DOUBLE EDIT : Ah non en fait… Le dragon spawn mais est invisible 😞 et ne fait rien :(:(

          TRIPLE EDIT : Ah si, mais il spawn à 0, 0, 0 et ne bouge pas

          Mes mods:

          • New Ores
          • More Dragons
          1 réponse Dernière réponse Répondre Citer 0
          • bin4r1sB Hors-ligne
            bin4r1s
            dernière édition par

            Un peu d’aide s’il vous plaît 😞

            Mes mods:

            • New Ores
            • More Dragons
            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

              public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ)
              {
              if(!world.isRemote)
              {
              EntityFireDragon fireDragon = new EntityFireDragon(world, x, y, z);
              world.spawnEntityInWorld(fireDragon);
              return false;
              }
              }
              

              Comme ça ça devrait fonctionner. J’avais pas vu tes edit.

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

                Ah d’accord 🙂 Merci !___
                EDIT : Eclipse me met une erreur à la fonction pour me dire qu’il faut ajouter une valeur de retour (return).
                Est-ce que si je met return true à la fin de la fonction ça marchera correctement ?

                Mes mods:

                • New Ores
                • More Dragons
                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

                  Oups, mets comme ça :

                  public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ)
                  {
                  if(!world.isRemote)
                  {
                  EntityFireDragon fireDragon = new EntityFireDragon(world, x, y, z);
                  world.spawnEntityInWorld(fireDragon);
                  return true;
                  }
                  return false;
                  }
                  
                  1 réponse Dernière réponse Répondre Citer 0
                  • bin4r1sB Hors-ligne
                    bin4r1s
                    dernière édition par

                    Ah d’accord merci :)___
                    EDIT : Petit problème : j’avais changé le constructeur de mon dragon pour que new EntityFireDragon(world, x, y ,z) ne me fasse pas d’erreur, mais l’entité ne fonctionne pas si le constructeur ne contient pas que ‘World world’.
                    Un peu d’aide ?

                    Mes mods:

                    • New Ores
                    • More Dragons
                    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

                      Envoie la classe de ton dragon.

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

                        Ok, mais attention c’est un peu le bazar :

                        
                        package fr.MrBlockTNT.Dragons.entity.firedragon;
                        
                        import java.awt.event.ActionEvent;
                        import java.awt.event.ActionListener;
                        import java.util.Iterator;
                        import java.util.List;
                        import java.util.Random;
                        
                        import javax.swing.Timer;
                        
                        import net.minecraft.block.Block;
                        import net.minecraft.block.BlockEndPortal;
                        import net.minecraft.client.Minecraft;
                        import net.minecraft.client.renderer.entity.RenderDragon;
                        import net.minecraft.entity.Entity;
                        import net.minecraft.entity.EntityCreature;
                        import net.minecraft.entity.EntityLiving;
                        import net.minecraft.entity.EntityLivingBase;
                        import net.minecraft.entity.SharedMonsterAttributes;
                        import net.minecraft.entity.boss.EntityDragon;
                        import net.minecraft.entity.boss.EntityDragonPart;
                        import net.minecraft.entity.boss.IBossDisplayData;
                        import net.minecraft.entity.item.EntityEnderCrystal;
                        import net.minecraft.entity.item.EntityXPOrb;
                        import net.minecraft.entity.monster.EntityZombie;
                        import net.minecraft.entity.player.EntityPlayer;
                        import net.minecraft.entity.projectile.EntityLargeFireball;
                        import net.minecraft.entity.projectile.EntitySmallFireball;
                        import net.minecraft.pathfinding.PathEntity;
                        import net.minecraft.util.AxisAlignedBB;
                        import net.minecraft.util.DamageSource;
                        import net.minecraft.util.MathHelper;
                        import net.minecraft.util.Vec3;
                        import net.minecraft.world.Explosion;
                        import net.minecraft.world.World;
                        
                        public class EntityFireDragon extends EntityLiving implements IBossDisplayData
                        {
                        public String mobName;
                        
                        public double targetX;
                        public double targetY;
                        public double targetZ;
                        
                        /**
                        * Ring buffer array for the last 64 Y-positions and yaw rotations. Used to calculate offsets for the animations.
                        */
                        public double[][] ringBuffer = new double[64][3];
                        
                        /**
                        * Index into the ring buffer. Incremented once per tick and restarts at 0 once it reaches the end of the buffer.
                        */
                        public int ringBufferIndex = -1;
                        
                        /** An array containing all body parts of this dragon */
                        public EntityFireDragonPart[] dragonPartArray;
                        
                        /** The head bounding box of a dragon */
                        public EntityFireDragonPart dragonPartHead;
                        
                        /** The body bounding box of a dragon */
                        public EntityFireDragonPart dragonPartBody;
                        public EntityFireDragonPart dragonPartTail1;
                        public EntityFireDragonPart dragonPartTail2;
                        public EntityFireDragonPart dragonPartTail3;
                        public EntityFireDragonPart dragonPartWing1;
                        public EntityFireDragonPart dragonPartWing2;
                        
                        /** Animation time at previous tick. */
                        public float prevAnimTime;
                        
                        /**
                        * Animation time, used to control the speed of the animation cycles (wings flapping, jaw opening, etc.)
                        */
                        public float animTime;
                        
                        /** Force selecting a new flight target at next tick if set to true. */
                        public boolean forceNewTarget;
                        
                        /**
                        * Activated if the dragon is flying though obsidian, white stone or bedrock. Slows movement and animation speed.
                        */
                        public boolean slowed;
                        private Entity target;
                        public int deathTicks;
                        
                        /** The current endercrystal that is healing this dragon */
                        public EntityFireCrystal healingEnderCrystal;
                        
                        public EntityFireDragon(World world)
                        {
                        super(world);
                        mobName = "Fire Dragon";
                        this.dragonPartArray = new EntityFireDragonPart[] {this.dragonPartHead = new EntityFireDragonPart(this, "head", 6.0F, 6.0F), this.dragonPartBody = new EntityFireDragonPart(this, "body", 8.0F, 8.0F), this.dragonPartTail1 = new EntityFireDragonPart(this, "tail", 4.0F, 4.0F), this.dragonPartTail2 = new EntityFireDragonPart(this, "tail", 4.0F, 4.0F), this.dragonPartTail3 = new EntityFireDragonPart(this, "tail", 4.0F, 4.0F), this.dragonPartWing1 = new EntityFireDragonPart(this, "wing", 4.0F, 4.0F), this.dragonPartWing2 = new EntityFireDragonPart(this, "wing", 4.0F, 4.0F)};
                        this.setHealth(this.getMaxHealth());
                        this.setSize(16.0F, 8.0F);
                        this.noClip = true;
                        this.isImmuneToFire = true;
                        this.targetY = 100.0D;
                        this.ignoreFrustumCheck = true;
                        }
                        
                        protected void applyEntityAttributes()
                        {
                        super.applyEntityAttributes();
                        this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setAttribute(1.0D);
                        }
                        
                        protected void entityInit()
                        {
                        super.entityInit();
                        }
                        
                        /**
                        * Returns a double[3] array with movement offsets, used to calculate trailing tail/neck positions. [0] = yaw
                        * offset, [1] = y offset, [2] = unused, always 0\. Parameters: buffer index offset, partial ticks.
                        */
                        public double[] getMovementOffsets(int par1, float par2)
                        {
                        if (this.getHealth() <= 0.0F)
                        {
                        par2 = 0.0F;
                        }
                        
                        par2 = 1.0F - par2;
                        int j = this.ringBufferIndex - par1 * 1 & 63;
                        int k = this.ringBufferIndex - par1 * 1 - 1 & 63;
                        double[] adouble = new double[3];
                        double d0 = this.ringBuffer[j][0];
                        double d1 = MathHelper.wrapAngleTo180_double(this.ringBuffer[k][0] - d0);
                        adouble[0] = d0 + d1 * (double)par2;
                        d0 = this.ringBuffer[j][1];
                        d1 = this.ringBuffer[k][1] - d0;
                        adouble[1] = d0 + d1 * (double)par2;
                        adouble[2] = this.ringBuffer[j][2] + (this.ringBuffer[k][2] - this.ringBuffer[j][2]) * (double)par2;
                        return adouble;
                        }
                        
                        boolean isDead = false;
                        
                        protected void attackEntitySimpleFireball(Entity par1Entity, float par2, int par3)
                        {
                        if(isDead == false)
                        {
                        if (this.attackTime <= 0 && par2 < 2.0F && par1Entity.boundingBox.maxY > this.boundingBox.minY && par1Entity.boundingBox.minY < this.boundingBox.maxY)
                        {
                        this.attackTime = 20;
                        this.attackEntityAsMob(par1Entity);
                        }
                        else if (par2 < 30.0F)
                        {
                        double d0 = par1Entity.posX - this.posX;
                        double d1 = par1Entity.boundingBox.minY + (double)(par1Entity.height / 2.0F) - (this.posY + (double)(this.height / 2.0F));
                        double d2 = par1Entity.posZ - this.posZ;
                        
                        float f1 = MathHelper.sqrt_float(par2) * 0.5F;
                        if(rand.nextInt(50) == 1)
                        {
                        for (int i = 0; i < rand.nextInt(par3); i++)
                        {
                        this.worldObj.playAuxSFXAtEntity((EntityPlayer)null, 1009, (int)this.posX, (int)this.posY, (int)this.posZ, 0);
                        EntitySmallFireball entitysmallfireball = new EntitySmallFireball(this.worldObj, this, d0 + this.rand.nextGaussian() * (double)f1, d1, d2 + this.rand.nextGaussian() * (double)f1);
                        entitysmallfireball.posY = this.posY + (double)(this.height / 2.0F) + 0.5D;
                        this.worldObj.spawnEntityInWorld(entitysmallfireball);
                        }
                        }
                        }
                        }
                        }
                        
                        protected void attackEntityLargeFireball(Entity par1Entity, float par2, int par3)
                        {
                        if(isDead == false)
                        {
                        if (this.attackTime <= 0 && par2 < 2.0F && par1Entity.boundingBox.maxY > this.boundingBox.minY && par1Entity.boundingBox.minY < this.boundingBox.maxY)
                        {
                        this.attackTime = 20;
                        this.attackEntityAsMob(par1Entity);
                        }
                        else if (par2 < 30.0F)
                        {
                        double d0 = par1Entity.posX - this.posX;
                        double d1 = par1Entity.boundingBox.minY + (double)(par1Entity.height / 2.0F) - (this.posY + (double)(this.height / 2.0F));
                        double d2 = par1Entity.posZ - this.posZ;
                        
                        float f1 = MathHelper.sqrt_float(par2) * 0.5F;
                        if(rand.nextInt(50) == 1)
                        {
                        for (int i = 0; i < rand.nextInt(par3); i++)
                        {
                        this.worldObj.playAuxSFXAtEntity((EntityPlayer)null, 1009, (int)this.posX, (int)this.posY, (int)this.posZ, 0);
                        EntityLargeFireball entitysmallfireball = new EntityLargeFireball(this.worldObj, this, d0 + this.rand.nextGaussian() * (double)f1, d1, d2 + this.rand.nextGaussian() * (double)f1);
                        entitysmallfireball.posY = this.posY + (double)(this.height / 2.0F) + 0.5D;
                        this.worldObj.spawnEntityInWorld(entitysmallfireball);
                        }
                        }
                        }
                        }
                        }
                        
                        public void playEndSound(EntityPlayer player, World world)
                        {
                        world.playRecord("dragons:boss/boss_end", player.serverPosX, player.serverPosY, player.serverPosZ);
                        }
                        
                        public void playFightSound1(EntityPlayer player, World world)
                        {
                        world.playRecord("dragons:boss/fire_dragon", player.serverPosX, player.serverPosY, player.serverPosZ);
                        }
                        
                        public void playFightSound2(EntityPlayer player, World world)
                        {
                        world.playRecord("dragons:boss/fire_dragon_second_half", player.serverPosX, player.serverPosY, player.serverPosZ);
                        }
                        
                        /**
                        * Called frequently so the entity can update its state every tick as required. For example, zombies and skeletons
                        * use this to react to sunlight and start to burn.
                        */
                        
                        boolean startFight = false;
                        boolean isAngry = false;
                        boolean isVeryAngry = false;
                        boolean angryIA = false;
                        boolean wantToKillYou = false;
                        int angryScream = 0;
                        
                        public void onLivingUpdate()
                        {
                        float f;
                        float f1;
                        
                        float f20 = (this.rand.nextFloat() - 0.5F) * 8.0F;
                        float f21 = (this.rand.nextFloat() - 0.5F) * 4.0F;
                        float f22 = (this.rand.nextFloat() - 0.5F) * 8.0F;
                        
                        Minecraft mc = Minecraft.getMinecraft();
                        EntityPlayer player = mc.thePlayer;
                        if(player != null)
                        {
                        if(angryIA = true && isVeryAngry == false && wantToKillYou == false)
                        {
                        attackEntitySimpleFireball(player, 1.0F, 15);
                        }
                        else if (angryIA == false && isVeryAngry == false && wantToKillYou == false && startFight == true)
                        {
                        attackEntitySimpleFireball(player, 1.0F, 5);
                        }
                        else if(isVeryAngry == true && angryIA == false && wantToKillYou == false)
                        {
                        attackEntityLargeFireball(player, 1.0F, 5);
                        }
                        else if (wantToKillYou == true && angryIA == false && isVeryAngry == false)
                        {
                        attackEntityLargeFireball(player, 1.0F, 12);
                        }
                        }
                        /**
                        if(this.getHealth() <= 1000.0F && this.getHealth() >= 500.0F)
                        {
                        playFightSound1(player, worldObj);
                        }
                        else if(this.getHealth() <= 499.0F && this.getHealth() >= 0.0F)
                        {
                        playFightSound2(player, worldObj);
                        }
                        */
                        if(this.getHealth() <= 999.0F)
                        {
                        startFight = true;
                        }
                        
                        if (this.getHealth() <= 700.0F)
                        {
                        isAngry = true;
                        startFight = false;
                        }
                        
                        if (this.getHealth() <= 375.0F)
                        {
                        isVeryAngry = true;
                        isAngry = false;
                        }
                        
                        if(this.getHealth() <= 200.0F)
                        {
                        wantToKillYou = true;
                        isVeryAngry = false;
                        }
                        
                        if(isAngry == false && isVeryAngry == false && wantToKillYou == false)
                        {
                        for (int i = 0; i < 6; ++i)
                        {
                        this.worldObj.spawnParticle("flame", this.posX + (this.rand.nextDouble() - 0.5D) * (double)this.width, this.posY + this.rand.nextDouble() * (double)this.height, this.posZ + (this.rand.nextDouble() - 0.5D) * (double)this.width, 0.0D, 0.0D, 0.0D);
                        }
                        }
                        else if(isAngry == true || isVeryAngry == true || wantToKillYou == true)
                        {
                        for (int i = 0; i < 15; ++i)
                        {
                        this.worldObj.spawnParticle("flame", this.posX + (this.rand.nextDouble() - 0.5D) * (double)this.width, this.posY + this.rand.nextDouble() * (double)this.height, this.posZ + (this.rand.nextDouble() - 0.5D) * (double)this.width, 0.0D, 0.0D, 0.0D);
                        }
                        
                        if(angryScream == 0)
                        {
                        angryScream = 1;
                        this.worldObj.playSound(this.posX, this.posY, this.posZ, "random.explode1", 5.0F, 0.8F + this.rand.nextFloat() * 0.3F, false);
                        this.worldObj.playSound(this.posX, this.posY, this.posZ, "random.explode2", 5.0F, 0.8F + this.rand.nextFloat() * 0.3F, false);
                        this.worldObj.playSound(this.posX, this.posY, this.posZ, "random.explode3", 5.0F, 0.8F + this.rand.nextFloat() * 0.3F, false);
                        this.worldObj.playSound(this.posX, this.posY, this.posZ, "random.explode4", 5.0F, 0.8F + this.rand.nextFloat() * 0.3F, false);
                        }
                        }
                        
                        if (this.worldObj.isRemote)
                        {
                        f = MathHelper.cos(this.animTime * (float)Math.PI * 2.0F);
                        f1 = MathHelper.cos(this.prevAnimTime * (float)Math.PI * 2.0F);
                        
                        if (f1 <= -0.3F && f >= -0.3F)
                        {
                        this.worldObj.playSound(this.posX, this.posY, this.posZ, "mob.enderdragon.wings", 5.0F, 0.8F + this.rand.nextFloat() * 0.3F, false);
                        }
                        }
                        
                        this.prevAnimTime = this.animTime;
                        float f2;
                        
                        if (this.getHealth() <= 0.0F)
                        {
                        f = (this.rand.nextFloat() - 0.5F) * 8.0F;
                        f1 = (this.rand.nextFloat() - 0.5F) * 4.0F;
                        f2 = (this.rand.nextFloat() - 0.5F) * 8.0F;
                        this.worldObj.spawnParticle("largeexplode", this.posX + (double)f, this.posY + 2.0D + (double)f1, this.posZ + (double)f2, 0.0D, 0.0D, 0.0D);
                        }
                        else
                        {
                        this.updateDragonEnderCrystal();
                        f = 0.2F / (MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ) * 10.0F + 1.0F);
                        f *= (float)Math.pow(2.0D, this.motionY);
                        
                        if (this.slowed)
                        {
                        this.animTime += f * 0.5F;
                        }
                        else
                        {
                        this.animTime += f;
                        }
                        
                        this.rotationYaw = MathHelper.wrapAngleTo180_float(this.rotationYaw);
                        
                        if (this.ringBufferIndex < 0)
                        {
                        for (int i = 0; i < this.ringBuffer.length; ++i)
                        {
                        this.ringBuffer*[0] = (double)this.rotationYaw;
                        this.ringBuffer*[1] = this.posY;
                        }
                        }
                        
                        if (++this.ringBufferIndex == this.ringBuffer.length)
                        {
                        this.ringBufferIndex = 0;
                        }
                        
                        this.ringBuffer[this.ringBufferIndex][0] = (double)this.rotationYaw;
                        this.ringBuffer[this.ringBufferIndex][1] = this.posY;
                        double d0;
                        double d1;
                        double d2;
                        double d3;
                        float f3;
                        
                        if (this.worldObj.isRemote)
                        {
                        if (this.newPosRotationIncrements > 0)
                        {
                        d3 = this.posX + (this.newPosX - this.posX) / (double)this.newPosRotationIncrements;
                        d0 = this.posY + (this.newPosY - this.posY) / (double)this.newPosRotationIncrements;
                        d1 = this.posZ + (this.newPosZ - this.posZ) / (double)this.newPosRotationIncrements;
                        d2 = MathHelper.wrapAngleTo180_double(this.newRotationYaw - (double)this.rotationYaw);
                        this.rotationYaw = (float)((double)this.rotationYaw + d2 / (double)this.newPosRotationIncrements);
                        this.rotationPitch = (float)((double)this.rotationPitch + (this.newRotationPitch - (double)this.rotationPitch) / (double)this.newPosRotationIncrements);
                        –this.newPosRotationIncrements;
                        this.setPosition(d3, d0, d1);
                        this.setRotation(this.rotationYaw, this.rotationPitch);
                        }
                        }
                        else
                        {
                        d3 = this.targetX - this.posX;
                        d0 = this.targetY - this.posY;
                        d1 = this.targetZ - this.posZ;
                        d2 = d3 * d3 + d0 * d0 + d1 * d1;
                        
                        if (this.target != null)
                        {
                        this.targetX = this.target.posX;
                        this.targetZ = this.target.posZ;
                        double d4 = this.targetX - this.posX;
                        double d5 = this.targetZ - this.posZ;
                        double d6 = Math.sqrt(d4 * d4 + d5 * d5);
                        double d7 = 0.4000000059604645D + d6 / 80.0D - 1.0D;
                        
                        if (d7 > 10.0D)
                        {
                        d7 = 10.0D;
                        }
                        
                        this.targetY = this.target.boundingBox.minY + d7;
                        }
                        else
                        {
                        this.targetX += this.rand.nextGaussian() * 2.0D;
                        this.targetZ += this.rand.nextGaussian() * 2.0D;
                        }
                        
                        if (this.forceNewTarget || d2 < 100.0D || d2 > 22500.0D || this.isCollidedHorizontally || this.isCollidedVertically)
                        {
                        this.setNewTarget();
                        }
                        
                        d0 /= (double)MathHelper.sqrt_double(d3 * d3 + d1 * d1);
                        f3 = 0.6F;
                        
                        if (d0 < (double)(-f3))
                        {
                        d0 = (double)(-f3);
                        }
                        
                        if (d0 > (double)f3)
                        {
                        d0 = (double)f3;
                        }
                        
                        this.motionY += d0 * 0.10000000149011612D;
                        this.rotationYaw = MathHelper.wrapAngleTo180_float(this.rotationYaw);
                        double d8 = 180.0D - Math.atan2(d3, d1) * 180.0D / Math.PI;
                        double d9 = MathHelper.wrapAngleTo180_double(d8 - (double)this.rotationYaw);
                        
                        if (d9 > 50.0D)
                        {
                        d9 = 50.0D;
                        }
                        
                        if (d9 < -50.0D)
                        {
                        d9 = -50.0D;
                        }
                        
                        Vec3 vec3 = this.worldObj.getWorldVec3Pool().getVecFromPool(this.targetX - this.posX, this.targetY - this.posY, this.targetZ - this.posZ).normalize();
                        Vec3 vec31 = this.worldObj.getWorldVec3Pool().getVecFromPool((double)MathHelper.sin(this.rotationYaw * (float)Math.PI / 180.0F), this.motionY, (double)(-MathHelper.cos(this.rotationYaw * (float)Math.PI / 180.0F))).normalize();
                        float f4 = (float)(vec31.dotProduct(vec3) + 0.5D) / 1.5F;
                        
                        if (f4 < 0.0F)
                        {
                        f4 = 0.0F;
                        }
                        
                        this.randomYawVelocity *= 0.8F;
                        float f5 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ) * 1.0F + 1.0F;
                        double d10 = Math.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ) * 1.0D + 1.0D;
                        
                        if (d10 > 40.0D)
                        {
                        d10 = 40.0D;
                        }
                        
                        this.randomYawVelocity = (float)((double)this.randomYawVelocity + d9 * (0.699999988079071D / d10 / (double)f5));
                        this.rotationYaw += this.randomYawVelocity * 0.1F;
                        float f6 = (float)(2.0D / (d10 + 1.0D));
                        float f7 = 0.06F;
                        this.moveFlying(0.0F, -1.0F, f7 * (f4 * f6 + (1.0F - f6)));
                        
                        if (this.slowed)
                        {
                        this.moveEntity(this.motionX * 0.800000011920929D, this.motionY * 0.800000011920929D, this.motionZ * 0.800000011920929D);
                        }
                        else
                        {
                        this.moveEntity(this.motionX, this.motionY, this.motionZ);
                        }
                        
                        Vec3 vec32 = this.worldObj.getWorldVec3Pool().getVecFromPool(this.motionX, this.motionY, this.motionZ).normalize();
                        float f8 = (float)(vec32.dotProduct(vec31) + 1.0D) / 2.0F;
                        f8 = 0.8F + 0.15F * f8;
                        this.motionX *= (double)f8;
                        this.motionZ *= (double)f8;
                        this.motionY *= 0.9100000262260437D;
                        }
                        
                        this.renderYawOffset = this.rotationYaw;
                        this.dragonPartHead.width = this.dragonPartHead.height = 3.0F;
                        this.dragonPartTail1.width = this.dragonPartTail1.height = 2.0F;
                        this.dragonPartTail2.width = this.dragonPartTail2.height = 2.0F;
                        this.dragonPartTail3.width = this.dragonPartTail3.height = 2.0F;
                        this.dragonPartBody.height = 3.0F;
                        this.dragonPartBody.width = 5.0F;
                        this.dragonPartWing1.height = 2.0F;
                        this.dragonPartWing1.width = 4.0F;
                        this.dragonPartWing2.height = 3.0F;
                        this.dragonPartWing2.width = 4.0F;
                        f1 = (float)(this.getMovementOffsets(5, 1.0F)[1] - this.getMovementOffsets(10, 1.0F)[1]) * 10.0F / 180.0F * (float)Math.PI;
                        f2 = MathHelper.cos(f1);
                        float f9 = -MathHelper.sin(f1);
                        float f10 = this.rotationYaw * (float)Math.PI / 180.0F;
                        float f11 = MathHelper.sin(f10);
                        float f12 = MathHelper.cos(f10);
                        this.dragonPartBody.onUpdate();
                        this.dragonPartBody.setLocationAndAngles(this.posX + (double)(f11 * 0.5F), this.posY, this.posZ - (double)(f12 * 0.5F), 0.0F, 0.0F);
                        this.dragonPartWing1.onUpdate();
                        this.dragonPartWing1.setLocationAndAngles(this.posX + (double)(f12 * 4.5F), this.posY + 2.0D, this.posZ + (double)(f11 * 4.5F), 0.0F, 0.0F);
                        this.dragonPartWing2.onUpdate();
                        this.dragonPartWing2.setLocationAndAngles(this.posX - (double)(f12 * 4.5F), this.posY + 2.0D, this.posZ - (double)(f11 * 4.5F), 0.0F, 0.0F);
                        
                        if (!this.worldObj.isRemote && this.hurtTime == 0)
                        {
                        this.collideWithEntities(this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.dragonPartWing1.boundingBox.expand(4.0D, 2.0D, 4.0D).offset(0.0D, -2.0D, 0.0D)));
                        this.collideWithEntities(this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.dragonPartWing2.boundingBox.expand(4.0D, 2.0D, 4.0D).offset(0.0D, -2.0D, 0.0D)));
                        this.attackEntitiesInList(this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.dragonPartHead.boundingBox.expand(1.0D, 1.0D, 1.0D)));
                        }
                        
                        double[] adouble = this.getMovementOffsets(5, 1.0F);
                        double[] adouble1 = this.getMovementOffsets(0, 1.0F);
                        f3 = MathHelper.sin(this.rotationYaw * (float)Math.PI / 180.0F - this.randomYawVelocity * 0.01F);
                        float f13 = MathHelper.cos(this.rotationYaw * (float)Math.PI / 180.0F - this.randomYawVelocity * 0.01F);
                        this.dragonPartHead.onUpdate();
                        this.dragonPartHead.setLocationAndAngles(this.posX + (double)(f3 * 5.5F * f2), this.posY + (adouble1[1] - adouble[1]) * 1.0D + (double)(f9 * 5.5F), this.posZ - (double)(f13 * 5.5F * f2), 0.0F, 0.0F);
                        
                        for (int j = 0; j < 3; ++j)
                        {
                        EntityFireDragonPart entitydragonpart = null;
                        
                        if (j == 0)
                        {
                        entitydragonpart = this.dragonPartTail1;
                        }
                        
                        if (j == 1)
                        {
                        entitydragonpart = this.dragonPartTail2;
                        }
                        
                        if (j == 2)
                        {
                        entitydragonpart = this.dragonPartTail3;
                        }
                        
                        double[] adouble2 = this.getMovementOffsets(12 + j * 2, 1.0F);
                        float f14 = this.rotationYaw * (float)Math.PI / 180.0F + this.simplifyAngle(adouble2[0] - adouble[0]) * (float)Math.PI / 180.0F * 1.0F;
                        float f15 = MathHelper.sin(f14);
                        float f16 = MathHelper.cos(f14);
                        float f17 = 1.5F;
                        float f18 = (float)(j + 1) * 2.0F;
                        entitydragonpart.onUpdate();
                        entitydragonpart.setLocationAndAngles(this.posX - (double)((f11 * f17 + f15 * f18) * f2), this.posY + (adouble2[1] - adouble[1]) * 1.0D - (double)((f18 + f17) * f9) + 1.5D, this.posZ + (double)((f12 * f17 + f16 * f18) * f2), 0.0F, 0.0F);
                        }
                        }
                        }
                        
                        /**
                        * Updates the state of the enderdragon's current endercrystal.
                        */
                        private void updateDragonEnderCrystal()
                        {
                        if (this.healingEnderCrystal != null)
                        {
                        if (this.healingEnderCrystal.isDead)
                        {
                        if (!this.worldObj.isRemote)
                        {
                        this.attackEntityFromPart(this.dragonPartHead, DamageSource.setExplosionSource((Explosion)null), 10.0F);
                        }
                        
                        this.healingEnderCrystal = null;
                        }
                        else if (this.ticksExisted % 10 == 0 && this.getHealth() < this.getMaxHealth())
                        {
                        this.setHealth(this.getHealth() + 1.0F);
                        }
                        }
                        
                        if (this.rand.nextInt(10) == 0)
                        {
                        float f = 32.0F;
                        List list = this.worldObj.getEntitiesWithinAABB(EntityFireCrystal.class, this.boundingBox.expand((double)f, (double)f, (double)f));
                        EntityFireCrystal entityendercrystal = null;
                        double d0 = Double.MAX_VALUE;
                        Iterator iterator = list.iterator();
                        
                        while (iterator.hasNext())
                        {
                        EntityFireCrystal entityendercrystal1 = (EntityFireCrystal)iterator.next();
                        double d1 = entityendercrystal1.getDistanceSqToEntity(this);
                        
                        if (d1 < d0)
                        {
                        d0 = d1;
                        entityendercrystal = entityendercrystal1;
                        }
                        }
                        
                        this.healingEnderCrystal = entityendercrystal;
                        }
                        }
                        
                        /**
                        * Pushes all entities inside the list away from the enderdragon.
                        */
                        private void collideWithEntities(List par1List)
                        {
                        double d0 = (this.dragonPartBody.boundingBox.minX + this.dragonPartBody.boundingBox.maxX) / 2.0D;
                        double d1 = (this.dragonPartBody.boundingBox.minZ + this.dragonPartBody.boundingBox.maxZ) / 2.0D;
                        Iterator iterator = par1List.iterator();
                        
                        while (iterator.hasNext())
                        {
                        Entity entity = (Entity)iterator.next();
                        
                        if (entity instanceof EntityLivingBase)
                        {
                        double d2 = entity.posX - d0;
                        double d3 = entity.posZ - d1;
                        double d4 = d2 * d2 + d3 * d3;
                        entity.addVelocity(d2 / d4 * 4.0D, 0.20000000298023224D, d3 / d4 * 4.0D);
                        }
                        }
                        }
                        
                        /**
                        * Attacks all entities inside this list, dealing 5 hearts of damage.
                        */
                        private void attackEntitiesInList(List par1List)
                        {
                        for (int i = 0; i < par1List.size(); ++i)
                        {
                        Entity entity = (Entity)par1List.get(i);
                        
                        if (entity instanceof EntityLivingBase)
                        {
                        entity.attackEntityFrom(DamageSource.causeMobDamage(this), 10.0F);
                        }
                        }
                        }
                        
                        /**
                        * Sets a new target for the flight AI. It can be a random coordinate or a nearby player.
                        */
                        private void setNewTarget()
                        {
                        this.forceNewTarget = false;
                        
                        if (this.rand.nextInt(2) == 0 && !this.worldObj.playerEntities.isEmpty())
                        {
                        this.target = (Entity)this.worldObj.playerEntities.get(this.rand.nextInt(this.worldObj.playerEntities.size()));
                        }
                        else
                        {
                        boolean flag = false;
                        
                        do
                        {
                        this.targetX = 0.0D;
                        this.targetY = (double)(70.0F + this.rand.nextFloat() * 50.0F);
                        this.targetZ = 0.0D;
                        this.targetX += (double)(this.rand.nextFloat() * 120.0F - 60.0F);
                        this.targetZ += (double)(this.rand.nextFloat() * 120.0F - 60.0F);
                        double d0 = this.posX - this.targetX;
                        double d1 = this.posY - this.targetY;
                        double d2 = this.posZ - this.targetZ;
                        flag = d0 * d0 + d1 * d1 + d2 * d2 > 100.0D;
                        }
                        while (!flag);
                        
                        this.target = null;
                        }
                        }
                        
                        /**
                        * Simplifies the value of a number by adding/subtracting 180 to the point that the number is between -180 and 180.
                        */
                        private float simplifyAngle(double par1)
                        {
                        return (float)MathHelper.wrapAngleTo180_double(par1);
                        }
                        
                        /**
                        * Destroys all blocks that aren't associated with 'The End' inside the given bounding box.
                        */
                        
                        public boolean attackEntityFromPart(EntityFireDragonPart par1EntityDragonPart, DamageSource par2DamageSource, float par3)
                        {
                        if (par1EntityDragonPart != this.dragonPartHead)
                        {
                        par3 = par3 / 4.0F + 1.0F;
                        }
                        
                        float f1 = this.rotationYaw * (float)Math.PI / 180.0F;
                        float f2 = MathHelper.sin(f1);
                        float f3 = MathHelper.cos(f1);
                        this.targetX = this.posX + (double)(f2 * 5.0F) + (double)((this.rand.nextFloat() - 0.5F) * 2.0F);
                        this.targetY = this.posY + (double)(this.rand.nextFloat() * 3.0F) + 1.0D;
                        this.targetZ = this.posZ - (double)(f3 * 5.0F) + (double)((this.rand.nextFloat() - 0.5F) * 2.0F);
                        this.target = null;
                        
                        if (par2DamageSource.getEntity() instanceof EntityPlayer || par2DamageSource.isExplosion())
                        {
                        this.func_82195_e(par2DamageSource, par3);
                        }
                        
                        return true;
                        }
                        
                        /**
                        * Called when the entity is attacked.
                        */
                        public boolean attackEntityFrom(DamageSource par1DamageSource, float par2)
                        {
                        return false;
                        }
                        
                        protected boolean func_82195_e(DamageSource par1DamageSource, float par2)
                        {
                        return super.attackEntityFrom(par1DamageSource, par2);
                        }
                        
                        /**
                        * handles entity death timer, experience orb and particle creation
                        */
                        protected void onDeathUpdate()
                        {
                        Minecraft mc = Minecraft.getMinecraft();
                        EntityPlayer player = mc.thePlayer;
                        ++this.deathTicks;
                        isDead = true;
                        wantToKillYou = false;
                        if (this.deathTicks >= 180 && this.deathTicks <= 200)
                        {
                        playEndSound(player, worldObj);
                        float f = (this.rand.nextFloat() - 0.5F) * 8.0F;
                        float f1 = (this.rand.nextFloat() - 0.5F) * 4.0F;
                        float f2 = (this.rand.nextFloat() - 0.5F) * 8.0F;
                        this.worldObj.spawnParticle("hugeexplosion", this.posX + (double)f, this.posY + 2.0D + (double)f1, this.posZ + (double)f2, 0.0D, 0.0D, 0.0D);
                        }
                        
                        int i;
                        int j;
                        
                        if (!this.worldObj.isRemote)
                        {
                        if (this.deathTicks > 150 && this.deathTicks % 5 == 0)
                        {
                        i = 2500;
                        
                        while (i > 0)
                        {
                        j = EntityXPOrb.getXPSplit(i);
                        i -= j;
                        this.worldObj.spawnEntityInWorld(new EntityXPOrb(this.worldObj, this.posX, this.posY, this.posZ, j));
                        }
                        }
                        
                        if (this.deathTicks == 1)
                        {
                        this.worldObj.func_82739_e(1018, (int)this.posX, (int)this.posY, (int)this.posZ, 0);
                        }
                        }
                        
                        this.moveEntity(0.0D, 0.10000000149011612D, 0.0D);
                        this.renderYawOffset = this.rotationYaw += 20.0F;
                        
                        if (this.deathTicks == 200 && !this.worldObj.isRemote)
                        {
                        i = 5000;
                        
                        while (i > 0)
                        {
                        j = EntityXPOrb.getXPSplit(i);
                        i -= j;
                        this.worldObj.spawnEntityInWorld(new EntityXPOrb(this.worldObj, this.posX, this.posY, this.posZ, j));
                        }
                        this.setDead();
                        }
                        }
                        
                        /**
                        * Makes the entity despawn if requirements are reached
                        */
                        protected void despawnEntity() {}
                        
                        /**
                        * Return the Entity parts making up this Entity (currently only for dragons)
                        */
                        public Entity[] getParts()
                        {
                        return this.dragonPartArray;
                        }
                        
                        /**
                        * Returns true if other Entities should be prevented from moving through this Entity.
                        */
                        public boolean canBeCollidedWith()
                        {
                        return false;
                        }
                        
                        public World func_82194_d()
                        {
                        return this.worldObj;
                        }
                        
                        /**
                        * Returns the sound this mob makes while it's alive.
                        */
                        protected String getLivingSound()
                        {
                        return "mob.enderdragon.growl";
                        }
                        
                        /**
                        * Returns the sound this mob makes when it is hurt.
                        */
                        protected String getHurtSound()
                        {
                        return "mob.enderdragon.hit";
                        }
                        
                        /**
                        * Returns the volume for the sounds this mob makes.
                        */
                        protected float getSoundVolume()
                        {
                        return 5.0F;
                        }
                        }
                        
                        

                        Mes mods:

                        • New Ores
                        • More Dragons
                        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

                          Utilise ça :

                          public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ)
                          {
                          if(!world.isRemote)
                          {
                          EntityFireDragon fireDragon = new EntityFireDragon(world);
                          fireDragon.setPosition(x, y, z);
                          world.spawnEntityInWorld(fireDragon);
                          return true;
                          }
                          return false;
                          }
                          

                          Ou alors fait un nouveau constructeur dans la classe de ton mob :

                          public EntityFireDragon(World world, int x, int y, int z)
                          {
                          this(world);
                          this.setPosition(x, y, z);
                          }
                          
                          1 réponse Dernière réponse Répondre Citer 0
                          • bin4r1sB Hors-ligne
                            bin4r1s
                            dernière édition par

                            Le nouveau constructeur fait bugguer l’entité donc je prends l’option 1.
                            Merci 😉

                            Mes mods:

                            • New Ores
                            • More Dragons
                            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

                              Résolu du coup ?

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

                                ça marche parfaitement, merci encore 😄

                                Mes mods:

                                • New Ores
                                • More Dragons
                                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