minecraft-modpack
Version:
Minecraft modpack creation made easy
78 lines (65 loc) • 2.62 kB
JavaScript
var storage;
const config = require("../config");
var Mod;
class ModFactory{
constructor(){
}
static passStorage( storageInstance ){
storage = storageInstance;
Mod = require("./Mod"); //prevent recurse GG 200 IQ
Mod.passStorage(storage);
}
async instance(obj, type){
let ret = {};
let filesBig = await this.getFiles(obj.id);
ret.id = obj.id || 0;
ret.type = type || 1;
ret.fileNames = filesBig.fileNames || [];
ret.fileNamesPlain = filesBig.fileNamesPlain || [];
ret.authors = this.parseAuthors(obj.authors) || [];
ret.files = filesBig.files || [];
ret.slug = obj.slug || "";
ret.addonName = obj.name || "";
ret.curseforgeURL = obj.websiteUrl || "";
return new Mod(ret);
}
getFiles(id){
let fileNamesPlain = [];
let fileNames = [];
return new Promise( resolve => {
storage.instance.get( config.path.files(id) )
.then(async resp => {
let filesTemp = resp.data;
let files = [];
filesTemp.map( file => {
if( file.gameVersion.includes(storage.gameConfig.gameVersion) ){
let fileInstancePromise = file;
fileNamesPlain.push( file.fileName );
files.push( fileInstancePromise );
}
});
// let sortFn = function(a, b) {
// a = new Date(a.fileDate);
// b = new Date(b.fileDate);
// return a > b ? -1 : a < b ? 1 : 0;
// };
let sortFn = undefined; // It's necessary!!!
fileNames = fileNamesPlain.slice().sort(sortFn).reverse().map( (fileName, index) => {
return index + ". " + fileName;
});
let filesBig = {
files,
fileNames,
fileNamesPlain
};
resolve(filesBig);
});
});
}
parseAuthors(authors){
return authors.map(author => {
return author.name;
});
}
}
module.exports = ModFactory;