Added support for neoforge.mods.toml

See https://neoforged.net/news/20.5release/

Closes #118
This commit is contained in:
Kir_Antipov 2024-04-27 12:51:53 +03:00
parent c0f30ad683
commit bb3c76b765
6 changed files with 15 additions and 6 deletions

View file

@ -4,7 +4,7 @@ import { readAllZippedText } from "@/utils/io/file-info";
import { LoaderType } from "../loader-type"; import { LoaderType } from "../loader-type";
import { LoaderMetadataReader } from "../loader-metadata-reader"; import { LoaderMetadataReader } from "../loader-metadata-reader";
import { NeoForgeMetadata } from "./neoforge-metadata"; import { NeoForgeMetadata } from "./neoforge-metadata";
import { MODS_TOML } from "./raw-neoforge-metadata"; import { NEOFORGE_MODS_TOML, MODS_TOML } from "./raw-neoforge-metadata";
/** /**
* A metadata reader that is able to read NeoForge mod metadata from a zipped file. * A metadata reader that is able to read NeoForge mod metadata from a zipped file.
@ -14,7 +14,10 @@ export class NeoForgeMetadataReader implements LoaderMetadataReader<NeoForgeMeta
* @inheritdoc * @inheritdoc
*/ */
async readMetadataFile(path: PathLike): Promise<NeoForgeMetadata> { async readMetadataFile(path: PathLike): Promise<NeoForgeMetadata> {
const metadataText = await readAllZippedText(path, MODS_TOML); // Prefer `neoforge.mods.toml` over `mods.toml`.
const metadataText = await readAllZippedText(path, NEOFORGE_MODS_TOML)
.catch(() => readAllZippedText(path, MODS_TOML));
const metadata = NeoForgeMetadata.from(parseToml(metadataText)); const metadata = NeoForgeMetadata.from(parseToml(metadataText));
if (!metadata.dependencies.some(x => x.id === LoaderType.NEOFORGE)) { if (!metadata.dependencies.some(x => x.id === LoaderType.NEOFORGE)) {
throw new Error("A NeoForge metadata file must contain a 'neoforge' dependency"); throw new Error("A NeoForge metadata file must contain a 'neoforge' dependency");

View file

@ -73,3 +73,8 @@ export interface RawNeoForgeMetadata {
* Name of the `mods.toml` file, that contains raw NeoForge metadata. * Name of the `mods.toml` file, that contains raw NeoForge metadata.
*/ */
export const MODS_TOML = "META-INF/mods.toml"; export const MODS_TOML = "META-INF/mods.toml";
/**
* Name of the `neoforge.mods.toml` file, that contains raw NeoForge metadata.
*/
export const NEOFORGE_MODS_TOML = "META-INF/neoforge.mods.toml";

View file

@ -13,7 +13,8 @@ beforeEach(async () => {
"fabric.jar": await zipFile([__dirname, "../../content/fabric/fabric.mod.json"]), "fabric.jar": await zipFile([__dirname, "../../content/fabric/fabric.mod.json"]),
"quilt.jar": await zipFile([__dirname, "../../content/quilt/quilt.mod.json"]), "quilt.jar": await zipFile([__dirname, "../../content/quilt/quilt.mod.json"]),
"forge.jar": await zipFile([__dirname, "../../content/forge/mods.toml"], "META-INF/mods.toml"), "forge.jar": await zipFile([__dirname, "../../content/forge/mods.toml"], "META-INF/mods.toml"),
"neoforge.jar": await zipFile([__dirname, "../../content/neoforge/mods.toml"], "META-INF/mods.toml"), "neoforge.jar": await zipFile([__dirname, "../../content/neoforge/neoforge.mods.toml"], "META-INF/neoforge.mods.toml"),
"neoforge.legacy.jar": await zipFile([__dirname, "../../content/neoforge/neoforge.mods.toml"], "META-INF/mods.toml"),
"text.txt": "", "text.txt": "",
}); });
}); });

View file

@ -5,7 +5,7 @@ import { NeoForgeMetadataReader } from "@/loaders/neoforge/neoforge-metadata-rea
beforeEach(async () => { beforeEach(async () => {
mockFs({ mockFs({
"neoforge.mod.jar": await zipFile([__dirname, "../../../content/neoforge/mods.toml"], "META-INF/mods.toml"), "neoforge.mod.jar": await zipFile([__dirname, "../../../content/neoforge/neoforge.mods.toml"], "META-INF/neoforge.mods.toml"),
"text.txt": "", "text.txt": "",
}); });
}); });
@ -15,7 +15,7 @@ afterEach(() => {
}); });
describe("NeoForgeMetadataReader", () => { describe("NeoForgeMetadataReader", () => {
test("successfully reads mods.toml", async () => { test("successfully reads neoforge.mods.toml", async () => {
const reader = new NeoForgeMetadataReader(); const reader = new NeoForgeMetadataReader();
const metadata = await reader.readMetadataFile("neoforge.mod.jar"); const metadata = await reader.readMetadataFile("neoforge.mod.jar");

View file

@ -7,7 +7,7 @@ import { RawNeoForgeMetadata } from "@/loaders/neoforge/raw-neoforge-metadata";
import { NeoForgeMetadata } from "@/loaders/neoforge/neoforge-metadata"; import { NeoForgeMetadata } from "@/loaders/neoforge/neoforge-metadata";
const RAW_METADATA: RawNeoForgeMetadata = Object.freeze(parseToml( const RAW_METADATA: RawNeoForgeMetadata = Object.freeze(parseToml(
readFileSync(resolvePath(__dirname, "../../../content/neoforge/mods.toml"), "utf8") readFileSync(resolvePath(__dirname, "../../../content/neoforge/neoforge.mods.toml"), "utf8")
)); ));
describe("NeoForgeMetadata", () => { describe("NeoForgeMetadata", () => {