Jump to content

[1.16.5] Cancel Portal Sounds


Recommended Posts

Hi all,


I have a custom dimension which is accessed through a custom block. I am using

server_player.changeDimension(server_world, shifterIn);

To change the player dimension when shift-right clicking the block. 


I have my own custom Portal Sounds for entry and exit, but the original Nether Portal sounds are playing over the top. Without resorting to using

PlaySoundEvent event

And cancelling all Portal Sounds, which I don't want to do, how could I stop the original sound from being played?


PlaySoundEvent has a BlockPos, but when playing the Portal Sound, it is always (0, 0, 0), so I cannot differentiate between BlockPos.


I have looked into ServerPlayerEntity and found this:

this.connection.sendPacket(new SPlaySoundEventPacket(1032, BlockPos.ZERO, 0, false));


I have also tried replicating the code contained within

public Entity changeDimension(ServerWorld server, net.minecraftforge.common.util.ITeleporter teleporter) { }


But it fails everytime.


Any help is appreciated!

Link to comment
Share on other sites

4 minutes ago, diesieben07 said:

You could probably check the current dimension when the sound is played and replace it that way.

How would I go about doing that? I cant get an Entity from the SoundEvent, and I'm not entirely sure how to replace / sounds. I can only get the ISound, SoundCategory and the X,Y,Z of the sound Event.

Link to comment
Share on other sites

9 minutes ago, diesieben07 said:

PlaySoundEvent is a client side event, so you can just check Minecraft#world.

Okay thanks. That only solves half of the issue however, as:

Going from Overworld / Nether / End -> Custom Dimension now cancels correctly.


But going from Custom Dimension -> Overworld / Nether / End still plays the sound.

Link to comment
Share on other sites

2 minutes ago, diesieben07 said:

Not sure if there is a good way to do that. You could use WorldEvent.Unload to detect the old dimension unloading on the client and then remember that fact in a static field. However it's not fool proof.

Yeah that is what I was afraid of. I may just have to accept using the nether portal sound for now. I don't think your solution would work on servers with many people, and I cant think of any way to do it personally. Ill have to leave the sound playing one way.

Many thanks for your help!

Link to comment
Share on other sites

1 minute ago, diesieben07 said:

The sound is only played to the player using the portal and the detection/replacement would be purely client-side. I don't think there can be any issues with multiplayer.

The only time this would be an issue is if some other mod plays the 1032 level event as well, in which case you might inadvertently replace it with yours if you don't handle the "just came from my dimension" flag correctly.

Okay. That seems reasonable.


I have thought of an idea, which is to store a Previous Dimension [ResourceLocation] tag into the Players Persisted Data, and change that using PlayerEvent.PlayerChangedDimensionEvent. I can then use this to check when sound events are playing. I'm storing these tags under my MOD_ID so that no other mod can get confused.

Link to comment
Share on other sites

2 minutes ago, diesieben07 said:

That will not work for multiple reasons:

  • PlayerChangedDimensionEvent fires after the sound has been played.
  • PlayerChangedDimensionEvent is a server side event, but the sound is played client side (as a result of a packet).
  • The persisted data is not synced to the client by default.

Okay, that idea is scrapped then. I will have to accept that the standard sound will play when going from Custom -> Vanilla world. Which to be honest is not that bad, I'm not too happy with the Exit sound anyway. Maybe I could ask the Forge devs to see if they can work their magic and allow for custom sounds to be played via theS

SPlaySoundEffectPacket(SoundEvent event, SoundCategory category, double x, double y, double x, float volume, float pitch)

Instead of hard-coding the sound.

Maybe that's a longshot but who knows.

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.

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.

  • Create New...

Important Information

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