Posted July 9, 201312 yr 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.
July 9, 201312 yr Author 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.
July 9, 201312 yr 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! If you guys dont get it.. then well ya.. try harder...
July 9, 201312 yr Author 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! Thanks xerca, that worked for me! You are welcome, I'm really glad it is helping others.
July 9, 201312 yr 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 http://i.imgur.com/sKDS7bj.png[/img] http://www.minecraftforum.net/topic/1877292-15x-forge-smp-nightmarecraft-alpha-10-it-started-with-a-dream-new/
July 9, 201312 yr 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!
July 9, 201312 yr 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.
July 10, 201312 yr also @Init, @PreInit etc. are replaced by @EventHandler for all three places inn the main mod file. If you guys dont get it.. then well ya.. try harder...
July 11, 201312 yr What if I want a block to play a sound? I've been trying to update to 1.6.2 as well and my blocks are no longer making sounds. I've seen several audio fixes, but they all seem to use playSoundAtEntity.
July 11, 201312 yr There are other PlaySound(..something..) check them out. Some of them work for what ya need. gogo check it out If you guys dont get it.. then well ya.. try harder...
July 14, 201312 yr 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.
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.