I also wrote an MDL parser like this back in high school, but it was within my first year of learning Java after a life of mostly only JASS coding and the code was pretty bad.
However, with time, I believe the Matrix Eater MDL spec has gotten to the point of having the "least change" among most of the MDL-editing programs, and I
specifically remember coding in multiple texture layers from the getgo in high school because of how bothered I was by other programs that would be missing parts of the specification.
https://github.com/Retera/JWC3/tree/master/JWC3/src/com/hiveworkshop/wc3/mdl
However, ever since I linked the program up with the MDX lib from here on the hive, I've been hitting some compatibility issues with the format where things like Light colors would get swapped if opened in the MDX lib via Matrix Eater, saved as MDL, manipulated in other programs, then re-saved as MDX from the Matrix Eater using the Java-based MDL-MDX conversion. As of yet, I have not burrowed back into my code-base to find out if the bug was in my in-memory converter code or in the MDX library, but I was thinking it might've been a different color ordering between MDX and MDL. There are also the issues where fan-made model converters almost always drop in insensible values having the maximum value for a Float, which seems to be a common theme among fan-made converters.
To correct Dr Super Good, the MDL model format is not actually fanmade. It was created by Blizzard Entertainment and models can be exported to it from 3D Studio Max 5.0
[They used 4.9 if I recall, my virtual image runs 5.0] using their original War3 Art Tools. However, as independent authors tried to parse the format across many programs, the format has become a horrible hodgepodge, where the further out on the fringe you go in terms of features the less likely any program is to support you. This includes things like particle emitters that emit team color, multiple texture coordinate sets, and those sorts of things. This is why, when all else fails, YobGul's File Converter is still to this day the best for MDL->MDX conversions, if I am not mistaken, because it uses a decompiled copy of Game.dll to do the converting. So it provides access to the entirety of Blizzard's MDL spec.
However, YobGul's converter has no command line interface and is generally a piece of crap program that crashes after the first fifteen uses, so I usually only use it on models that the fan-made MDLX Converter suggested on most sites does not get right. But, it's like a thorn in my soul that the Matrix Eater's current MD
X library is only 95% accurate, because I think it's MDL spec holds on to a lot of values as Strings and really tries to generally never lose any original data from the file -- although it's grown to have some serious problems, such as the fact that upon saving it recalculates all GeosetAnimId values and all GeosetId values for Bones (under the assumption that nobody wants to manually remember to update those!) and this recalculation messes up like 0.1% of models if they were designed to use some uncommon setup and designed manually instead of in an automated way (so basically this is only a problem for non-Blizzard custom models, and... For the Blademaster's dissipate animation. I really should figure out what was up with that one single animation that it got wrong. Blizzard forgot to flag the Ribbon Emitter from the Attack Slam crit animation thing as NOT being visible during dissipate, but made it invisible through some other arcane GeosetId means, which the Matrix Eater accidentally wipes out upon re-saving).