• Salut
    J’ai ajouter une musique grâce à la méthode de ma neige, mais j’aimerai que cette musique reste jusqu’à la fin(car plus je m’éloigne du bloc où j’étais quand la musique est arrivé, plus elle se baisse)(Un peu comme les musiques de Minecraft), et j’aimerai aussi couper les musiques de Minecraft; car quand y’a ma propre musique, la musique de Minecraft se lance ce qui n’est pas cool
    Merci d’avance


  • J’ai la moitié trouver(??)
    Sinon, je pourrais bloquer le son de la musique à zéro et supprimer l’option


  • se qui faut c’est que ta musique devienne une musique d’environnement.
    (désoler je peut pas te donner de je suis pas chez moi)


  • Quelqu’un sait comment faire ça?
    Désolée, je sais pas comment faire avec Forge

  • Administrateurs Rédacteurs Moddeurs confirmés

    Forge à un event pour les sons jouer, regarde dans le package net.minecraftforge.client.event.sound, il y a pas mal de PlaySound event, cherche le quel correspond aux musiques de minecraft (tu enregistre l’event et tu fais logger dans la console quand le son se lance) une fois que tu l’as trouvé, tu as juste à faire event.setCanceled(true); pour supprimer le son.


  • Désolée, je ne trouve pas quel event correspond aux musiques de Minecraft
    Si tu peux m’aider
    PS : les fichiers sons de Minecraft ont changé en 1.6, donc les events sound aussi. Peut être pour ça
    Où alors, c’est que je ne sais pas chercher 😑


  • Ou peut être que si je trouve quel fichiers sont enregistrer les musiques, je pourrai faire un implements

    Mais je ne trouve pas le fichier.

  • Administrateurs Rédacteurs Moddeurs confirmés

    Dans ta classe eventsound :

    @ForgeSubscribe
    public void onSoundPlayed(PlayBackgroundMusicEvent event)
    {
    event.setCanceled(true);
    }
    

    Le problème, c’est que la music n’est pas cancelable, donc ça fait crash
    Le mieux sera de jouer ton son comme une musique, enfin que le jeu ne joue pas une autre musique en même temps, et qu’il soit fort par tout, donc dans l’event sound :
    event.manager.addMusic(“modid:music”) (le son sera dans assets/modid/music/)
    Et pour jouer le son :

    SoundPoolEntry soundpoolentry = mc.sndManager.soundPoolMusic.getRandomSoundFromSoundPool("ta music");
    soundpoolentry = SoundEvent.getResult(new PlayBackgroundMusicEvent(this, soundpoolentry));
    
    if (soundpoolentry != null)
    {
    mc.sndSystem.backgroundMusic("BgMusic", soundpoolentry.func_110457_b(), soundpoolentry.func_110458_a(), false);
    mc.sndSystem.setVolume("BgMusic", this.options.musicVolume);
    mc.sndSystem.play("BgMusic");
    }
    

    J’ai pas eu le temps de tester, mais ça devrait être ça.


  • Salut
    Merci et désolée de ne pas avoir répondu plus tôt

    Mes erreurs :

    mc
    

    Que je fasse n’importe quoi, c’est le mot d’après qui bug.

    rand
    

    Que je fasse n’importe quoi, c’est nextInt qui bug.

    (new PlayBackgroundMusicEvent(this, soundpoolentry));
    

    Le problème, c’est que les 2 options pour régler cette erreur modifient les sources de Forges.

    Merci d’avance

  • Administrateurs Rédacteurs Moddeurs confirmés

    Oups, j’ai édité, j’ai supprimé la ligne inutile.
    Tu as bien mit ce code dans ton tickhandler à la place du son actuelle ?


  • J’ai les même erreurs que tout a l’heure, juste le rand en moins.
    Merci d’avance

  • Administrateurs Rédacteurs Moddeurs confirmés

    Je peux avoir ton code entier du tick handler ?


  • package This_is_Halloween;
    
    import java.util.EnumSet;
    
    import net.minecraftforge.client.event.sound.PlayBackgroundMusicEvent;
    import net.minecraftforge.event.ForgeSubscribe;
    import cpw.mods.fml.common.ITickHandler;
    import cpw.mods.fml.common.TickType;
    
    public class ClientTickHandler implements ITickHandler
    {
    @Override
    public void tickStart(EnumSet <ticktype>type, Object… tickData)
    {
    
    }
    @ForgeSubscribe
    public void onSoundPlayed(PlayBackgroundMusicEvent event)
    {
    event.setCanceled(true);
    }
    @Override
    public void tickEnd(EnumSet <ticktype>type, Object... tickData)
    {
    SoundPoolEntry soundpoolentry = mc.sndManager.soundPoolMusic.getRandomSoundFromSoundPool("ta music");
    soundpoolentry = SoundEvent.getResult(new PlayBackgroundMusicEvent(this, soundpoolentry));
    
    if (soundpoolentry != null)
    {
    mc.ticksBeforeMusic = this.rand.nextInt(3060) + 3060;
    mc.sndSystem.backgroundMusic("BgMusic", soundpoolentry.func_110457_b(), soundpoolentry.func_110458_a(), false);
    mc.sndSystem.setVolume("BgMusic", this.options.musicVolume);
    mc.sndSystem.play("BgMusic");
    }
    }
    @Override
    public EnumSet <ticktype>ticks()
    {
    return EnumSet.of(TickType.PLAYER);
    }
    
    @Override
    public String getLabel()
    {
    return "snow tick handler";
    }
    }
    ```</ticktype></ticktype></ticktype>
  • Administrateurs Rédacteurs Moddeurs confirmés

    J’ai pas dit de supprimer tout l’ancien code o_O
    Juste le code qui jouait le son, donc world.playsound.


  • Ok,
    j’ai des erreurs résolus, mais j’ai toujours options qui bug et

    (new PlayBackgroundMusicEvent(this, soundpoolentry));
    

    Et j’ai aussi une nouvelle erreur :
    sndSystem


  • Je l’ai mis dans TickEnd

    Vous pensez que c’est à cause de ça?___
    Ou…. Je crois peut être savoir pourquoi y’a des erreurs, mais là je peux pas coder.
    Je vous dirai la réponse demain.


  • Salut
    J’ai tester, non je ne vois pas où peut être l’erreur.


  • J’ai recréer le code, réessayer, mais ça ne marche toujours pas
    Un de vous a t-il une idée svp ?

  • Administrateurs Rédacteurs Moddeurs confirmés

    Je vois pas, tu pourrais me renvoyez le code que tu as dans ta classe principale + ton tickhandler pour que je puisse denouveau faire des tests en local ?


  • ClientTickHandler

    package This_is_Halloween;
    
    import java.util.EnumSet;
    import java.util.Random;
    
    import net.minecraft.block.Block;
    import net.minecraft.client.Minecraft;
    import net.minecraft.client.audio.SoundPoolEntry;
    import net.minecraft.util.MathHelper;
    import net.minecraft.world.biome.BiomeGenBase;
    import net.minecraftforge.client.event.sound.PlayBackgroundMusicEvent;
    import net.minecraftforge.client.event.sound.SoundEvent;
    import cpw.mods.fml.client.FMLClientHandler;
    import cpw.mods.fml.common.ITickHandler;
    import cpw.mods.fml.common.TickType;
    
    public class ClientTickHandler implements ITickHandler
    {
    
    @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);
    
    if(rand.nextInt(15) > 13)
    {
    System.out.println(biome.getFloatTemperature());
    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))
    {
    SoundPoolEntry soundpoolentry = mc.sndManager.soundPoolMusic.getRandomSoundFromSoundPool("ta music");
    soundpoolentry = SoundEvent.getResult(new PlayBackgroundMusicEvent(this, soundpoolentry));
    
    if (soundpoolentry != null)
    {
    mc.ticksBeforeMusic = this.rand.nextInt(3060) + 3060;
    mc.sndSystem.backgroundMusic("BgMusic", soundpoolentry.func_110457_b(), soundpoolentry.func_110458_a(), false);
    mc.sndSystem.setVolume("BgMusic", this.options.musicVolume);
    mc.sndSystem.play("BgMusic");
    }}
    else
    {
    SoundPoolEntry soundpoolentry = mc.sndManager.soundPoolMusic.getRandomSoundFromSoundPool("ta music");
    soundpoolentry = SoundEvent.getResult(new PlayBackgroundMusicEvent(this, soundpoolentry));
    
    if (soundpoolentry != null)
    {
    mc.ticksBeforeMusic = this.rand.nextInt(3060) + 3060;
    mc.sndSystem.backgroundMusic("BgMusic", soundpoolentry.func_110457_b(), soundpoolentry.func_110458_a(), false);
    mc.sndSystem.setVolume("BgMusic", this.options.musicVolume);
    mc.sndSystem.play("BgMusic");
    }}
    }
    }
    }
    
    @Override
    public EnumSet <ticktype>ticks()
    {
    return EnumSet.of(TickType.PLAYER);
    }
    
    @Override
    public String getLabel()
    {
    return "snow tick handler";
    }
    
    }
    

    Classe principale(dans la méthode load) :

    TickRegistry.registerTickHandler(new ClientTickHandler(), Side.CLIENT);
    ```</ticktype></ticktype></ticktype>