47 lines
1.6 KiB
TypeScript
47 lines
1.6 KiB
TypeScript
import { IterableElement } from "type-fest"
|
|
import { sortBy } from "lodash-es"
|
|
import { Mod, Pack, usePack } from "../pack.js"
|
|
import { ModFile, ModFileData, MetaFileModrinthSource } from "../files.js"
|
|
import { pathExists } from "fs-extra"
|
|
import { nanoid } from "nanoid/non-secure"
|
|
import { output } from "../../src/utils/output.js"
|
|
import kleur from "kleur"
|
|
import { ModrinthMod, ModrinthVersion, ModrinthVersionFile } from "./api.js"
|
|
import { releaseChannelOrder, Side } from "../shared.js"
|
|
|
|
export async function addModrinthMod(modrinthMod: ModrinthMod, modrinthVersion: ModrinthVersion, side?: Side) {
|
|
const pack = await usePack()
|
|
let id = modrinthMod.slug
|
|
|
|
if (await pathExists(pack.paths.mods.resolve(`${id}.json`).toString())) {
|
|
const oldId = id
|
|
id = `${id}-${nanoid(5)}`
|
|
|
|
output.warn(
|
|
`There is already a mod file named ${kleur.yellow(`${oldId}.json`)} specifying a non-Modrinth mod.\n` +
|
|
`The file for this mod will therefore be named ${kleur.yellow(`${id}.json`)}`
|
|
)
|
|
}
|
|
|
|
if (side === undefined) {
|
|
const isClientSupported = modrinthMod.clientSide !== "unsupported"
|
|
const isServerSupported = modrinthMod.serverSide !== "unsupported"
|
|
|
|
side = isClientSupported && isServerSupported ? "client-server" : isClientSupported ? "client" : "server"
|
|
}
|
|
|
|
await pack.addMod(id, {
|
|
name: modrinthMod.title,
|
|
enabled: true,
|
|
ignoreUpdates: false,
|
|
side,
|
|
file: getModFileDataForModrinthVersion(modrinthMod, modrinthVersion),
|
|
source: {
|
|
type: "modrinth",
|
|
modId: modrinthMod.id,
|
|
versionId: modrinthVersion.id
|
|
}
|
|
})
|
|
}
|
|
|
|
|