Jump to content

[1.6.2] Custom Sound (SOLVED)


xerca

Recommended Posts

Hello.

 

I used to use custom sounds and music in my mod but after the 1.6.x update, I can't make it work anymore.

I have a class which looks like this:

public class ModName_EventSounds {
@ForgeSubscribe
    public void onSound(SoundLoadEvent event)
    {
        try 
        {
            event.manager.soundPoolSounds.addSound("x/sound1.ogg", mod_ModName.class.getResource("/x/sound1.ogg"));
            event.manager.soundPoolSounds.addSound("x/sound2.ogg", mod_ModName.class.getResource("/x/sound2.ogg"));
            .
            .
            .
        }
        catch (Exception e)
        {
            System.err.println(error);
        }
    }
}

 

Then, somewhere else, I have codes like this for playing the sounds:

worldObject.playSoundAtEntity(EntityPlayerObject, "x.sound1", 1.0F, 1.0F);

 

I also have this code in the client proxy for registration:

@Override
public void registerSound() {
	MinecraftForge.EVENT_BUS.register(new ModName_EventSounds());
}

 

It used to work well but now apperently some changes has been done and the "event.manager.soundPoolSounds.addSound" method only takes one string as a parameter. I couldn't find out how this new one is supposed to work, so I ask for your help.

 

Thanks in advance.

Link to comment
Share on other sites

Hi.

 

After getting no help from the forums, I returned to look deeper for it myself and finally got it to work. Although I am not completely sure of this solution, it works and also makes sense. So, I am explaining it here to help other people with the same problem like F3RULLO14.

 

First of all, change the place of your sound files from wherever they are to "assets/mod_name/sound" (you need to create that folder). If they are records, I think they should go into "assets/mod_name/records" but I haven't tested this. Think of the sounds as another asset just like textures.

 

Then, turn your old code into this:

event.manager.addSound("mod_name:sound1.ogg");

(put "addStreaming" instead of "addSound" for a record)

 

The only string parameter inside is supposed to be just like an icon/texture file. Minecraft automatically adds the "sound" directory part, so don't write that.

 

After this is done, your sound should be registered. Playing it is done like this:

WorldObject.playSoundAtEntity(EntityPlayerObject, "mod_name:sound1", 1.0F, 1.0F);

 

"playSoundAtEntity" part is just the same example I used in the first post and presumably any other sound playing function should work the same. The important part is "mod_name:sound1". As expected, this also looks like using an icon for an item or a block. Don't use extensions here (.ogg, .wav, ...).

 

I hope this helps.

Link to comment
Share on other sites

Thank you for coming back here and sharing you're solution!

I haven't tried to do this yet but now you saved me for quite a lot of frustration and struggling.

I'm also going to be using this to create a text I can direct others to for help.

Thank you! :D

If you guys dont get it.. then well ya.. try harder...

Link to comment
Share on other sites

Thank you for coming back here and sharing you're solution!

I haven't tried to do this yet but now you saved me for quite a lot of frustration and struggling.

I'm also going to be using this to create a text I can direct others to for help.

Thank you! :D

Thanks xerca, that worked for me!

 

You are welcome, I'm really glad it is helping others.

Link to comment
Share on other sites

