import { MinecraftFolder, MinecraftLocation } from '@xmcl/core'; import { Task } from '@xmcl/task'; import { Dispatcher } from 'undici'; import { Entry, ZipFile } from 'yauzl'; import { DownloadTask } from './downloadTask'; import { LibraryOptions } from './minecraft'; import { InstallProfile, InstallProfileOption } from './profile'; import { InstallOptions as InstallOptionsBase } from './utils'; export interface ForgeVersionList { mcversion: string; versions: ForgeVersion[]; } /** * The forge version metadata to download a forge */ export interface ForgeVersion { /** * The installer info */ installer: { md5: string; sha1: string; /** * The url path to concat with forge maven */ path: string; }; universal: { md5: string; sha1: string; /** * The url path to concat with forge maven */ path: string; }; /** * The minecraft version */ mcversion: string; /** * The forge version (without minecraft version) */ version: string; type: 'buggy' | 'recommended' | 'common' | 'latest'; } /** * All the useful entries in forge installer jar */ export interface ForgeInstallerEntries { /** * maven/net/minecraftforge/forge/${forgeVersion}/forge-${forgeVersion}.jar */ forgeJar?: Entry; /** * maven/net/minecraftforge/forge/${forgeVersion}/forge-${forgeVersion}-universal.jar */ forgeUniversalJar?: Entry; /** * data/client.lzma */ clientLzma?: Entry; /** * data/server.lzma */ serverLzma?: Entry; /** * install_profile.json */ installProfileJson?: Entry; /** * version.json */ versionJson?: Entry; /** * forge-${forgeVersion}-universal.jar */ legacyUniversalJar?: Entry; /** * data/run.sh */ runSh?: Entry; /** * data/run.bat */ runBat?: Entry; /** * data/unix_args.txt */ unixArgs?: Entry; /** * data/user_jvm_args.txt */ userJvmArgs?: Entry; /** * data/win_args.txt */ winArgs?: Entry; } export type ForgeInstallerEntriesPattern = ForgeInstallerEntries & Required>; export type ForgeLegacyInstallerEntriesPattern = Required>; type RequiredVersion = { /** * The installer info. * * If this is not presented, it will genreate from mcversion and forge version. */ installer?: { sha1?: string; /** * The url path to concat with forge maven */ path: string; }; /** * The minecraft version */ mcversion: string; /** * The forge version (without minecraft version) */ version: string; }; export declare const DEFAULT_FORGE_MAVEN = "http://files.minecraftforge.net/maven"; /** * The options to install forge. */ export interface InstallForgeOptions extends LibraryOptions, InstallOptionsBase, InstallProfileOption { side?: 'client' | 'server'; } export declare class DownloadForgeInstallerTask extends DownloadTask { readonly installJarPath: string; constructor(forgeVersion: string, installer: RequiredVersion['installer'], minecraft: MinecraftFolder, options: InstallForgeOptions, legacy?: boolean); } /** * Unpack forge installer jar file content to the version library artifact directory. * @param zip The forge jar file * @param entries The entries * @param forgeVersion The expected version of forge * @param profile The forge install profile * @param mc The minecraft location * @returns The installed version id */ export declare function unpackForgeInstaller(zip: ZipFile, entries: ForgeInstallerEntriesPattern, forgeVersion: string, profile: InstallProfile, mc: MinecraftFolder, jarPath: string, options: InstallForgeOptions): Promise; export declare function isLegacyForgeInstallerEntries(entries: ForgeInstallerEntries): entries is ForgeLegacyInstallerEntriesPattern; export declare function isForgeInstallerEntries(entries: ForgeInstallerEntries): entries is ForgeInstallerEntriesPattern; /** * Walk the forge installer file to find key entries * @param zip THe forge instal * @param forgeVersion Forge version to install */ export declare function walkForgeInstallerEntries(zip: ZipFile, forgeVersion: string): Promise; export declare class BadForgeInstallerJarError extends Error { jarPath: string; /** * What entry in jar is missing */ entry?: string | undefined; name: string; constructor(jarPath: string, /** * What entry in jar is missing */ entry?: string | undefined); } export declare function installByInstallerTask(version: RequiredVersion, minecraft: MinecraftLocation, options: InstallForgeOptions): import("@xmcl/task").TaskRoutine; /** * Install forge to target location. * Installation task for forge with mcversion >= 1.13 requires java installed on your pc. * @param version The forge version meta * @returns The installed version name. * @throws {@link BadForgeInstallerJarError} */ export declare function installForge(version: RequiredVersion, minecraft: MinecraftLocation, options?: InstallForgeOptions): Promise; /** * Install forge to target location. * Installation task for forge with mcversion >= 1.13 requires java installed on your pc. * @param version The forge version meta * @returns The task to install the forge * @throws {@link BadForgeInstallerJarError} */ export declare function installForgeTask(version: RequiredVersion, minecraft: MinecraftLocation, options?: InstallForgeOptions): Task; /** * Query the webpage content from files.minecraftforge.net. * * You can put the last query result to the fallback option. It will check if your old result is up-to-date. * It will request a new page only when the fallback option is outdated. * * @param option The option can control querying minecraft version, and page caching. */ export declare function getForgeVersionList(options?: { /** * The minecraft version you are requesting */ minecraft?: string; dispatcher?: Dispatcher; }): Promise; export {}; //# sourceMappingURL=forge.d.ts.map