Hello, I'm trying to make an improved playsound command. I got the packet etc working, only problem is that @a works only when there is one player in LAn or in singleplayer (couldn't test with proper server, but I imagine it's the same). When I try to use the command with @a when tehre are 2 players in LAN, it says "That player cannot be foundr"
The only thing different form /playsound with player seems that playsound uses entityplayermp.playerNetServerHandler.sendPacket while I use network.sendTo
Code:
In command class:
public void processCommand(ICommandSender player, String[] input)
{
if (input.length < 1)
{
throw new WrongUsageException(this.getCommandUsage(player), new Object[0]);
}
else
{
String sound = input[0];
String mode = "normal";
int x = player.getPlayerCoordinates().posX;
int y = player.getPlayerCoordinates().posY;
int z = player.getPlayerCoordinates().posZ;
float vol = 1;
float pitch = 1;
EntityPlayerMP playerarg = getPlayer(player, "@a");
World world = player.getEntityWorld();
if (input.length > 1) {
mode = input[1];
}
if (input.length > 2) {
playerarg = getPlayer(player, input[2]);
}
if (input.length > 5) {
x = MathHelper.floor_double(func_110666_a(player, (double)x, input[3]));
y = MathHelper.floor_double(func_110666_a(player, (double)y, input[4]));
z = MathHelper.floor_double(func_110666_a(player, (double)z, input[5]));
}
if (input.length > 6) {
vol = Float.parseFloat(input[6]);
}
if (input.length > 7) {
pitch = Float.parseFloat(input[7]);
}
Main.network.sendTo(new SoundPacket(sound, mode, x, y, z, vol, pitch), playerarg);
System.out.println("Played \'"+sound+"\' to \'"+playerarg.getDisplayName()+"\' at "+x+" "+y+" "+z);
}
In packet handler:
@Override
public IMessage onMessage(SoundPacket m, MessageContext ctx) {
System.out.println(m.sound+";"+m.mode+";"+m.x+";"+m.y+";"+m.z+";"+m.vol+";"+m.pitch);
ChunkCoordinates chunkcoordinates = new ChunkCoordinates(m.x, m.y, m.z);
ISound isound = mapSoundPositions.get(chunkcoordinates);
System.out.println("isound get");
if (isound != null) {
System.out.println("Sound already playing at " + m.x + "/" + m.y + "/" + m.z + "; stopping sound");
Minecraft.getMinecraft().getSoundHandler().stopSound(isound);
mapSoundPositions.remove(chunkcoordinates);
}
if (m.mode.equals("normal")) {
System.out.println("Playing sound at " + m.x + "/" + m.y + "/" + m.z + ": " + m.sound);
ResourceLocation resource = new ResourceLocation(m.sound);
PositionedSoundRecord psr = new PositionedSoundRecord(resource, m.vol, m.pitch, m.x, m.y, m.z);
mapSoundPositions.put(chunkcoordinates, psr);
Minecraft.getMinecraft().getSoundHandler().playSound(psr);
}
return null;
}