A few notes:
In EnumType:
Field meta is obsolete, use the autogenerated enum method Enum#ordinal() instead. Returns the index of the enum in the declared order starting from 0.
Static field META_LOOKUP is obsolete, just do Enum#values()[index] on demand. The compiler generates a VALUES array, which is then directly returned by Enum#values()
The field name is obsolete, every enum stores its declaration name as a field, which can be accessed with Enum#name(). It returns the exact field name (often uppercase), so you have to toLowerCase() it before using it in this case. The getName() method can thus be overridden to return name().toLowerCase();
Also note the Enum#valueOf(String) method, which looks up an enum by its field name (often uppercase).
It might be worth your time disassembling a simple enum with a few fields to see what the compiler does to it (you can also use the ASM plugin for idea/eclipse to see the bytecode):
user@machine:~$ javac TestEnum.java; javap -l -p -c -s -constants TestEnum.class
Instead of you private getResourceLocation(), use getRegistryName().toString(). Same result, but avoids the code duplication.
Set the registry name in the constructor with setRegistryName(new ResourceLocation(MODID, name)). I'm surprised Forge didn't scream at you for not doing it.
Unlocalized names are per convention in the form MODID:NAME. Although other things will work, they don't follow convention.
Set your registry name first and then set your unlocalized name with setUnlocalizedName(getRegistryName().toString()). This follows the convention and makes sure your registry name is symmetric with the unlocalized name, which makes things more organised.