Crescendo et decrescendo pour un son



  • Salut à tous et à toutes, je cherche à faire un decrescendo lorsque ma musique se lance et un decrescendo quand elle doit s'arrêter cependant cela ne marche pas car la musique se lance avec une valeur mais cette dernière est bien tickée mais on dirait que le son de la musique ne veut pas se modifier

    Voilà mon code, merci d'avance ^^

    
    package mrplaigon.fr.testMod.entity;
    
    import mrplaigon.invictusserver.invictus.common.InvictusMod;
    import mrplaigon.invictusserver.invictus.handler.ItemHandler;
    import net.minecraft.entity.Entity;
    import net.minecraft.entity.EntityLivingBase;
    import net.minecraft.entity.SharedMonsterAttributes;
    import net.minecraft.entity.ai.attributes.IAttributeInstance;
    import net.minecraft.entity.item.EntityXPOrb;
    import net.minecraft.entity.monster.EntityMob;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.init.Items;
    import net.minecraft.potion.Potion;
    import net.minecraft.potion.PotionEffect;
    import net.minecraft.util.ChatComponentTranslation;
    import net.minecraft.util.DamageSource;
    import net.minecraft.util.MathHelper;
    import net.minecraft.world.EnumDifficulty;
    import net.minecraft.world.World;
    
    public class EntityBoss extends EntityMob
    
    {
    
        //public int deathTicks;
    public short timerReload = 0;
        public float crescendo = 0.0F;
        public float decrescendo = 2.5F;
        public float soundMusicValue;
    
    public EntityBoss(World world) 
    {
    super(world);
    //this.setSize(1.4F, 0.9F);
            this.isImmuneToFire = true;
    }
    
    public void applyEntityAttributes() 
    {
    super.applyEntityAttributes();
    getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(10.0D);
    getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(20.0D);
    getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.25D);
    getEntityAttribute(SharedMonsterAttributes.knockbackResistance).setBaseValue(5.0D);
    }
    
    public boolean attackEntityAsMob(Entity entity)
        {
            if (super.attackEntityAsMob(entity))
            {
                if (entity instanceof EntityPlayer)
                {
                        ((EntityPlayer)entity).addPotionEffect(new PotionEffect(Potion.wither.id, 10 * 20, 1));             
                }
    
                return true;
            }
            else
            {
                return false;
            }
        }
    
        /**
         * handles entity death timer, experience orb and particle creation
         */
        public void onDeath(DamageSource damagesource)
        {
    
    if (damagesource.getEntity() instanceof EntityPlayer)
    {
    int j = rand.nextInt(3);
    
    if (j == 0)
    {
    this.dropItem(ItemHandler.invictusCristalRare, 1);
    }
    int k;
    int i = 75000;// 75 = 0.5 level, 150 = 1 level environ, 1500 = 10 level, 150 000 = 10 levels pour 10 personnes au minimum
    
                    while (i > 0)
                    {
                        k = EntityXPOrb.getXPSplit(i);
                        i -= k;
                        this.worldObj.spawnEntityInWorld(new EntityXPOrb(this.worldObj, this.posX, this.posY, this.posZ, k));
                    }
                 stopBossMusic();
    }
        }
    
        public void onLivingUpdate()
        {
        super.onLivingUpdate();
        timerReload++;
        crescendo += 0.1F;
          decrescendo -= 0.1F;
    
          System.out.println("La valeur de crescendo" + crescendo);
    
          if (crescendo >= 2.5F)
          crescendo = 0.1F;
    
          if (decrescendo == 0.0F)
          decrescendo = 2.5F;
    
        if (timerReload <= 1)
        {
        launchBossMusic();
        System.out.println("Music du boss lancee");
        }
        else if (timerReload >= 3500)
        {
        timerReload = 0;
        }
        }
    
        private void launchBossMusic()
        {
        if (this.getHealth() > 0.0F)
             {
                EntityPlayer entityplayer = this.worldObj.getClosestVulnerablePlayerToEntity(this, 16.0D);
                   if(entityplayer != null && this.canEntityBeSeen(entityplayer))
                   {
                       crescendo = 0.1F;
                       soundMusicValue = crescendo;
                       this.worldObj.playSoundAtEntity(this, "invictus:bossMusic", soundMusicValue, 1.0F);
                   }
             }
         }
        private void stopBossMusic()
        {
        if (this.getHealth() == 0.0F)
         {
            EntityPlayer entityplayer = this.worldObj.getClosestVulnerablePlayerToEntity(this, 16.0D);
               if(entityplayer != null && this.canEntityBeSeen(entityplayer))
               {
              timerReload = 0;
                   decrescendo = 2.5F;
                   soundMusicValue = decrescendo;
               }
         }
        }
    }
    
    


  • au pire tu modifie ton fichier audio, c'est chiant mais plus facile



  • @'isador34':

    au pire tu modifie ton fichier audio, c'est chiant mais plus facile

    J'y ai réfléchi mais pour le decrescendo ça n'ira pas car quand il mourra si il est à 1:10 ma musique dure 3 min alors qu'avec du code j'aurai pu baisser le volume même si la musique était au début



  • a oue….


  • Modérateurs

    Tu lances la musique au volume max au début et puis tu ne changes pas le son après, ça risque pas de marcher.
    Cependant, je te conseille de regarder la classe SoundManager de MC et SoundSytem de paulsoce, ces deux classes permettent de changer le volume assez facilement

    Sent from my GT-I9000 using Tapatalk 2



  • Merci xav de ta réponse 🙂
    J'ai beaucoup regardé la class SoundManager car SOundSystem était beaucoup trop gros comme class et m'avait l'air moins abordable que l'autre 
    J'ai trouvé ce topic
    http://www.minecraftforge.net/forum/index.php?topic=18542.0
    Mais avant que j'y revienne, je vais vous dire, j'au essayé la méthode stopSound mais comme l'argument était un ISound et que moi j'ai besoin d'un string j'ai essayé la méthode stop (String string) de la class SoundSystem mais j'ai besoin d'un instance et dès que je la fait toute mon entity bug et ne peut plus spawn avec ce crash report (http://hpics.li/18a4ada) , donc j'ai essaye de faire l'instance autrement comme celle dans la class SoundManager mais j'ai plein de bug au niveau des mots clé private public enfin ça cause plein d'erreur sur ma tentative d'instance.
    J'espère t'avoir bien aidé si tu peux m'en dire + je dis pas non ^^
    Merci d'avance à vous tous