I have not been setting my unlocalizedName to the registry name. In an Item or Block class I do a method like:
public Example(String name){
ResourceLocation location = new ResourceLocation("modid" + ":" + name);
this.setRegistryName(location);
this.setUnlocalizedName(name);
}
What that does is make it so I can name my Items, for example item.example.name=Example (and not modid:item.example.name=Example), in my language file and the resource location is set and I can set up my models and textures in the correct locations on my end in my resources.