What am I doing wrong? :(

 

package invizzble.mods.nc.items;

import invizzble.mods.nc.entities.projectiles.EntityStaffODarknessAmmo;
import invizzble.mods.nc.lib.Strings;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

public class ToolStaffODarkness extends Item{
    
    public ToolStaffODarkness (int id){
        super (id );
        this.setUnlocalizedName(Strings.STAFFODARKNESS_NAME);
        this.setMaxStackSize(1);
        this.setCreativeTab(CreativeTabs.tabCombat);
        this.setMaxDamage(19);
    }
    
    @Override
    public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World,EntityPlayer par3EntityPlayer) {
      if(this.getMaxDamage() > 0)
      {
          par2World.playSoundAtEntity(par3EntityPlayer, "nc:StaffODarkness", 1.0F, 1.0F);
        {
          par2World.spawnEntityInWorld(new EntityStaffODarknessAmmo(par2World, par3EntityPlayer));
        }
        this.DamageItem(par1ItemStack, par3EntityPlayer);
        
      }
      return par1ItemStack;
       
      
    }
    
    public void DamageItem(ItemStack par1ItemStack, EntityLivingBase par2EntityLivingBase){
        par1ItemStack.damageItem(1, par2EntityLivingBase);
    }
    

    
    @SideOnly(Side.CLIENT)
    @Override
    public void registerIcons(IconRegister iconRegister)//updateIcons
    {
     itemIcon = iconRegister.registerIcon("NC:StaffODarkness"); 
     }
    

    

} 

 

package invizzble.mods.nc.events;

import java.net.URL;

import invizzble.mods.nc.NM;
import invizzble.mods.nc.lib.References;
import net.minecraftforge.client.event.sound.SoundLoadEvent;
import net.minecraftforge.event.ForgeSubscribe;

public class SoundRegistering {
    @ForgeSubscribe
    public void onSound(SoundLoadEvent event)
    {
        try
        {
             String [] soundFiles = {
                     "StaffODarkness.wav"
                     };
             for (int i = 0; i < soundFiles.length; i++){
                 event.manager.soundPoolSounds.addSound(soundFiles[i]);
                 System.err.println("NC:Sounds Registered");
             }
       
        }
        catch (Exception e)
        {
            System.err.println("NightmareCraft: Failed to register one or more sounds.");
        }
    }
}

 

package invizzble.mods.nc;

import invizzble.mods.nc.biomes.ModBiomes;
import invizzble.mods.nc.blocks.ModBlocks;
import invizzble.mods.nc.configuration.ConfigurationHandler;
import invizzble.mods.nc.configuration.ServerProxy;
import invizzble.mods.nc.configuration.registers.DimensionRegister;
import invizzble.mods.nc.configuration.registers.EventManager;
import invizzble.mods.nc.configuration.registers.LanguageRegistryBlocks;
import invizzble.mods.nc.configuration.registers.LanguageRegistryCreativetab;
import invizzble.mods.nc.configuration.registers.LanguageRegistryItem;
import invizzble.mods.nc.configuration.registers.LanguageRegistryTools;
import invizzble.mods.nc.core.handlers.FuelHandlerNightmareCraft;
import invizzble.mods.nc.creativetab.CreativeTab;
import invizzble.mods.nc.events.SoundRegistering;
import invizzble.mods.nc.items.ModItems;
import invizzble.mods.nc.items.ModTools;
import invizzble.mods.nc.lib.References;
import invizzble.mods.nc.recipes.ShapedRecipes;
import invizzble.mods.nc.recipes.ShapelessRecipes;

import java.io.File;

import net.minecraft.creativetab.CreativeTabs;
import net.minecraftforge.common.MinecraftForge;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.Mod.Init;
import cpw.mods.fml.common.Mod.PostInit;
import cpw.mods.fml.common.Mod.PreInit;
import cpw.mods.fml.common.SidedProxy;
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=References.MOD_ID, name=References.MOD_NAME, version= References.VERSION)
@NetworkMod(clientSideRequired=true, serverSideRequired=false) 


public class NM {
    
    @SidedProxy(clientSide= "invizzble.mods.nc.configuration.ClientProxy", serverSide= "invizzble.mods.nc.configuration.ServerProxy")
    public static ServerProxy proxy;
    
    
    //creativetab
    public static CreativeTabs tabsNightmareCrafts= new CreativeTab(CreativeTabs.getNextID(), References.MOD_ID);
    
