Documented new functions in processbuilder. Minor fixes.

Recursive call now uses the proper parameter (.mods).
Submodules are only parsed if the parent mod is enabled for launch.
This commit is contained in:
Daniel Scalzi 2018-06-30 03:16:57 -04:00
parent dab195a996
commit 8f172a41e6
No known key found for this signature in database
GPG Key ID: 5CA2F145B63535F9

View File

@ -74,14 +74,46 @@ class ProcessBuilder {
return child
}
/**
* Determine if an optional mod is enabled from its configuration value. If the
* configuration value is null, the required object will be used to
* determine if it is enabled.
*
* A mod is enabled if:
* * The configuration is not null and one of the following:
* * The configuration is a boolean and true.
* * The configuration is an object and its 'value' property is true.
* * The configuration is null and one of the following:
* * The required object is null.
* * The required object's 'def' property is null or true.
*
* @param {Object | boolean} modCfg The mod configuration object.
* @param {Object} required Optional. The required object from the mod's distro declaration.
* @returns {boolean} True if the mod is enabled, false otherwise.
*/
static isModEnabled(modCfg, required = null){
return modCfg != null ? ((typeof modCfg === 'boolean' && modCfg) || (typeof modCfg === 'object' && modCfg.value)) : required != null && required.def != null ? required.def : true
}
/**
* Determine if a mod is optional.
*
* A mod is optional if its required object is not null and its 'value'
* property is false.
*
* @param {Object} mdl The mod distro module.
* @returns {boolean} True if the mod is optional, otherwise false.
*/
static isModOptional(mdl){
mdl.required != null && mdl.required.value != null && mdl.required.value === false
return mdl.required != null && mdl.required.value != null && mdl.required.value === false
}
/**
* Function which performs a preliminary scan of the top level
* mods. If liteloader is present here, we setup the special liteloader
* launch options. Note that liteloader is only allowed as a top level
* mod. It must not be declared as a submodule.
*/
setupLiteLoader(){
const mdls = this.server.modules
for(let i=0; i<mdls.length; i++){
@ -101,6 +133,15 @@ class ProcessBuilder {
}
}
/**
* Resolve an array of all enabled mods. These mods will be constructed into
* a mod list format and enabled at launch.
*
* @param {Object} modCfg The mod configuration object.
* @param {Array.<Object>} mdls An array of modules to parse.
* @returns {{fMods: Array.<Object>, lMods: Array.<Object>}} An object which contains
* a list of enabled forge mods and litemods.
*/
resolveModConfiguration(modCfg, mdls){
let fMods = []
let lMods = []
@ -108,23 +149,17 @@ class ProcessBuilder {
for(let i=0; i<mdls.length; i++){
const mdl = mdls[i]
if(mdl.type != null && (mdl.type === 'forgemod' || mdl.type === 'litemod' || mdl.type === 'liteloader')){
const o = ProcessBuilder.isModOptional(mdl)
const e = ProcessBuilder.isModEnabled(modCfg[AssetGuard._resolveWithoutVersion(mdl.id)], mdl.required)
if(!o || (o && e)){
if(mdl.sub_modules != null){
const v = this.resolveModConfiguration(modCfg[AssetGuard._resolveWithoutVersion(mdl.id)], mdl.sub_modules)
const v = this.resolveModConfiguration(modCfg[AssetGuard._resolveWithoutVersion(mdl.id)].mods, mdl.sub_modules)
fMods = fMods.concat(v.fMods)
lMods = lMods.concat(v.lMods)
if(mdl.type === 'liteloader'){
continue
}
}
if(ProcessBuilder.isModOptional(mdl)){
if(ProcessBuilder.isModEnabled(modCfg[AssetGuard._resolveWithoutVersion(mdl.id)]), mdl.required){
if(mdl.type === 'forgemod'){
fMods.push(mdl)
} else {
lMods.push(mdl)
}
}
} else {
if(mdl.type === 'forgemod'){
fMods.push(mdl)
} else {
@ -140,16 +175,25 @@ class ProcessBuilder {
}
}
/**
* Construct a mod list json object.
*
* @param {'forge' | 'liteloader'} type The mod list type to construct.
* @param {Array.<Object>} mods An array of mods to add to the mod list.
* @param {boolean} save Optional. Whether or not we should save the mod list file.
*/
constructModList(type, mods, save = false){
const modList = {
repositoryRoot: path.join(this.commonDir, 'modstore')
}
const ids = []
for(let i=0; i<mods.length; ++i){
if(type === 'forge'){
for(let i=0; i<mods.length; ++i){
ids.push(mods[i].id)
}
} else {
for(let i=0; i<mods.length; ++i){
ids.push(mods[i].id + '@' + (mods[i].artifact.extension != null ? mods[i].artifact.extension.substring(1) : 'jar'))
}
}