Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Featured Replies

Posted

I want to replace vanilla sounds with custom ones in certain circumstances in my mod.

 

The way to do it appears to be to use PlaySoundEvent & return a new sound.

I have set up a custom SoundEvent successfully, but need help with PlaySoundEvent .

My SoundEvent is registered like so:

public class ModSounds {

    public static SoundEvent sword2Use = new SoundEvent(new ResourceLocation(testmod.modId + ":" + "sword2Use")).setRegistryName("sword2Use");   
    public static void register(IForgeRegistry<SoundEvent> registry) {
        registry.registerAll(               
                sword2Use
                );

        }
}

 

My code so far for the PlaySoundEvent Listener:

public class SoundPlays {
	
		@SubscribeEvent(priority=EventPriority.NORMAL, receiveCanceled=true)
		@SideOnly(Side.CLIENT)
		public void soundPlay(PlaySoundEvent event) {			
			EntityPlayer player = Minecraft.getMinecraft().player;
			if (player != null 
			&& player.getHeldItemMainhand().getItem() == ModItems.sword2) 				
			{				
				event.setResultSound(??????);									
			}			
	    }
}

I'm stuck with what to return in ??????, as I don't know how to return a SoundEvent as ISound & can't find any documentation or examples to work off.

 

Any help appreciate.

 

 

Edited by kingdadrules

  • Author

Thanks for your advice diesieben07, it definately helped with sorting it & the type hierarchy view will come in very handy.

 

I created my own class implementing ISound, including my custom ResourceLocation & returned this:

MyISound sound =  new MyISound();		
event.setResultSound(sound);				
				

It works fine now. I'm slowly learning!

 

I will look into using the correct method of creating registry entries. I copied the static initializer method from example code at the start of my modding journey & so have used it for registering everything since.

 

 

 

 

 

  • Author

I've just come back to this because I afree & realise the way to go is not to write my own implementation.

 

I've looked & looked but I cannot see how to do what I need to do without doing this.

 

I want to be able to return my own custom sound  & also to make some sounds non-fading, which I do in a custom implementation by  returning AttenuationType.LINEAR  from getAttenuationType().

 

Any further help would be welcome & hopefully assist in my minecraft & java learning path.

 

 

 

 

  • Author

That was the pointer I needed, I can't understand why I didn't pick this up from my trawling online.

 

ResourceLocation loc = new ResourceLocation(testmod.modId + ":" + "sword2Use");
PositionedSoundRecord MyPSR = new PositionedSoundRecord(loc, SoundCategory.PLAYERS, 1.0f, 1.0f, false, 0, AttenuationType.LINEAR, 
		player.getPosition().getX(), player.getPosition().getY(), player.getPosition().getZ());

event.setResultSound(MyPSR);

 

Has done the trick.

 

Thanks once again for your help & patience.

 

 

 

  • 2 years later...

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...

Important Information

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.