    @PreInit
    public void preInit (FMLPreInitializationEvent event){
        // Initialize the configuration
        ConfigurationHandler.init(new File(event.getModConfigurationDirectory().getAbsolutePath()+File.separator + References.CHANNEL_NAME + References.MOD_ID + ".cfg"));    
        
        //initialize the ModBlocks
        ModBlocks.init();
        
        //initialize the Mod Items
        ModItems.init();
        
        //registers modtools
        ModTools.init();
        
        //registers sound
        if(FMLCommonHandler.instance().getSide().isClient())
        {
         MinecraftForge.EVENT_BUS.register(new SoundRegistering());
        }

    }
    
    @Init
    public void Init(FMLInitializationEvent event){
        
        //Registers names of blocks
       
        LanguageRegistryBlocks.init();
        
       // Registers the names of the Items
        
       LanguageRegistryItem.init();
       
       //fixes the creativetab name bug
       LanguageRegistryCreativetab.init();
       
       //registers the Shapeless Recipes
       ShapelessRecipes.init();
       
       //registers Shaped Recipes
       ShapedRecipes.init();
       
       //registers FuelHandler
       GameRegistry.registerFuelHandler(new FuelHandlerNightmareCraft());
       
       //register CraftingHandler
       //GameRegistry.registerCraftingHandler(new CraftingHandlerNightmareCraft());
       
       //registers events
       EventManager.init();

       //registers tool Language
       LanguageRegistryTools.init();
       
       //registers dimensions
       DimensionRegister.init();
       
       //registers bioemes
       ModBiomes.init();
       
       //registers the server proxy
       proxy.registerRenderThings();
       
       
       
    }
    

    @PostInit
    public void PostInit(FMLPostInitializationEvent event){
        
    }
    
    


}


    


 

help please :(

Link to comment
Share on other sites

Hi.

 

After getting no help from the forums, I returned to look deeper for it myself and finally got it to work. Although I am not completely sure of this solution, it works and also makes sense. So, I am explaining it here to help other people with the same problem like F3RULLO14.

 

First of all, change the place of your sound files from wherever they are to "assets/mod_name/sound" (you need to create that folder). If they are records, I think they should go into "assets/mod_name/records" but I haven't tested this. Think of the sounds as another asset just like textures.

 

Then, turn your old code into this:

event.manager.addSound("mod_name:sound1.ogg");

(put "addStreaming" instead of "addSound" for a record)

 

The only string parameter inside is supposed to be just like an icon/texture file. Minecraft automatically adds the "sound" directory part, so don't write that.

 

After this is done, your sound should be registered. Playing it is done like this:

WorldObject.playSoundAtEntity(EntityPlayerObject, "mod_name:sound1", 1.0F, 1.0F);

 

"playSoundAtEntity" part is just the same example I used in the first post and presumably any other sound playing function should work the same. The important part is "mod_name:sound1". As expected, this also looks like using an icon for an item or a block. Don't use extensions here (.ogg, .wav, ...).

 

I hope this helps.

 

 

Thank you so much man! Thank you! Ive been messing around with it all morning and couldnt figure it out!

Link to comment
Share on other sites

What am I doing wrong? :(

 

event.manager.soundPoolSounds.addSound(soundFiles[i]);

 

Change that line to...

 

event.manager.soundPoolSounds.addSound("nc:"+soundFiles[i]); 

 

 

Also, make sure everywhere you use your mod id, it's in lower-case, it tends to fail otherwise.

Link to comment
Share on other sites

May I also note that, in addition to registering a singular sound using "MOD_ID:soundname.ogg",

it is also possible to use randomized sounds using

event.manager.soundPoolSounds.addSound(MOD_ID+randomSound1);
event.manager.soundPoolSounds.addSound(MOD_ID+randomSound2);
event.manager.soundPoolSounds.addSound(MOD_ID+randomSound3);

where randomSound1, randomSound2, randomSound3, etc. are (different) files in assets/MOD_ID/sound/

and then play them using

playSoundAtEntity(Entity, "mod_name:randomSound", float, float);

which plays one of the above registered number-terminated sounds, at random, each call.

 

Just thought I'd mention it for completeness' sake.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.