UNPKG

dmclc

Version:

Dolphin Minecraft Launcher Core

102 lines (101 loc) 3.78 kB
import { FabricLikeLoader, checkMatch, formatDepVersion, normalizeVersion } from "./fabriclike/fabriclike.js"; import { VersionParser } from "./fabriclike/version/VersionParser.js"; import { ModLoadingIssue } from "./loader.js"; export class FabricLoader extends FabricLikeLoader { metaURL = "https://meta.fabricmc.net/v2"; loaderMaven = "https://maven.fabricmc.net/"; name = "fabric"; findInVersion(MCVersion) { let ret; MCVersion.libraries.forEach(i => { if (i.name.includes(":fabric-loader:")) { ret = i.name.split(":")[2]; } }); return ret; } checkMods(mods, mc, loader) { const modIdVersions = { minecraft: normalizeVersion(mc), fabricloader: loader, java: "Provided" }; const issues = []; for (const mod of mods) { if (mod.loader !== "fabric") continue; if (!modIdVersions[mod.data.id] || VersionParser.parse(modIdVersions[mod.data.id], false).compareTo(VersionParser.parse(mod.data.version, false)) <= 0) { modIdVersions[mod.data.id] = mod.data.version; } if (mod.data.provides) { for (const provide of mod.data.provides) { modIdVersions[provide] = "Provided"; } } } for (const mod of mods) { if (mod.loader !== "fabric") break; issues.push(...checkFabricDeps(mod.data, modIdVersions, this.launcher)); } return issues; } getModInfo(mod) { const res = { id: mod.id, version: mod.version, isJIJLib: mod.custom["fabric-loom:generated"] ?? false }; if (mod.description) res.description = mod.description; if (mod.name) res.name = mod.name; if (mod.license instanceof Array) { res.license = mod.license.join(", "); } else { res.license = mod.license ?? "ARR"; } return res; } } export function checkFabricDeps(mod, modIdVersions, launcher) { const issues = []; for (const id in mod.depends) { if (!(id in modIdVersions && checkMatch(modIdVersions[id], mod.depends[id]))) { issues.push(new ModLoadingIssue("error", "dependencies.dependency_wrong_missing", { source: mod.id, target: id, targetVersion: formatDepVersion(mod.depends[id], launcher) })); } } for (const id in mod.recommends) { if (!(id in modIdVersions && checkMatch(modIdVersions[id], mod.recommends[id]))) { issues.push(new ModLoadingIssue("warning", "dependencies.recommends_wrong_missing", { source: mod.id, target: id, targetVersion: formatDepVersion(mod.recommends[id], launcher) })); } } for (const id in mod.conflicts) { if (id in modIdVersions && checkMatch(modIdVersions[id], mod.conflicts[id])) { issues.push(new ModLoadingIssue("warning", "dependencies.conflicts_exists", { source: mod.id, target: id, targetVersion: formatDepVersion(mod.conflicts[id], launcher) })); } } for (const id in mod.breaks) { if (id in modIdVersions && checkMatch(modIdVersions[id], mod.breaks[id])) { issues.push(new ModLoadingIssue("error", "dependencies.breaks_exists", { source: mod.id, target: id, targetVersion: formatDepVersion(mod.breaks[id], launcher) })); } } return issues; }