SOLVED Méthode pour faire jouer un son lorsqu'un bloc est posé


  • Bonjour,

    J’ai besoin dans mon mod de faire jouer un son à un bloc lorsqu’il est posé

    Précision : le joueur ne peut pas y échapper(donc il l’entend partout dans le jeu), la musique ne s’arrête que quand le bloc est détruit

    Problème : j’ai beau tout essayé, je n’arrive pas à stopper le son et à le transformer en musique Minecraft (qu’on entendra partout dans le monde).

    Et je n’ai aucun message d’erreur de Forge et mon fichier Nyan.ogg est bien au bon endroit.

    Code de ma Classe Principale :

    package squix.squixsmods.common;
    
    import squix.squixsmods.blocs.NyanBlock;
    import squix.squixsmods.utils.EventSoundNyan;
    import net.minecraft.block.Block;
    import net.minecraftforge.common.MinecraftForge;
    import cpw.mods.fml.common.Mod;
    import cpw.mods.fml.common.Mod.EventHandler;
    import cpw.mods.fml.common.Mod.Instance;
    import cpw.mods.fml.common.event.FMLInitializationEvent;
    import cpw.mods.fml.common.event.FMLPostInitializationEvent;
    import cpw.mods.fml.common.event.FMLPreInitializationEvent;
    import cpw.mods.fml.common.network.NetworkMod;
    import cpw.mods.fml.common.registry.GameRegistry;
    
    @Mod(modid = "SquixsMods", name = "Squix's Mods", version = "1.0.0")
    @NetworkMod(clientSideRequired = true, serverSideRequired = false)
    public class Squixmods
    {
    // Blocs
    
    public static Block NyanBlock;
    
    @Instance("SquixsMods")
    public static Squixmods instance;
    
    @EventHandler
    public void PreInit(FMLPreInitializationEvent event)
    {
    // Configuration
    
    if(event.getSide().isClient())
    {
    MinecraftForge.EVENT_BUS.register(new EventSoundNyan());
    }
    
    // Blocks
    
    NyanBlock = new NyanBlock(2000).setHardness(50.0F).setResistance(2000.0F).setStepSound(Block.soundStoneFootstep).setUnlocalizedName("NyanBlock").setTextureName("squixsmods:NyanBlock");
    
    // Items
    
    // Achievements
    }
    
    @EventHandler
    public void Init(FMLInitializationEvent event)
    {
    // Registry
    GameRegistry.registerBlock(NyanBlock, "NyanBlock");
    
    // Mobs
    
    // Render
    
    // NetWork
    
    // Recipe
    
    }
    
    @EventHandler
    public void PostInit(FMLPostInitializationEvent event)
    {
    // Integration avec les autres mods
    }
    }
    

    Code du NyanBlock :

    package squix.squixsmods.blocs;
    
    import net.minecraft.block.Block;
    import net.minecraft.block.material.Material;
    import net.minecraft.creativetab.CreativeTabs;
    import net.minecraft.entity.EntityLivingBase;
    import net.minecraft.item.ItemStack;
    import net.minecraft.world.World;
    
    public class NyanBlock extends Block
    {
    public NyanBlock(int id)
    {
    super(id, Material.rock);
    this.setCreativeTab(CreativeTabs.tabBlock);
    }
    
    public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase living, ItemStack stack)
    {
    world.playSoundEffect((double)x + 0.5D, (double)y + 0.5D, (double)z + 0.5D, "squixsmods:Nyan", 1.0F, 1.0F);
    }
    }
    

    Code de EventSoundNyan :

    package squix.squixsmods.utils;
    
    import net.minecraftforge.client.event.sound.SoundLoadEvent;
    import net.minecraftforge.event.ForgeSubscribe;
    
    public class EventSoundNyan
    {
    @ForgeSubscribe
    public void onSound(SoundLoadEvent event)
    {
    try
    {
    event.manager.addSound("squixsmods:Nyan.ogg");
    
    }
    catch(Exception e)
    {
    System.out.println("Failed to registry sound");
    }
    }
    }
    
  • Administrateurs Rédacteurs Moddeurs confirmés

    public void breakBlock(World world, int x, int y, int z, int id, int metadata)
    {
    world.playSoundEffect((double)x + 0.5D, (double)y + 0.5D, (double)z + 0.5D, null, 0.0F, 0.0F);
    super.breakBlock(world, x, y, z, id, metadata);
    }
    

    Normalement ça devrait couper le son lors de la destruction. Le reste je sais pas, je peux juste te dire que si tu veux faire une musique, il faut utiliser event.manager.addMusic et pour le jouer playSound à la place de playSoundEffect.