• Administrateurs Rédacteurs Moddeurs confirmés

    Vous savez maintenant créer des items et des blocs, mais ça reste basique. N’avez-vous pas envie d’ajouter vos propre son dans votre mods ?
    Nous allons donc voir dans ce tutoriel comment utiliser l’event sound de forge.
    D’ailleurs, contrairement à modloader & audio mod, l’event sound de forge permet de mettre les sons de votre mod à l’intérieur de l’archive de votre mod, ce qui ne compromet pas la facilité de installation de votre mod.

    Dans la classe principale

    Juste avant vos blocs et items et juste après vos configuration, ajoutez cette condition :

    if(event.getSide().isClient())
    {
    }
    

    Elle va vérifie si le side est du type client. En effet, le serveur ne peut pas charger de son, il va cracher si vous lui faite charger des sons avec un NoClassDefFound.
    Dans cette condition, ajoutez :

    MinecraftForge.EVENT_BUS.register(new EventSoundTutorial());
    

    MinecraftForge.EVENT_BUS.register permet d’enregistrer un event bus, il y a de nombreux event, nos les verrons dans d’autres tutoriels.
    EventSoundTutoriel est la classe où je vais gérer le son, créez-la. Dans mon cas je vais la créer dans le package client comme les sons ne sont que gérer par le client, vous n’êtes pas obliger de faire pareil, mais ça permet de mieux s’organiser.

    La classe de l’event sound

    package tutoriel.client;
    
    import net.minecraftforge.client.event.sound.SoundLoadEvent;
    import net.minecraftforge.event.ForgeSubscribe;
    
    public class EventSoundTutorial
    {
        @ForgeSubscribe
        public void onSound(SoundLoadEvent event)
        {
            try
            {
                event.manager.addSound("modtutoriel:explosion1.ogg");
                event.manager.addSound("modtutoriel:explosion2.ogg");
                event.manager.addSound("modtutoriel:explosion3.ogg");
            }
            catch(Exception e)
            {
                System.out.println("Failed to registry sound");
            }
        }
    }
    

    L’annotation @ForgeSubscribe est très importante, sans elle votre event ne fonctionnera pas, c’est valable pour tout les autres events. Ensuite on essaye d’enregistrer les sons, si ça marche pas dans la console il y aura Failed to registry sound.
    Pour les sons, il faut mettre modid:nom du son. Dans mon cas, j’enregistre 3 sons qui sont en fait qu’un seul. En effet, le fait de finir un son par un nombre permet de gérer un système de random. Lorsque je vais utiliser le son explosion, soit le son 1, soit le 2, soit le 3 va être joué. Vous pouvez enregistrer beaucoup plus que 3 sons avec cette méthode. En revanche si vous ne voulez pas faire de système de random, vos noms de son ne doivent pas se finir par un nombre.

    Les ressources

    Les fichiers de son doivent être au format .ogg, vous pouvez trouver un convertisseur ici : http://media.io/fr/
    Ils doivent être placer dans le dossier forge/mcp/src/minecraft/assets/modid/sound/nomduson.ogg
    Une fois que vous compilerez votre mod, ils devrons être dans votremod.zip/assets/modid/sound/nomduson.ogg
    Comme d’habitude, pas de majuscule au modid.

    Jouer le son

    Vous pouvez jouer des sons dans n’importe quel méthode qui possède world et player ou x, y, z en paramètre.
    Par exemple dans un item, dans la fonction du clic droit :

    public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player)
    {
        world.playSoundAtEntity(player, "modtutoriel:explosion", 1.0F, 1.0F);
        return stack;
    }
    

    Il faut mettre votre modid:le nom du son sans les nombres après. Le premier 1.0F est le volume du son, et le deuxième est la fréquence.
    Autre exemple avec un bloc :

    public void randomDisplayTick(World world, int x, int y, int z, Random random)
    {
        world.playSoundEffect((double)x + 0.5D, (double)y + 0.5D, (double)z + 0.5D, "modtutoriel:explosion", 1.0F, 1.0F);
    }
    

    Même principe sauf que la nous avons les coordonnées du bloc. les + 0.5D servent à mettre la source du son au centre du bloc.

    rendu final sur github

  • Moddeurs confirmés

    Tutoriel prévu(regarde tutoriels en préparation), ce message serait mieux dans le support en passant.

  • Administrateurs Rédacteurs Moddeurs confirmés

    Le dossier c’est assets/modid/records
    Et il faut pas utiliser event.manager.addSound mais event.manager.addStreaming


  • Oui je sais qu’il serait mieux dans la rubrique aide mais étant donnée qu’il avait rapport avec les sons, j’ai pensé qu’il aurait été utile ici.
    Si un tuto est prévu, dans ce cas, mon post peut être supprimé. Je peux attendre la sorti du tuto 😉


  • Bonjour,
    J’ai suivi le tuto et créé un item pour jouer un son (une jukebox), mais quand je fais un clic droit, rien ne se passe.
    Pouvez-vous m’aider ?

    Classe principale :

    
    if(event.getSide().isClient())
    {
    MinecraftForge.EVENT_BUS.register(new SoundEvent());
    }
    
    jukeBox1 = (new ItemJukebox1(jukeBox1ID)).setUnlocalizedName("JukeBox1").setTextureName("dragons:jukebox_1");
    GameRegistry.registerItem(jukeBox1, "Jukebox 1", "Dragons");
    
    

    ItemJukebox1 :

    
    package fr.MrBlockTNT.Dragons.item;
    
    import fr.MrBlockTNT.Dragons.core.Dragons;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    import net.minecraft.world.World;
    
    public class ItemJukebox1 extends Item
    {
    public ItemJukebox1(int id)
    {
    super(id);
    this.setCreativeTab(Dragons.DragonsTab);
    }
    
    public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player)
    {
    world.playSoundAtEntity(player, "dragons:boss/fire_dragon", 1.0F, 1.0F);
    return stack;
    }
    }
    
    

    SoundEvent :

    
    package fr.MrBlockTNT.Dragons.event;
    
    import net.minecraftforge.client.event.sound.SoundLoadEvent;
    import net.minecraftforge.event.ForgeSubscribe;
    
    public class SoundEvent
    {
    @ForgeSubscribe
    public void onSound(SoundLoadEvent event)
    {
    try
    {
    event.manager.addMusic("dragons:boss/boss_end.ogg");
    event.manager.addMusic("dragons:boss/fire_dragon.ogg");
    event.manager.addMusic("dragons:boss/fire_dragon_second_half.ogg");
    }
    catch(Exception e)
    {
    System.out.println("Failed to registry sound");
    }
    }
    }
    
    
  • Administrateurs Rédacteurs Moddeurs confirmés

    Pour les musiques utilise world.playRecord(“nom du son”, x, y, z);
    Pour x y et z utilise (int)player.xPos, etc …
    Et le nom du son est plutôt dragons:boss.fire_dragon pour le jouer, pour l’enregistrer celle le /. Par contre j’ai jamais testé avec les / donc si marche pas essaye sans.


  • D’accord, merci :)___
    EDIT : ça marche parfaitement ! Il fallait effectivements changer les “/” en “.” pour l’utilisation de la musique et changer par playRecord :D___
    Par contre, comment faire jouer le son en boucle ?

  • Administrateurs Rédacteurs Moddeurs confirmés

    Pour ça il faudrait jouer la son dans la fonction onUpdate et faire un timer.


  • Un petit exemple de timer svp 🙂
    (je ne me suis jamais servi de timer, et tous les tutos que j’ai trouvés son nuls ou mal expliqués :()

  • Administrateurs Rédacteurs Moddeurs confirmés


  • Merci 🙂

  • Moddeurs confirmés Modérateurs

    heu moi j’ai suivie exactement le tuto mais j’ai pas de son…

    mes classe:
    item: http://pastebin.com/rDyK6Dch
    main: http://pastebin.com/mzrfMhpU
    eventsound: http://pastebin.com/jzZKDiQZ

  • Administrateurs Rédacteurs Moddeurs confirmés

    Enlève le 1 dans la fonction pour jouer le son.


  • Hello tout le monde j’ai essayé d’appliquer l’event sound de forge à mon mod en suivant ce tutoriel mais étant en 1.7 le code ne marche pas voici ma class :

    
    package mods.maxiworldcraft.mineKingdomHeartsmod.common;
    
    import cpw.mods.fml.common.eventhandler.SubscribeEvent;
    import net.minecraftforge.client.event.sound.SoundLoadEvent;
    
    public class MineKingdomHeartsEventSound
    {
    @SubscribeEvent
    public void onSound(SoundLoadEvent event)
    {
    try
    {
    event.manager.addStreaming("modtutoriel:explosion1.ogg");
    }
    catch(Exception e)
    {
    System.out.println("Failed to registry sound");
    }
    }
    }
    
    

    et étrangement ‘manager’ est barré plz de l’aide

    EDIT = Il faut juste oublier l’event sound et ne s’occuper que du sound.json
    Désolé du dérangement

  • Modérateurs

    En 1.7.x, il n’y a plus besoin d’utiliser d’event sounds

  • Administrateurs Rédacteurs Moddeurs confirmés

    http://www.minecraftforgefrance.fr/showthread.php?tid=788#classe11
    En attendant le tutoriel pour les sons 1.7


  • Bonjour !

    Plus tôt que d’ouvrir un post d’aide j’aurais aimé savoir comment on fait pour que le son se répète en boucle ?

    C’est pour un block

  • Moddeurs confirmés Modérateurs

    cela m’interesse aussi

  • Administrateurs Rédacteurs Moddeurs confirmés

    Avec un timer, je vois pas d’autre solution.


  • Aurais-tu une base de timer pour cette spécificité ?