Jouer un son après qu'il soit finis



  • Salut
    J'ai un problème pour mon son quand il neige (quoi ?!! Encore ? 😉 )
    En fait, j'aimerai que ce son ce joue une fois qu'il a finit de jouer, sans mettre de timer
    Mon code :

    package This_is_Christmas;
    
    import java.util.EnumSet;
    import java.util.Random;
    
    import net.minecraft.block.Block;
    import net.minecraft.client.Minecraft;
    import net.minecraft.util.MathHelper;
    import net.minecraft.world.biome.BiomeGenBase;
    import cpw.mods.fml.client.FMLClientHandler;
    import cpw.mods.fml.common.ITickHandler;
    import cpw.mods.fml.common.TickType;
    
    public class ClientTickHandler implements ITickHandler
    {
    Minecraft instance = Minecraft.getMinecraft(); // Vieille méthode, je sais pas si elle marche encore
    boolean isPlaying = instance.sndManager.sndSystem.playing("christmas:snow.ogg");
    @Override
    public void tickStart(EnumSet <ticktype>type, Object… tickData)
    {
    
    }
    
    @Override
    public void tickEnd(EnumSet <ticktype>type, Object... tickData)
    {
    Minecraft mc = FMLClientHandler.instance().getClient();
    Random rand = mc.theWorld.rand;
    BiomeGenBase biome = mc.theWorld.getBiomeGenForCoords((int)mc.thePlayer.posX, (int)mc.thePlayer.posZ);
    System.out.println(isPlaying);
    if(isPlaying = false)
    {
    int i = MathHelper.floor_double(mc.thePlayer.posX);
    int k = MathHelper.floor_double(mc.thePlayer.posZ);
    int k1 = i + rand.nextInt(10) - rand.nextInt(10);
    int l1 = k + rand.nextInt(10) - rand.nextInt(10);
    int i2 = mc.theWorld.getPrecipitationHeight(k1, l1);
    int j2 = mc.theWorld.getBlockId(k1, i2 - 1, l1);
    float f1 = rand.nextFloat();
    float f2 = rand.nextFloat();
    double d0 = (double)((float)k1 + f1);
    double d1 = (double)((float)i2 + 0.1F) - Block.blocksList[j2].getBlockBoundsMinY();
    double d2 = (double)((float)l1 + f2);
    boolean biomeneige = biome.getFloatTemperature() == 0.05F || biome.getFloatTemperature() == 0.0F;
    if(mc.theWorld.isRaining() && biomeneige) {
    if(d1 > mc.thePlayer.posY + 1.0D && mc.theWorld.getPrecipitationHeight(MathHelper.floor_double(mc.thePlayer.posX), MathHelper.floor_double(mc.thePlayer.posZ)) > MathHelper.floor_double(mc.thePlayer.posY))
    {
    mc.theWorld.playSound(mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ, "christmas:snow", 0.1F, 0.5F, false);
    }
    else
    {
    mc.theWorld.playSound(mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ, "christmas:snow", 0.2F, 1.0F, false);
    }
    }
    }
    }
    
    @Override
    public EnumSet <ticktype>ticks()
    {
    return EnumSet.of(TickType.PLAYER);
    }
    
    @Override
    public String getLabel() {
    // TODO Auto-generated method stub
    return null;
    }
    
    }
    

    Mais j'ai ajouter :

    boolean isPlaying = instance.sndManager.sndSystem.playing("christmas:snow.ogg");
    if(isPlaying = false)
    

    Donc logiquement, ça joue le son uniquement quand il n'y en as pas. Mais non, ça ne fait rien
    Du coup, j'ai cru que ça as une autre logique, et j'ai essayer de mettre true à la place de false : ça joue le son à chaque fois.

    Donc si vous avez une petite idée

    Merci d'avance</ticktype></ticktype></ticktype>


  • Modérateurs

    Mets deux "=" quand tu veux vérifier une condition ^^


  • Moddeurs confirmés Rédacteurs Administrateurs

    ou juste if(!isPlaying)
    Et sinon tu es sur du .ogg ?



  • J'ai essayer vos deux solutions, et aucune ne marche 😞
    Sinon, oui je suis sur du .ogg



  • Cela peut paraître stupide mais je te conseille lors de ta conversion .mp3 en .ogg ou .wav en .ogg ou autre peu importe d'utiliser Audacity car Format Factory (si tu l'utilise) fait des siennes ! Voilà pour "l'astuce" ^^

    Cette astuce est obsolète si le son est déjà en .ogg bien-sûr !


  • Moddeurs confirmés Rédacteurs Administrateurs

    @'Axaurus':

    J'ai essayer vos deux solutions, et aucune ne marche 😞
    Sinon, oui je suis sur du .ogg

    Non, je parlais de :

    boolean isPlaying = instance.sndManager.sndSystem.playing("christmas:snow%(#FF0000)[.ogg]");
    

    J'ai oublié l'accent sur le u de sûr.
    Je pense que c'est plutôt

    boolean isPlaying = instance.sndManager.sndSystem.playing("christmas:snow");
    

    puisque dans le jeu, le nom sans le .ogg.



  • Non, désolée ça ne marche pas
    J'ai mis :

    boolean isPlaying = instance.sndManager.sndSystem.playing("christmas:snow");
    

    et

    if(!isPlaying)
    

    Et c'est pareil : ça joue le son comme avant(ça se lance à chaque fois)


  • Moddeurs confirmés Rédacteurs Administrateurs

    Au pire utilise les event sound de forge.



  • Un petit System.out.println de isPlaying ne ferai pas de mal 😉



  • @'robin4002':

    Au pire utilise les event sound de forge.

    Je ne vois pas c'est quelle event

    @'TheCreeper999':

    Un petit System.out.println de isPlaying ne ferai pas de mal 😉

    Je l'ai déjà fait, et à chaque fois ça me marque false, comme si le son ne se jouait jamais, alors qu'il se joue


  • Moddeurs confirmés Rédacteurs Administrateurs

    Ha en effet, j'ai parlé trop vite, il y a que un event pour sound play, mais pas pour sound stop.



  • ???
    Désolée "d'être " un boulet, mais je ne trouve pas


  • Moddeurs confirmés Rédacteurs Administrateurs

    Je disais juste qu'il n'y a pas d'event pour quand le son arrête d'être joué, contrairement à ce que je croyais.

    Du coup je vois pas de solution 😕


Log in to reply