With some help from the file format information jamesster found on Xentax I have made a JAM extractor. For the amount of information it has to process, it's rather fast, but it will hang there for a bit as it processes all the files (so have patience). Without further ado, here it is:
JAM Extractor
Latest Downloads (RRU):
Windows 32-bit
Windows 64-bit
Mac 64-bit
Latest Downloads (Github):
Windows 32-bit
Windows 64-bit
Mac 64-bit
Other Links:
All Downloads
GitHub Repository
Extract your download to find the main "JAMExtractor" executable (all files are required, do not separate them or it will not work).
Usage
You can run it by the command line or, on Windows, simply drag-and-drop the LEGO.JAM file onto the main executable and wait for it to finish creating a folder next to the original file. To recompile, simply drop a folder onto the main executable and it will create a JAM file. >If you have the 1999 version of the game, it is unnecessary to rebuild a JAM archive. It is possible to have the program also print the files being processed as the program runs if you add an "--verbose" to the arguments.
>Still need a GUI? Check out this topic.
Important Notes
The LJAM file format does not allow file or folder names to contain more than 12 characters. As of version 1.0.2, the program will skip over file and folder whose names are longer than 12 characters. Thus, any files and folders you create within the JAM archive's folders that have names longer than 12 characters will automatically be excluded when creating a new JAM archive. Older versions would only use the first 12 characters of the name as the file name and would include them.
Alternately, you can use the source code from the GitHub repository with a Python interpreter. As of version 1.0.2, JAM Extractor is compatible with Python 2.7 and newer, older versions are compatible with 3.0 and newer.