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

Статус
Закрыто для дальнейших ответов.

Lisenochek

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

Я думаю, можно вытащить код из метода Block.breakNaturally(), он вроде звук тоже воспроизводит
 
Хороший код. Работать он, конечно, не будет
Нет, ну почему не будет? Будет. Вот только так себе решение...
n1XisNhSEIM.jpg
 
Ну, я же не буду готовый код давать, пусть хоть чуток подумает
Это было обращение не к тебе.

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

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

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

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

Насчет костыльного решения. Если в enum звуков нету звука, который я пытаюсь достать - кидает исключение.
 
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();
 
Последнее редактирование:
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();
Я так и делал, но этот класс вообще я не знаю, как использовать.
 
Я так и делал, но этот класс вообще я не знаю, как использовать.
Да там нужна целая магия 😁. Все в приватах да финалах. Вот лови.

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);
 
Последнее редактирование:
Да там нужна целая магия 😁. Все в приватах да финалах. Вот лови.

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);
Я не знаю, с каким ты там бубном игрался, но это сработало. Спасибо всем огромное за помощь. Без вас бы я дальше этого:
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();

Не прошел.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх