Navigation

    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

    Jouer une musique de combat

    Sans suite
    1.6.4
    5
    18
    4045
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • bin4r1s
      bin4r1s last edited by

      Bonjour,
      J’ai créé une entité, et je voulais faire jouer des musiques de combat pendant qu’elle était en vie.
      Problème : Après avoir créé le code correctement, les musiques ne se jouaient pas (ou aléatoirement) !

      Pouvez-vous m’aider ?
      EntityFireDragon :

      
      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)
      {
      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)
      {
      this.playEndSound(player, worldObj);
      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.playEndSound(player, worldObj);
      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)
      {
      this.playEndSound(player, worldObj);
      
      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;
      }
      }
      
      
      1 Reply Last reply Reply Quote 0
      • Superloup10
        Superloup10 Modérateurs last edited by

        Tu dois mettre ta musique dans cette méthode : protected String getLivingSound()

        1 Reply Last reply Reply Quote 0
        • bin4r1s
          bin4r1s last edited by

          Merci, je teste :)___
          EDIT : ça ne marche pas.
          Le nouveau code :

          
          protected String getLivingSound()
          {
          String music = "";
          if(this.getHealth() <= 1000.0F && this.getHealth() >= 500.0F)
          {
          music = "dragons:music/boss/fire_dragon";
          }
          else if(this.getHealth() <= 499.0F && this.getHealth() >= 1.0F)
          {
          music = "dragons:music/boss/fire_dragon_second_half";
          }
          return music;
          }
          
          
          1 Reply Last reply Reply Quote 0
          • robin4002
            robin4002 Administrateurs Rédacteurs Moddeurs confirmés last edited by

            Pour jouer un son, toujours des . et non des /

            1 Reply Last reply Reply Quote 0
            • bin4r1s
              bin4r1s last edited by

              Ah merci :D___
              EDIT : ça ne marche pas, je vais vérifier si mes sons commencent par un blanc .

              1 Reply Last reply Reply Quote 0
              • robin4002
                robin4002 Administrateurs Rédacteurs Moddeurs confirmés last edited by

                Le problème c’est que cette fonction fait un playSound et non un playMusic, il faudrait plutôt mettre un playMusic dans la fonction onEntityUpdate (ou quelque chose comme ça).

                1 Reply Last reply Reply Quote 0
                • bin4r1s
                  bin4r1s last edited by

                  D’accord je teste
                  EDIT : J’ai déjà testé dans onLivingUpdate et ça ne marche pas

                  1 Reply Last reply Reply Quote 0
                  • robin4002
                    robin4002 Administrateurs Rédacteurs Moddeurs confirmés last edited by

                    Tu as mit quel code ?

                    1 Reply Last reply Reply Quote 0
                    • bin4r1s
                      bin4r1s last edited by

                      Je précise que playMusic n’existe pas, j’ai donc testé avec un playRecord

                      1 Reply Last reply Reply Quote 0
                      • robin4002
                        robin4002 Administrateurs Rédacteurs Moddeurs confirmés last edited by

                        Heu oui, playRecord.
                        this.worldObj.playRecord(“nom du son”, (int)this.posX, (int)this.posY, (int)this.posZ);
                        ça marche pas ?

                        1 Reply Last reply Reply Quote 0
                        • bin4r1s
                          bin4r1s last edited by

                          Désolé ça n’a pas l’air de marcher 😞

                          Code :
                          Dans onLivingUpdate()

                          
                          if(this.getHealth() <= 999.0F && this.getHealth() >= 500.0F)
                          {
                          this.worldObj.playRecord("dragons:music.boss.fire_dragon", (int)this.posX, (int)this.posY, (int)this.posZ);
                          }
                          else if(this.getHealth() <= 499.0F && this.getHealth() >= 1.0F)
                          {
                          this.worldObj.playRecord("dragons:music.boss.fire_dragon_second_half", (int)this.posX, (int)this.posY, (int)this.posZ);
                          }
                          
                          

                          PS : Excuse moi de ne pas t’avoir répondu directement car ces derniers temps je n’ai pas pu venir sur le forum.

                          1 Reply Last reply Reply Quote 0
                          • Gugu
                            Gugu last edited by

                            Essaie de jouer un son de base du jeu, et donne le résultat 🙂

                            1 Reply Last reply Reply Quote 0
                            • isador
                              isador Moddeurs confirmés Modérateurs last edited by

                              on peut faire ne sorte que quand le joueur aggro une entité sa joue la musique?

                              1 Reply Last reply Reply Quote 0
                              • bin4r1s
                                bin4r1s last edited by

                                @Gugu42
                                Non j’ai testé, ça ne marche pas (en plus comme les sons ne sont pas par défaut et qu’il faut les ajouter ça revient au même).

                                @isador34
                                Je ne sais pas.

                                PS: Encore désolé pour cette longue période sans réponse.

                                1 Reply Last reply Reply Quote 0
                                • robin4002
                                  robin4002 Administrateurs Rédacteurs Moddeurs confirmés last edited by

                                  Mets un System.out.println(“quelque chose pour vérifier que le code est exécuté”);

                                  1 Reply Last reply Reply Quote 0
                                  • isador
                                    isador Moddeurs confirmés Modérateurs last edited by

                                    Att sinon demain je te passe des code qui marche

                                    1 Reply Last reply Reply Quote 0
                                    • bin4r1s
                                      bin4r1s last edited by

                                      @robin4002
                                      Ok je teste

                                      EDIT: le code fonctionne, j’ai un retour à chaque fois (la musique ne marche quand même pas)

                                      @isador34
                                      Merci 🙂


                                      Ah je crois que je viens de comprendre mon erreur (et oui, prendre du recul, ça marche ! :))
                                      Le code de lancement est dans la méthode getLivingSound(). Or, celle(ci exécute le code à CHAQUE SECONDE (ou tick je sais pas).
                                      Il faudrait donc que j’utilise une autre méthode ou un condition dans le genre :

                                      
                                      if(musiqueFinie == true)
                                      { lancerMusique(); }
                                      else
                                      {}
                                      
                                      
                                      1 Reply Last reply Reply Quote 0
                                      • isador
                                        isador Moddeurs confirmés Modérateurs last edited by

                                        moi ca mon mod qui jouer de la musique je fessai ca:
                                        ma classe qui enregistre les sons:

                                        
                                        @ForgeSubscribe
                                        public void onSound(SoundLoadEvent event)
                                        {
                                        try
                                        {
                                        event.manager.soundPoolSounds.addSound("modid:tonSon.ogg");
                                        }
                                        catch(Exception e)
                                        {
                                        System.out.println("Failed to registry sound");
                                        }
                                        
                                        

                                        et dans ma condition:

                                        
                                        FMLClientHandler.instance().getClient().sndManager.playSoundFX("modid:tonSon", 1.0F, 1.0F);
                                        
                                        
                                        1 Reply Last reply Reply Quote 0
                                        • 1 / 1
                                        • First post
                                          Last post
                                        Design by Woryk
                                        Contact / Mentions Légales / Faire un don

                                        MINECRAFT FORGE FRANCE © 2018

                                        Powered by NodeBB