* Initial 1.17 configuration, dep upgrade.
* Enable 1.18 for initial tests.
* Add lowcodelanguage for 1.18 (#49)
* Set classpath flag for 1.17+ generated files. Enable 1.19 (not yet working).
* Support 1.19.
Co-authored-by: Matt Artist <me@mja00.dev>
CHANGES
- Forge installer is no longer stored to the work directory. It is now stored in a cache folder corresponding to the artifact version.
- Installer output is now cached by default
- Added options to generate distro.
- --discardOutput Delete cached output after it is no longer required. May be useful if disk space is limited.
- --invalidateCache Invalidate and delete existing caches as they are encountered. Requires fresh cache generation.
- Both options are false by default.
- To invalide a single version, manually delete the folder.
- Old functionality is essentially g distro --discardOutput --invalidateCache.
The resolution logic was reworked so that Claritas only needs to be invoked once per supported type, ie only once for ForgeMod and LiteMod resolutions per server. The resolver now uses identifies module candidates and collects them. Claritas is invoked and the resulting metadata is stored. The module resolution then proceeds with all of this data available.
Toggleable module logic was also reworked to first accumulate all candidates and then process. This required the resolution function to optionally take a preprocess and postprocess callback to perform the necessary cleanup and transformations.
The minor rework was necessary because spawning child process is expensive, and we should only do it as often as we must to keep the application performant.
Claritas resolution also supports exceptions defined by the structure class. This is to facilitate handling of special cases (ex. Optifine).
Changed the resolver names to match the Forge Gradle versions, since that software version
determines the structure of the jar file and how it needs to be parsed.
Refactored the ForgeGradle3 resolver to conditionally execute the installer only when we
need artifacts generated by the installer. This allows the new 1.12.2 builds to be processed
without running the installer.
Changed the VersionSegemented interface to accept a libraryVersion, so we can segment within
a minecraft version.
This change is pending verification with Helios.
Tslint is deprecated, as such we have moved to eslint. Linted the project with more
stringent rules. The configuration will be changed as we figure out which rules we
should keep.
This allows multiple versions of the same forge to be used.
Ex. Recommended 1.15 on prod, latest 1.15 on test.
Also fixed a bug with artifact classifier formatting.
Moved java executable to its own util class.
Fixed artifact resolution links for older versions of forge.
1.13 support is going to be difficult because forge does not
make anything developer friendly.
All pack.xz libraries now have their MD5s properly calculated.
Sha1 validations are performed on jar libraries. The checksums
forge provides for compressed files are neither the sha1 or md5
of the initial or extracted file. Ignoring those for now.
Still TODO is integration with baseurl. Might move both that
and base path to the .env file to reduce redundency in command processing.
TODO:
Integrate base url propagation.
Integrate PackXZExtract to calculate hashes of jar.pack.xz files.
OR ammend the distribution spec to accept different hash algos (requires helioslauncher update).
Repo structure classes should be responsible for pulling versioned files.
Ex. /forge/1.14/ -> get the latest file (or only allow one file).
The resolver then gets that file to work with in order to resolve the forge
module, pull its libs, and attach them as submodules.