L'event sound de Forge
-
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.
-
Tutoriel prévu(regarde tutoriels en préparation), ce message serait mieux dans le support en passant.
-
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"); } } }
-
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 ? -
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 :() -
-
Merci
-
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 -
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 -
En 1.7.x, il n’y a plus besoin d’utiliser d’event sounds
-
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
-
cela m’interesse aussi
-
Avec un timer, je vois pas d’autre solution.
-
Aurais-tu une base de timer pour cette spécificité ?