1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Корректный звук для блока при ломании.

Тема в разделе "Разработка плагинов для новичков", создана пользователем Lisenochek, 13 дек 2017.

Статус темы:
Закрыта.
  1. Автор темы
    Lisenochek

    Lisenochek Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Всем привет. Как достать корректный звук для блока, который сломали. Раньше, до перехода на 1.12 использовал в NMS классе переменную blockStep, а оттуда доставал метод getBreakSound, а сейчас все кардинально изменили и как сделать уже не знаю. Помогите мне пожалуйста.
     
  2. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Зачем тебе этот звук?

    Я думаю, можно вытащить код из метода Block.breakNaturally(), он вроде звук тоже воспроизводит
     
  3. Автор темы
    Lisenochek

    Lisenochek Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    В коде нету, уж сам посмотрел.
     
  4. xDark

    xDark Активный участник Пользователь

    Баллы:
    96
    ... потому что там и юзаеются playSound
     
  5. Автор темы
    Lisenochek

    Lisenochek Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Это понятно то теперь, но как мне самому определить корректный звук блока?
     
  6. Dan_Ender

    Dan_Ender Активный участник Пользователь

    Баллы:
    76
    Код:
    Sound.valueOf("BLOCK_"+e.getBlock().getType()+"_BREAK");
     
  7. AtomicScience

    AtomicScience Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    AtomicScience
    Хороший код. Работать он, конечно, не будет
     
  8. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Нет, ну почему не будет? Будет. Вот только так себе решение...
    [​IMG]
     
  9. Автор темы
    Lisenochek

    Lisenochek Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Тройной фейспалм.
     
  10. Dan_Ender

    Dan_Ender Активный участник Пользователь

    Баллы:
    76
    Ну, я же не буду готовый код давать, пусть хоть чуток подумает
     
  11. Dan_Ender

    Dan_Ender Активный участник Пользователь

    Баллы:
    76
    сообщения набиваешь?
     
  12. Автор темы
    Lisenochek

    Lisenochek Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Как ты видишь, я здесь, потому что я не знаю, как это можно реализовать ,а твой метод ни о чем мне не говорит.
     
  13. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Это было обращение не к тебе.

    ТС, не тормози. Решение хоть и костыльное, но должно работать.

    По поводу Block.breakNaturally() я, кстати, так не понял. Он звук не воспроизводит, только анимацию?
     
  14. Автор темы
    Lisenochek

    Lisenochek Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Анимацию и разрушение. Звука в коде нет.

    Насчет костыльного решения. Если в enum звуков нету звука, который я пытаюсь достать - кидает исключение.
     
  15. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Method method = CraftBlock.class.getDeclaredMethod("getNMSBlock");
    method.setAccessible(true);
    net.minecraft.server.v1_12_R1.Block b = (net.minecraft.server.v1_12_R1.Block)method.invoke(block);
    SoundEffectType soundeffecttype = b.getStepSound();
     
    Последнее редактирование: 16 дек 2017
  16. Автор темы
    Lisenochek

    Lisenochek Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Я так и делал, но этот класс вообще я не знаю, как использовать.
     
  17. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Да там нужна целая магия :D. Все в приватах да финалах. Вот лови.

    Location loc = block.getLocation();
    Method method = CraftBlock.class.getDeclaredMethod("getNMSBlock");
    method.setAccessible(true);
    net.minecraft.server.v1_12_R1.Block b = (net.minecraft.server.v1_12_R1.Block)method.invoke(block);
    SoundEffectType soundeffecttype = b.getStepSound();
    CraftWorld w = (CraftWorld) loc.getWorld();
    net.minecraft.server.v1_12_R1.World world = w.getHandle();
    Field field = SoundEffectType.class.getDeclaredField("o");
    field.setAccessible(true);
    Field modifiersField = Field.class.getDeclaredField("modifiers");
    modifiersField.setAccessible(true);
    modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
    SoundEffect se = (SoundEffect) field.get(soundeffecttype);
    world.a(null, loc.getX(), loc.getY(), loc.getZ(), se, SoundCategory.BLOCKS, soundeffecttype.a(), 0.8f);
     
    Последнее редактирование: 16 дек 2017
  18. Автор темы
    Lisenochek

    Lisenochek Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Я не знаю, с каким ты там бубном игрался, но это сработало. Спасибо всем огромное за помощь. Без вас бы я дальше этого:
    Не прошел.
     
Статус темы:
Закрыта.

Поделиться этой страницей