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.