Отключение звука

14
0
Есть такая тема Minecraft.getMinecraft().sndManager.playSoundFX("название звука", 1.0F, 1.0F); это метод включает звук а есть ли метод который отключает звук по названию и его можно достать из класса Minecraft ??Весь SoundManager облазал есть конечно метод stopAllSounds но он не работает чет(
Помогите плызь))0
 
(я не шарю в java) 
а что нельзя в методе, который включает звук - установить его громкость на 0 ? или он только включает ?
 
Если сделать так как ты хочешь то он просто запустит еще один звук без громкости то есть он запускает новый звук с характеристиками указанными тут ("название звука", 1.0F, 1.0F)
 
Удали метод и все :)
Код:
public class Transformer implements IClassTransformer {
    @Override
    public byte[] transform(String s, String s2, byte[] bytes) {
        //Если класс наш - делаем с ним все что надо, а если нет - нафиг его.
        //Type.getInternalName дает нам путь к классу, в скомпилированной среде. То есть в эклипсе прокатит net.minecraft.item.ItemSword, а в скомпилированном только net/minecraft/item/ItemSword.
        if (s.equals(Type.getInternalName(ItemSword.class)) || s2.equals(Type.getInternalName(ItemSword.class)) || s.equals("net.minecraft.item.ItemSword") || s2.equals("net.minecraft.item.ItemSword")) {
            //Создаем считыватель классов из байтов.
            ClassReader reader = new ClassReader(bytes);
            //Создаем, так сказать 'класс'.
            ClassNode clazz = new ClassNode();
            //Реадер передает этому классу инфу у том что он считал. То есть сейчас clazz это класс net.minecraft.item.ItemSword
            reader.accept(clazz, 0);

            //Тут мы и будем мутить то что нам надо.
            //Перебераем методы из класса.
            for(MethodNode method : clazz.methods) {
                //Если имя метода addInformation, то делаем то что нам надо.
                //Тут еще должно быть егюалс на обфуцированное имя метода, но мне лень искать обфуцированное имя метода addInformation
                if(method.name.equals("addInformation")) {
                    //Удалем метод из класса.
                    clazz.methods.remove(method);
                }
            }

            //Создаем того кто пишет наш класс обратно в байты и не даем ему никаких флагов.
            ClassWriter writer = new ClassWriter(0);
            //Говорим ему трансформировать наш класс назад в байты.
            clazz.accept(writer);
            //Возвращаем наши байты.
            return writer.toByteArray();
            
        } else {
            return bytes;
        }
    }
}
 
И получи на выходе нерабочее говно вместо майнкрафта, которое будет крашиться при воспроизведении любого звука.
Если уж делать АСМом, то юзай хуклиб глуми.
1) Есть такой крутой эвент: PlaySoundEvent17. В нём есть публичное поле:
Код:
public ISound result

Меняешь его на нулл, звук не воспроизводится.
2) Если хочешь ОСТАНОВИТЬ звук во время его проигрывания, придётся шаманить глубже:
Ловишь событие
Код:
PlaySoundSourceEvent
Из него забираешь uuid.
Дальше работа с классом SoundManager:
По взятому uuid находишь объект ISound из хешмапы
Код:
playingSounds
Дальше по полученному объекту (который является ключом) убираешь ряд из хештаблицы
Код:
playingSoundPoolEntries
По идее должно прокатить, хотя может придётся ещё что-то делать, скорее всего.
UPD:
Чтобы остановить звук:

Код:
soundManager.sndSystem.stop(soundName); //uuid, вроде
 
Oldestkon написал(а):
И получи на выходе нерабочее говно вместо майнкрафта, которое будет крашиться при воспроизведении любого звука.
Если уж делать АСМом, то юзай хуклиб глуми.
1) Есть такой крутой эвент: PlaySoundEvent17. В нём есть публичное поле:
Код:
public ISound result

Меняешь его на нулл, звук не воспроизводится.
2) Если хочешь ОСТАНОВИТЬ звук во время его проигрывания, придётся шаманить глубже:
Ловишь событие
Код:
PlaySoundSourceEvent
Из него забираешь uuid.
Дальше работа с классом SoundManager:
По взятому uuid находишь объект ISound из хешмапы
Код:
playingSounds
Дальше по полученному объекту (который является ключом) убираешь ряд из хештаблицы
Код:
playingSoundPoolEntries
По идее должно прокатить, хотя может придётся ещё что-то делать, скорее всего.
UPD:
Чтобы остановить звук:

Код:
soundManager.sndSystem.stop(soundName); //uuid, вроде
Щс попробуем
[merge_posts_bbcode]Добавлено: 10.09.2015 17:34:30[/merge_posts_bbcode]

В евенте "PlaySoundSourceEvent" есть переменная "name" это и есть "uuid" или я не так понял??
 
Назад
Сверху