Hi there,
I've added a custom entity (called a Nils) to my 1.12.2 mod and I'm trying to override the getAmbientSound(), getHurtSound() and getDeathSound() methods in the entity's class.
I have multiple of each sound saved in this folder:
MODNAME\src\main\resources\assets\MODNAME\sounds\entity\nils\
This is my sounds.json (located in
MODNAME\src\main\resources\assets\MODNAME\sounds\
)
sounds.json:
{
"entity.nils.ambient" : {
"category" : "entity",
"subtitle" : "entity.nils.ambient",
"sounds" : [
{"name" : "MODNAME:entity/nils/ambient_0", "stream" : true},
{"name" : "MODNAME:entity/nils/ambient_1", "stream" : true},
{"name" : "MODNAME:entity/nils/ambient_2", "stream" : true},
{"name" : "MODNAME:entity/nils/ambient_3", "stream" : true}
]
},
"entity.nils.hurt" : {
"category" : "entity",
"subtitle" : "entity.nils.hurt",
"sounds" : [
{"name" : "MODNAME:entity/nils/hurt_0", "stream" : true},
{"name" : "MODNAME:entity/nils/hurt_1", "stream" : true}
]
},
"entity.nils.death" : {
"category" : "entity",
"subtitle" : "entity.nils.death",
"sounds" : [
{"name" : "MODNAME:entity/nils/death_0", "stream" : true},
{"name" : "MODNAME:entity/nils/death_1", "stream" : true},
{"name" : "MODNAME:entity/nils/death_2", "stream" : true},
{"name" : "MODNAME:entity/nils/death_3", "stream" : true}
]
}
}
I have also tried replacing each dictionary element in "sounds" to just the name. ie.
"sounds" : [
"MODNAME:entity/nils/hurt_0",
"MODNAME:entity/nils/hurt_1"
]
The method overrides are just simple two-liners, all like this:
int index = (new Random()).nextInt(SoundsHandler.ENTITY_NILS_AMBIENT.size());
return SoundsHandler.ENTITY_NILS_AMBIENT.get(index);
(but obviously replacing ..._AMBIENT with ..._HURT and ..._DEATH for the other events).
The class SoundsHandler looks like this:
package mod.loizouca.MODNAME.util.handlers;
import java.util.ArrayList;
import java.util.List;
import mod.loizouca.MODNAME.util.Reference;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.SoundEvent;
import net.minecraftforge.fml.common.registry.ForgeRegistries;
public class SoundsHandler {
public static final int NUM_AMBIENT = 4, NUM_HURT = 2, NUM_DEATH = 4;
public static List<SoundEvent> ENTITY_NILS_AMBIENT = new ArrayList<SoundEvent>();
public static List<SoundEvent> ENTITY_NILS_HURT = new ArrayList<SoundEvent>();
public static List<SoundEvent> ENTITY_NILS_DEATH = new ArrayList<SoundEvent>();
public static void registerSounds() {
for (int i=0; i<NUM_AMBIENT; i++) ENTITY_NILS_AMBIENT.add(registerSound("entity/nils/ambient_"+Integer.toString(i)));
for (int i=0; i<NUM_HURT; i++) ENTITY_NILS_HURT.add(registerSound("entity/nils/hurt_"+Integer.toString(i)));
for (int i=0; i<NUM_DEATH; i++) ENTITY_NILS_DEATH.add(registerSound("entity/nils/death_"+Integer.toString(i)));
}
private static SoundEvent registerSound(String name) {
ResourceLocation location = new ResourceLocation(Reference.MOD_ID, name);
SoundEvent event = new SoundEvent(location);
event.setRegistryName(name);
ForgeRegistries.SOUND_EVENTS.register(event);
return event;
}
}
My problem is that after the game has loaded and I'm in the world (no problems thus far), the sounds don't work.I just get these errors in the Eclipse console:
[main/WARN] [minecraft/SoundManager]: Unable to play unknown soundEvent: MODNAME:entity/nils/ambient_0
This happens for every event (ambient, hurt and death) and for all the different files.
I'm aware that it is probably to do with where the files are, but I have changed their locations, I have changed the path I parse into registerSound(), and nothing has worked. If I leave it to super off the Entity I have inherited from, the sounds work (I get the cow moo, hurt and death sounds).
Please let me know if you need any more information / code / etc. and thanks in advance for any help :). This has been bugging me for days now.
(PS. I have replaced my mod's name with MODNAME in all the paths, so my code actually has a name there, not just a placeholder).