Created
November 1, 2021 22:41
-
-
Save MasterGordon/285e0e2e8d6b6ad190be86924830aabf to your computer and use it in GitHub Desktop.
Minecraft Version Listings for building a custom launcher (Vanilla, forge and fabric)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const constants = { | |
minecraftVersionManifest: | |
"https://launchermeta.mojang.com/mc/game/version_manifest_v2.json", | |
forgeVersionMeta: | |
"https://maven.minecraftforge.net/net/minecraftforge/forge/maven-metadata.xml", | |
fabricLoaderVersions: "https://meta.fabricmc.net/v2/versions/loader", | |
fabricSupportedVersions: "https://meta.fabricmc.net/v2/versions/game", | |
}; | |
export default constants; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import axios from "axios"; | |
import constants from "../constants"; | |
import convert from "xml-js"; | |
interface ForgeVersionResponse { | |
metadata: { | |
versioning: { | |
latest: { | |
_text: string; | |
}; | |
release: { | |
_text: string; | |
}; | |
versions: { | |
version: { | |
_text: `${string}-${string}`; | |
}[]; | |
}; | |
}; | |
}; | |
} | |
export interface ForgeVersions { | |
release: { | |
minecraftVersion: string; | |
version: string; | |
}; | |
versions: { | |
[minecraftVersion: string]: string[]; | |
}; | |
} | |
export const getForgeVersions = async () => { | |
const forgeVersionsData = (await axios.get(constants.forgeVersionMeta)).data; | |
const forgeVersionsObject = convert.xml2js(forgeVersionsData, { | |
compact: true, | |
}) as ForgeVersionResponse; | |
const forgeVersions: ForgeVersions = { | |
release: { | |
minecraftVersion: | |
forgeVersionsObject.metadata.versioning.release._text.split("-")[0], | |
version: | |
forgeVersionsObject.metadata.versioning.release._text.split("-")[1], | |
}, | |
versions: {}, | |
}; | |
forgeVersionsObject.metadata.versioning.versions.version.forEach( | |
(version) => { | |
const minecraftVersion = version._text.split("-")[0]; | |
const forgeVersion = version._text.split("-")[1]; | |
forgeVersions.versions[minecraftVersion] ||= []; | |
forgeVersions.versions[minecraftVersion].push(forgeVersion); | |
} | |
); | |
return forgeVersions; | |
}; | |
export interface MinecraftVersion { | |
id: string; | |
releaseTime: string; | |
type: "release" | "snapshot" | "old_beta" | "old_alpha"; | |
} | |
interface MinecraftVersions { | |
latest: { | |
release: string; | |
snapshot: string; | |
}; | |
versions: MinecraftVersion[]; | |
} | |
export const getMinecraftVersions = async () => { | |
const minecraftVersionsData = ( | |
await axios.get(constants.minecraftVersionManifest) | |
).data; | |
const minecraftVersions: MinecraftVersions = { | |
...minecraftVersionsData, | |
}; | |
return minecraftVersions; | |
}; | |
type FabricLoaderVersionsResponse = Array<{ | |
version: string; | |
stable: boolean; | |
}>; | |
type FabricSupportedVersionsResponse = Array<{ | |
version: string; | |
}>; | |
export const getFabricLoaderVersions = async () => { | |
const fabricLoaderVersionsResponse: FabricLoaderVersionsResponse = ( | |
await axios.get(constants.fabricLoaderVersions) | |
).data; | |
return { | |
latest: fabricLoaderVersionsResponse.find((version) => version.stable) | |
?.version as string, | |
versions: fabricLoaderVersionsResponse.map((version) => version.version), | |
}; | |
}; | |
export const getFabricSupportedVersions = async () => { | |
const fabricSupportedVersionsResponse: FabricSupportedVersionsResponse = ( | |
await axios.get(constants.fabricSupportedVersions) | |
).data; | |
return fabricSupportedVersionsResponse.map((version) => version.version); | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment