mirror of
https://github.com/Kir-Antipov/mc-publish.git
synced 2024-11-21 16:00:59 -05:00
Added support for neoforge.mods.toml
See https://neoforged.net/news/20.5release/ Closes #118
This commit is contained in:
parent
c0f30ad683
commit
bb3c76b765
6 changed files with 15 additions and 6 deletions
|
@ -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");
|
||||||
|
|
|
@ -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";
|
||||||
|
|
|
@ -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": "",
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -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");
|
||||||
|
|
|
@ -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", () => {
|
||||||
|
|
Loading…
Reference in a new issue