Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

(SOLVED)[1.12.2] Help with PlaySoundEvent


Recommended Posts

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) {



My code so far for the PlaySoundEvent Listener:

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

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
Link to comment
Share on other sites

  • Do not create registry entries in static initializers.
  • Do not use @SideOnly.
  • 7 hours ago, kingdadrules said:

    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.

    Look at the implementations of ISound (your IDE has a "type hierarchy" command). Then see how they are used in vanilla.
Link to comment
Share on other sites

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();		

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.






Link to comment
Share on other sites

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.





Link to comment
Share on other sites

2 hours ago, kingdadrules said:

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

Look at PositionedSoundRecord (the class most often used for sounds, no, not only for records, the name is misleading).

Link to comment
Share on other sites

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());



Has done the trick.


Thanks once again for your help & patience.




Link to comment
Share on other sites

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

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.


  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • MC version :1.16.5 Forge version :36.2.20 I added "MeleeAttackGoal" in my entity,and then I can‘t summon this entity.what's wrong in my code? //the entity's code package net.fsmc.classmates.animals; import net.minecraft.entity.AgeableEntity; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.ai.attributes.Attributes; import net.minecraft.entity.ai.goal.*; import net.minecraft.entity.merchant.villager.AbstractVillagerEntity; import net.minecraft.entity.monster.ZombifiedPiglinEntity; import net.minecraft.entity.passive.AnimalEntity; import net.minecraft.entity.passive.IronGolemEntity; import net.minecraft.entity.passive.TurtleEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; import javax.annotation.Nullable; public class n7Yjy extends AnimalEntity  {          public n7Yjy(EntityType<? extends AnimalEntity> type, World worldIn) {         super(type, worldIn);     }          public static AttributeModifierMap.@NotNull MutableAttribute registerAttributes() {          return MobEntity.func_233666_p_()                  .createMutableAttribute(Attributes.MOVEMENT_SPEED, 0.23000000417232513D)                  .createMutableAttribute(Attributes.ATTACK_DAMAGE, 7.0D)                  .createMutableAttribute(Attributes.FOLLOW_RANGE, 40.0D)                  .createMutableAttribute(Attributes.MAX_HEALTH, 30.0D);      }          @Override     protected void registerGoals(){         this.goalSelector.addGoal(2, new RandomWalkingGoal(this , 1D,1));         this.goalSelector.addGoal(3, new LookAtGoal(this,PlayerEntity.class,8.0f));         this.goalSelector.addGoal(3,new MeleeAttackGoal(this,0.3,true));         this.Target();     }     public void Target(){         this.targetSelector.addGoal(2, (new HurtByTargetGoal(this,new Class[0])).setCallsForHelp(new Class[]{ZombifiedPiglinEntity.class}));         this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, PlayerEntity.class, true));         this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, AbstractVillagerEntity.class, false));         this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, IronGolemEntity.class, true));         this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, TurtleEntity.class, 10, true, false, TurtleEntity.TARGET_DRY_BABY));     }     @Nullable     @Override     public AgeableEntity createChild(ServerWorld serverWorld, AgeableEntity ageableEntity) {         return null;     } }
    • I am trying to set up my first project and it says this: Unsupported Java.  Your build is currently configured to use Java 16.0.1 and Gradle 6.8.1. Possible solution:  - Use Java 15 as Gradle JVM: Open Gradle settings   - Upgrade Gradle wrapper to 7.0 version and re-import the project I know I am using Java 15 already because in the gradle settings it says gradle JVM: 15 version 15.0.2 So my question is how do I upgrade the gradle wrapper? Sorry if this is a noobie question, trying to set up my first project.  
    • Yes, I don't think you want this as a mod jar. I am not 100% on the details, but ModLauncher implements a multi-module-layer system and you need to load into a specific layer.
    • 1.17 is no longer a supported version. Currently supported versions are 1.16.5 (LTS) and 1.18.1 (latest).
    • User was banned for piracy. Buy the game.
  • Topics

  • Who's Online (See full list)

  • Create New...

Important Information

By using this site, you agree to our Privacy Policy.