1. There is no reason to have the EFFECTIVE_ON array, setHarvestLevel() is sufficient.
2. You need to use a different constructor, the one that takes 2 floats, because vanilla wants the damage and speed values from the material passed to that constructor, but your material doesn't exist in its enum array, so it crashes.
3. Don't set the unlocalized name like that, you should use setUnlocalizedName(getRegistryName()) after you give the item a registry name, this allows your lang file to not conflict with other mods