Не проигрываются звуки для других игроков

Статус
В этой теме нельзя размещать новые ответы.
Версия Minecraft
1.12.2
API
Forge
12
1
0
Мне нужно сделать так, чтобы при нажатии клавиши игрок воспроизводил звук. Нажатие клавиши я уже сделал и звук запилил. При нажатии клавиши звук спокойно проигрывается, но только для того, кто нажал клавишу(т.е. другие игроки вокруг не слышат этот звук). Нужно чтобы и другие игроки слышали этот звук. Как я могу решить эту проблему? Заранее спасибо.
Java:
public class Events {
    @SubscribeEvent
    public void onPlayerUpdate(LivingUpdateEvent event) {
        if (event.getEntityLiving() instanceof EntityPlayer) {
            EntityPlayer player = (EntityPlayer) event.getEntityLiving();                         
                if(KeyBindings.MY_KEY_FIRST.isPressed()) {
                    player.getEntityWorld().playSound(player.posX, player.posY, player.posZ, Sounds.test, SoundCategory.PLAYERS, 10F, 1F, false);
                }
        }
    }
}
 

will0376

Токсичная личность
2,059
55
573
12
1
0
@will0376 Я не совсем понимаю как отправлять пакеты на сервер
Добавил эту строчку:
player.getEntityWorld().sendPacketToServer(new SPacketSoundEffect(Sounds.test,SoundCategory.PLAYERS, player.posX, player.posY, player.posZ, 10F, 1F));
Вот полный код:
Java:
public class Events {
    @SubscribeEvent
    public void onPlayerUpdate(LivingUpdateEvent event) {
        if (event.getEntityLiving() instanceof EntityPlayer) {
            EntityPlayer player = (EntityPlayer) event.getEntityLiving();                         
                if(KeyBindings.MY_KEY_FIRST.isPressed()) {
                    player.getEntityWorld().sendPacketToServer(new SPacketSoundEffect(Sounds.test,SoundCategory.PLAYERS, player.posX, player.posY, player.posZ, 10F, 1F));
                    player.getEntityWorld().playSound(player.posX, player.posY, player.posZ, Sounds.test, SoundCategory.PLAYERS, 10F, 1F, false);
                }
        }
    }
}
Но теперь когда нажимаю на кнопку, майнкрафт виснет намертво.
Как правильно отправить пакет на сервер?
 

will0376

Токсичная личность
2,059
55
573
Как правильно отправить пакет на сервер?
1. Делаешь свой пакет(см форум.)
2. Убери вызов звука в момент нажатия кнопки. достаточно отправить пакет и обработать его.
 

sk9zist :l

Исправился
981
18
157
Ууу, щас Агровэйн придет, не знаю что с вами сделает..
А вы знали, что эвент LivingUpdateEvent вызывается и на сервере?
Поэтому достаточно просто
используй Entity#playSoundAtEntity
(Первый аргумент там, должен быть игрок)
 

tox1cozZ

aka Agravaine
8,454
598
2,890
Ууу, щас Агровэйн придет, не знаю что с вами сделает..
Ага, с тобой...
А вы знали, что эвент LivingUpdateEvent вызывается и на сервере?
Поэтому достаточно просто
используй Entity#playSoundAtEntity
И клавиатура есть на сервере? И сервер знает что какой-то там скязист у себя в мухосранске кнопочку тыкнул?
 

sk9zist :l

Исправился
981
18
157

jopi

Попрошайка
1,421
30
260
@will0376 Я не совсем понимаю как отправлять пакеты на сервер
Добавил эту строчку:
player.getEntityWorld().sendPacketToServer(new SPacketSoundEffect(Sounds.test,SoundCategory.PLAYERS, player.posX, player.posY, player.posZ, 10F, 1F));
Вот полный код:
Java:
public class Events {
    @SubscribeEvent
    public void onPlayerUpdate(LivingUpdateEvent event) {
        if (event.getEntityLiving() instanceof EntityPlayer) {
            EntityPlayer player = (EntityPlayer) event.getEntityLiving();                        
                if(KeyBindings.MY_KEY_FIRST.isPressed()) {
                    player.getEntityWorld().sendPacketToServer(new SPacketSoundEffect(Sounds.test,SoundCategory.PLAYERS, player.posX, player.posY, player.posZ, 10F, 1F));
                    player.getEntityWorld().playSound(player.posX, player.posY, player.posZ, Sounds.test, SoundCategory.PLAYERS, 10F, 1F, false);
                }
        }
    }
}
Но теперь когда нажимаю на кнопку, майнкрафт виснет намертво.
Как правильно отправить пакет на сервер?
во первых, если мне не изменяет память то на 1.7.10 уже был эвент для клавиатуры(т.е. по нажатию кнопки он проигрывался), а значит бери его а не универсальный метод обновления существа(потому-что у тебя он проигрывается на обновлении каждого игрока, а значит это в принципе костыль который может тупо не работать),
1. меняешь эвент
2. делаешь пакетную систему
3. по нажатии кнопки отправляешь пакет на сервер то что ты тыкнул кнопку проигрывания музыки
4. рассылаешь пакет игрокам
5. при получении пакета на клиенте - проигрываешь музыку
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху