import gulp from "gulp"; import { clientDestDirectory, modpackManifest, overridesFolder, sharedDestDirectory } from "../../globals"; import fs from "fs"; import upath from "upath"; import buildConfig from "../../buildConfig"; import { fetchProjectsBulk } from "../../util/curseForgeAPI"; import log from "fancy-log"; import rename from "gulp-rename"; import imagemin from "gulp-imagemin"; import pngToJpeg from "png-to-jpeg"; import { MainMenuConfig } from "../../types/mainMenuConfig"; import del from "del"; async function clientCleanUp() { return del(upath.join(clientDestDirectory, "*"), { force: true }); } /** * Checks and creates all necessary directories so we can build the client safely. */ async function createClientDirs() { if (!fs.existsSync(clientDestDirectory)) { return fs.promises.mkdir(clientDestDirectory, { recursive: true }); } } /** * Exports the modpack manifest. */ async function exportModpackManifest() { const manifestPath = upath.join(clientDestDirectory, "manifest.json"); // Filter client side files only and prune build-specific fields. const newFiles = modpackManifest.files .map((file) => { if (file.sides) { if (!file.sides.includes("client")) return; const newFile = Object.assign({}, file); delete newFile.sides; return newFile; } return file; }) .filter(Boolean); return fs.promises.writeFile( manifestPath, JSON.stringify( { ...modpackManifest, files: newFiles, }, null, " ", ), ); } /** * Copies the license file. */ async function copyClientLicense() { return gulp.src("../LICENSE.md").pipe(gulp.dest(clientDestDirectory)); } /** * Copies the update notes file. */ function copyClientUpdateNotes() { return gulp.src("../UPDATENOTES.md", { allowEmpty: true }).pipe(gulp.dest(clientDestDirectory)); } /** * Copies the changelog file. */ function copyClientChangelog() { return gulp.src(upath.join(sharedDestDirectory, "CHANGELOG.md")).pipe(gulp.dest(clientDestDirectory)); } /** * Copies modpack overrides. */ function copyClientOverrides() { return gulp .src(buildConfig.copyFromSharedClientGlobs, { nodir: true, cwd: sharedDestDirectory, allowEmpty: true }) .pipe(gulp.symlink(upath.join(clientDestDirectory, "overrides"))); } /** * Fetches mod links and builds modlist.html. */ async function fetchModList() { log("Fetching mod infos..."); // Fetch project/addon infos. const modInfos = await fetchProjectsBulk(modpackManifest.files.map((mod) => mod.projectID)); log(`Fetched ${modInfos.length} mod infos`); // Create modlist.html const output = [ "