superckl Posted December 2, 2013 Posted December 2, 2013 I'm having a weird problem. I'm trying to get my mod to play a sound file (update.wav), but I can't seem to get the SoundLoadEvent to fire. I know my load method is being called because the functionality from the ConnectionHandler and TickHandler all work fine, but the logs from my EventHandler are never called. I'm using forge build 737 for 1.5.2. Main mod class: package me.superckl.VoltzationClient; import net.minecraftforge.common.MinecraftForge; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.Init; import cpw.mods.fml.common.Mod.Instance; 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.FMLPreInitializationEvent; import cpw.mods.fml.common.network.NetworkMod; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.TickRegistry; import cpw.mods.fml.relauncher.Side; @Mod(modid = "VoltzationClient", name = "Voltzation Client", version = "1.0", dependencies = "required-after:VoltzationCore") @NetworkMod(clientSideRequired = true, serverSideRequired = false, channels = {"VoltzMoney", "VoltzMRequest"}, packetHandler = PacketHandler.class) public class VoltzationClient { @Instance(value = "VoltzationClient") public static VoltzationClient instance; @SidedProxy(clientSide = "me.superckl.VoltzationClient.ClientProxy", serverSide = "me.superckl.VoltzationClient.CommonProxy") public static CommonProxy proxy; public static final String logFormat = "[VoltzationClient] %s"; @PreInit public void preInit(final FMLPreInitializationEvent e) { //Config.initialize(e.getSuggestedConfigurationFile()); } @Init public void load(final FMLInitializationEvent e) { MinecraftForge.EVENT_BUS.register(new EventHandler()); NetworkRegistry.instance().registerConnectionHandler(new ConnectionHandler()); TickRegistry.registerTickHandler(new TickHandler(), Side.CLIENT); } } EventHandler: package me.superckl.VoltzationClient; import java.io.File; import cpw.mods.fml.common.FMLLog; import net.minecraftforge.client.event.sound.SoundLoadEvent; import net.minecraftforge.event.ForgeSubscribe; public class EventHandler { @ForgeSubscribe public void onSoundLoad(final SoundLoadEvent e){ FMLLog.info(VoltzationClient.logFormat, "Here it comes!"); FMLLog.info(VoltzationClient.logFormat, VoltzationClient.class.getResource("/mods/voltzationclient/sounds/update.wav").getFile()); e.manager.addSound("money/update.wav", new File(VoltzationClient.class.getResource("/mods/voltzationclient/sounds/update.wav").getFile())); } } Any ideas? Quote http://i.imgur.com/nVI9Y.png[/img]
Xenocider Posted December 2, 2013 Posted December 2, 2013 Try registering the EventHandler during preInit @PreInit public void preInit(final FMLPreInitializationEvent e) { //Config.initialize(e.getSuggestedConfigurationFile()); MinecraftForge.EVENT_BUS.register(new EventHandler()); } Quote
superckl Posted December 2, 2013 Author Posted December 2, 2013 Thanks, that fixed it. But, I have another problem now. My sound isn't playing. My sound file, update.wav, is located in VoltzationClient.zip/mods/voltzationclient/sounds/update.wav. I use this to play the sound: Minecraft.getMinecraft().theWorld.playSoundAtEntity(Minecraft.getMinecraft().thePlayer, "money.update", 20F, 1F); Know what's wrong? The getResource call is pointing to: file:/C:/Users/superckl/AppData/Roaming/.technic/modpacks/temporary/mods/VoltzationClient.zip!/mods/voltzationclient/sounds/update.wav I'm using a custom mod pack to test the mod, if you were wondering. Quote http://i.imgur.com/nVI9Y.png[/img]
Xenocider Posted December 3, 2013 Posted December 3, 2013 Thats not how the string works. "money.update" would make Minecraft look in assets/Minecraft/sound/money for the update sound file. Make an assets/[mod_id]/sound/money package and put in your update sound file in there. Replace [mod_id] with the mod id of your mod and change "money.update" to "[mod_id]:money.update". Minecraft.getMinecraft().theWorld.playSoundAtEntity(Minecraft.getMinecraft().thePlayer, "[mod_id]:money.update", 20F, 1F); You will also need to change e.manager.addSound("money/update.wav", new File(VoltzationClient.class.getResource("/mods/voltzationclient/sounds/update.wav").getFile())); to e.manager.addSound("[mod_id]:money/update.ogg"); Quote
superckl Posted December 3, 2013 Author Posted December 3, 2013 Does this apply for 1.5.2? If I recall correctly, the assets folder wasn't used until 1.6. Quote http://i.imgur.com/nVI9Y.png[/img]
Xenocider Posted December 3, 2013 Posted December 3, 2013 You may be right about that. I was assuming you were making the mod for 1.6. If that is the case then I might not be able to help. I'll try to see how it's done in 1.5 but you are probably better off if someone more comfortable with 1.5 could help. Quote
superckl Posted December 3, 2013 Author Posted December 3, 2013 I've looked around a lot and haven't found anything useful. No errors are thrown, my sound just isn't played. Quote http://i.imgur.com/nVI9Y.png[/img]
MineMaarten Posted December 3, 2013 Posted December 3, 2013 In 1.5 the folder was called 'mods' instead of 'assets', but the principle mentioned by Xenocider is the same. I'm not 100% this was also being applied for sounds by then, but you can at least try it. Quote Author of PneumaticCraft, MineChess, Minesweeper Mod and Sokoban Mod. Visit www.minemaarten.com to take a look at them.
superckl Posted December 3, 2013 Author Posted December 3, 2013 As far as I know, there is no method to add a sound that takes only a String. It requires a String and a File. I've tried copying what other, more established, mods do, but none of it is working. Quote http://i.imgur.com/nVI9Y.png[/img]
MineMaarten Posted December 3, 2013 Posted December 3, 2013 If I look back at how I've done it, it looks the same as how Xenocider described. The difference is that I'm using .ogg files instead of .wav which caused problems for me as well. So try converting the sound file to .ogg and retrying. There is a String only method, look for example at an older version of my Minesweeper Mod: https://github.com/MineMaarten/MinesweeperMod/blob/d9fddc885f6ae5cba9342fd37abe7bd35e35e6be/src/minesweeperMod/client/MinesweeperSoundHandler.java https://github.com/MineMaarten/MinesweeperMod/blob/d9fddc885f6ae5cba9342fd37abe7bd35e35e6be/src/minesweeperMod/common/ItemMineDetector.java Quote Author of PneumaticCraft, MineChess, Minesweeper Mod and Sokoban Mod. Visit www.minemaarten.com to take a look at them.
superckl Posted December 3, 2013 Author Posted December 3, 2013 I'm looking right now, and there definitely isn't a String only method for addSound. That code must be written for 1.6. I tried using the String, URL version, and I converted to .ogg, but it's still not playing. Quote http://i.imgur.com/nVI9Y.png[/img]
superckl Posted December 4, 2013 Author Posted December 4, 2013 I finally got it. I changed the registration to: e.manager.soundPoolSounds.addSound("mods/voltzationcore/sound/money.ogg", VoltzationCore.class.getResource("/mods/voltzationcore/sound/money.ogg")); And I use this to play it: Minecraft.getMinecraft().sndManager.playSoundFX("mods.voltzationcore.sound.money", 1.0F, 1.0F); Thanks for all the help guys. Quote http://i.imgur.com/nVI9Y.png[/img]
Recommended Posts
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.