Изменение звука ходьбы по блоку

Версия Minecraft
1.12.2
192
2
9
Смотрел статьи, читал сайт... Вроде бы сделал, эклипс ни на что не ругается, но звук так и не воспроизводится, когда ходишь по блоку.
Что может быть не так? Звук в папке assets/sounds/
Формат, разумеется, .ogg

Класс Sound
Java:
@EventBusSubscriber(modid = MainClass.MODID)

public class Sound

{
   
    public static final SoundEvent TESTSOUND = reg("testsound");

    @SubscribeEvent
    public static void regSound(RegistryEvent.Register<SoundEvent> e)
    {
        ForgeRegistries.SOUND_EVENTS.register(testsound);
    }

    private static SoundEvent reg(String name)
    {
        ResourceLocation rl = new ResourceLocation(MainClass.MODID, name);
        return new SoundEvent(rl).setRegistryName(rl);
    }
   
}

Класс блока
Код:
public class Block01 extends Block

{
   
    public Block01(String name)
    {
        super(Material.CLOTH);
        this.setRegistryName("testblock");
        this.setUnlocalizedName("testblock");
        this.setCreativeTab(MainClass.TESTBLOCK);
        this.setSoundType(Sound.TESTSOUND);
    }



    private void setSoundType(SoundEvent testblock) {
        // TODO Auto-generated method stub
       
    }



    @Override
    public boolean isOpaqueCube(IBlockState state)
    {
        return false;
    }
   
   

    @Override
    public boolean isFullCube(IBlockState state)
    {
        return true;
    }
}

sound.json лежащий в assets/
JSON:
{

    "testsound": {

        "category": "block",

        "sounds": ["testsound"]

    }

}
 
Решение
@Pycckuu_gap, в Block#setSoundType() нужно передавать только объект SoundType или его наследника. Поэтому для кастомных звуков блоков нужно создать свой класс с наследованием от SoundType и в нём создавать новые звуки. Кроме звуков ходьбы SoundType определяет звук разрушения, установки, удара по блоку и падения.

Кастомный SoundType:
Java:
public class CustomSoundType extends SoundType {
  
    public static final SoundType TEST = new SoundType(1.0F, 1.0F, SoundsRegistry.TEST_BREAK, SoundsRegistry.TEST_STEP, SoundsRegistry.TEST_PLACE, SoundsRegistry.TEST_HIT, SoundsRegistry.TEST_FALL);

    public CustomSoundType(float volume, float pitch, SoundEvent breakSound, SoundEvent stepSound, SoundEvent placeSound...
192
2
9
this.setSoundType(Sound.TESTSOUND);
Эта строка просит то, что "нужно убрать", так как в классе Sound нет SoundType, но если Sound Event заменить на SoundType, начинаются другие проблемы, а SoundEvent там прописан, потому что так сделано в уроке на сайте MCModding. Следовательно либо вместо setSoundType должно быть что-то иное, либо SoundType метод должен быть заполнен кодом, но каким?
 
243
28
202
@Pycckuu_gap, в Block#setSoundType() нужно передавать только объект SoundType или его наследника. Поэтому для кастомных звуков блоков нужно создать свой класс с наследованием от SoundType и в нём создавать новые звуки. Кроме звуков ходьбы SoundType определяет звук разрушения, установки, удара по блоку и падения.

Кастомный SoundType:
Java:
public class CustomSoundType extends SoundType {
  
    public static final SoundType TEST = new SoundType(1.0F, 1.0F, SoundsRegistry.TEST_BREAK, SoundsRegistry.TEST_STEP, SoundsRegistry.TEST_PLACE, SoundsRegistry.TEST_HIT, SoundsRegistry.TEST_FALL);

    public CustomSoundType(float volume, float pitch, SoundEvent breakSound, SoundEvent stepSound, SoundEvent placeSound, SoundEvent hitSound, SoundEvent fallSound) {
      
        super(volume, pitch, breakSound, stepSound, placeSound, hitSound, fallSound);
    }
}


Регистрация звуков:
Java:
@Mod.EventBusSubscriber(modid = Main.MODID)
public class SoundsRegistry {

    public static final SoundEvent
    TEST_BREAK = registerSound("test_break"),
    TEST_STEP = registerSound("test_step"),
    TEST_PLACE = registerSound("test_place"),
    TEST_HIT = registerSound("test_hit"),
    TEST_FALL = registerSound("test_fall");
  
    @SubscribeEvent
    public static void registerSounds(RegistryEvent.Register<SoundEvent> event) {
      
        event.getRegistry().registerAll(
              
                TEST_BREAK,
                TEST_STEP,
                TEST_PLACE,
                TEST_HIT,
                TEST_FALL
        );
    }
  
    private static SoundEvent registerSound(String soundName) {
      
        ResourceLocation location = new ResourceLocation(Main.MODID + ":" + soundName);
      
        return new SoundEvent(location).setRegistryName(location);
    }
}


Файл sounds.json, сам звук называется test.ogg:
JSON:
{
"test_break": { "category": "block", "sounds": [{"name": "yourmodid:test"}]},
"test_step": { "category": "block", "sounds": [{"name": "yourmodid:test"}]},
"test_place": { "category": "block", "sounds": [{"name": "yourmodid:test"}]},
"test_hit": { "category": "block", "sounds": [{"name": "yourmodid:test"}]},
"test_fall": { "category": "block", "sounds": [{"name": "yourmodid:test"}]}
}


Ну и установка своего звука для блока в конструкторе:
this.setSoundType(CustomSoundType.TEST);

Переопределять setSoundType() в своём блоке не нужно.
 
Последнее редактирование:
Сверху