Jump to content

Recommended Posts

Posted

How does one create a sound on the client only?

 

All playSound*() methods I've come across puts the sound in the World. I'm a bit confused as to how the GUI limits the sound to the client only as it also calls the sndManager.playSoundFX(...). Is there a flag somewhere that the SoundManager or something lower down look at to avoid the sound being broadcasted?

I'm back playing!

Posted

Hi

Are you sure that SoundManager.playSoundFX tells the Server to play a sound to other clients?  I don't see any evidence of that in the code, there are no Packet or NetworkHandler imports in the class, and I don't recall seeing any Client->Server packets related to sound generation.

http://greyminecraftcoder.blogspot.com.au/2013/10/packets-from-client-to-server.html

 

-TGG

Hi

Definitely happens when testing it with a server and two separate clients on my pc. Can it have something to do with running two clients and a server on the same machine? I can't really see that being the problem as when I go into the UI and click buttons those clicks doesn't end up on the other client. And those clicks also use this.mc.sndManager.playSoundFX(...); method. Will mock up a small demo when time allows isolating the core code.

 

On a side note the sound generated with playSoundFX() does not have the center balanced as in the code comment. The sound is definitely off-center and also doesn't rotate with my character. This is what made me suspicious about the sound being in the 'world'. This might be completely unrelated but I would have expected a local sound being completely center balanced.

 

 

I'm back playing!

Posted

Hi

 

Can it have something to do with running two clients and a server on the same machine?

Maybe I've misunderstood what you said here - how can you tell which client is making the sound if you only have one set of speakers?  I'd suggest you use two separate clients (on separate PCs) just to make sure there isn't something funny going on.  Also, with two PCs you can insert a breakpoint on one and then step through the code to see which method makes the sound play on the other client.

 

Perplexing...

 

-TGG

 

 

 

 

 

Posted

Hi

 

Can it have something to do with running two clients and a server on the same machine?

Maybe I've misunderstood what you said here - how can you tell which client is making the sound if you only have one set of speakers?  I'd suggest you use two separate clients (on separate PCs) just to make sure there isn't something funny going on.  Also, with two PCs you can insert a breakpoint on one and then step through the code to see which method makes the sound play on the other client.

 

Perplexing...

 

-TGG

Hi

 

I have two test users, foo and bar, really --username foo and bar :). So I just get foo to make noises and drop his volume to zero and get bar to stand next to him. Bar is still able to hear foo's sound effects. I'll still test it on two separate PCs after work, maybe there is something strange going on running all those instances on the same machine.

I'm back playing!

Posted

Hi,

 

Ok so two separate PC have the same effect. Here's an ugly little piece of code that have the same behavior. Maybe I just read the wrong tutorial!

 

@NetworkMod(clientSideRequired = true, serverSideRequired = true)
@Mod(modid = "Scratchpad", name = "Scratchpad", version = "0.1 Nothing")
public class Scratchpad
{
public int _tick;

@Instance("Scratchpad")
public static Scratchpad instance;

@EventHandler
public void load(FMLInitializationEvent event)
{
	MinecraftForge.EVENT_BUS.register(new Scratchpad());
}

public Scratchpad()
{

}

@ForgeSubscribe
public void onLivingUpdateEvent(LivingUpdateEvent event)
{
	_tick++;
	if (_tick % 100 != 0) return;

	if (event.entityLiving instanceof EntityPlayer)
	{
		EntityPlayer player = (EntityPlayer) event.entityLiving;
		if (!player.worldObj.isRemote) return;
		if (!player.username.equalsIgnoreCase("Foo")) return; 

		Minecraft.getMinecraft().sndManager.playSoundFX("mob.sheep.say", 1.0f, 1.0F);
	}
}
}

I'm back playing!

Posted

Wow that is very strange, that stub is very simple.

 

I might give it a go on my PCs here.

 

Does it play on both clients regardless of which client you originate the sound from?  (i.e. the one with the integrated server, and the one without)?

 

Perhaps you could try putting a breakpoint on one of the clients just before the sound (pause the client thread only, not server thread), then step into the vanilla code line by line and see when the other client goes baa.  Might give a clue.

 

-TGG

 

 

Posted

Wow that is very strange, that stub is very simple.

 

I might give it a go on my PCs here.

 

Does it play on both clients regardless of which client you originate the sound from?  (i.e. the one with the integrated server, and the one without)?

 

Perhaps you could try putting a breakpoint on one of the clients just before the sound (pause the client thread only, not server thread), then step into the vanilla code line by line and see when the other client goes baa.  Might give a clue.

 

-TGG

 

Hi TGG,

Well, that was really 'learning the hard way' for me. The onLivingUpdateEvent() fires on both clients for both Foo & Bar. All sorted now, thanks!

 

 

I'm back playing!

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

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

Announcements



×
×
  • Create New...

Important Information

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