mirror of
https://github.com/unmojang/meta.git
synced 2025-09-27 21:23:43 -04:00
366 lines
10 KiB
Python
366 lines
10 KiB
Python
from datetime import datetime
|
|
from typing import Optional, List, Dict
|
|
|
|
from pydantic import Field
|
|
|
|
from . import MetaBase, GradleSpecifier, Library
|
|
from .mojang import MojangVersion
|
|
|
|
|
|
class ForgeFile(MetaBase):
|
|
classifier: str
|
|
hash: str
|
|
extension: str
|
|
|
|
def filename(self, long_version):
|
|
return "%s-%s-%s.%s" % ("forge", long_version, self.classifier, self.extension)
|
|
|
|
def url(self, long_version):
|
|
return "https://maven.minecraftforge.net/net/minecraftforge/forge/%s/%s" % (
|
|
long_version,
|
|
self.filename(long_version),
|
|
)
|
|
|
|
|
|
class ForgeEntry(MetaBase):
|
|
long_version: str = Field(alias="longversion")
|
|
mc_version: str = Field(alias="mcversion")
|
|
version: str
|
|
build: int
|
|
branch: Optional[str]
|
|
latest: Optional[bool]
|
|
recommended: Optional[bool]
|
|
files: Optional[Dict[str, ForgeFile]]
|
|
|
|
|
|
class ForgeMCVersionInfo(MetaBase):
|
|
latest: Optional[str]
|
|
recommended: Optional[str]
|
|
versions: List[str] = Field([])
|
|
|
|
|
|
class DerivedForgeIndex(MetaBase):
|
|
versions: Dict[str, ForgeEntry] = Field({})
|
|
by_mc_version: Dict[str, ForgeMCVersionInfo] = Field({}, alias="by_mcversion")
|
|
|
|
|
|
class FMLLib(
|
|
MetaBase
|
|
): # old ugly stuff. Maybe merge this with Library or Library later
|
|
filename: str
|
|
checksum: str
|
|
ours: bool
|
|
|
|
|
|
class ForgeInstallerProfileInstallSection(MetaBase):
|
|
"""
|
|
"install": {
|
|
"profileName": "Forge",
|
|
"target":"Forge8.9.0.753",
|
|
"path":"net.minecraftforge:minecraftforge:8.9.0.753",
|
|
"version":"Forge 8.9.0.753",
|
|
"filePath":"minecraftforge-universal-1.6.1-8.9.0.753.jar",
|
|
"welcome":"Welcome to the simple Forge installer.",
|
|
"minecraft":"1.6.1",
|
|
"logo":"/big_logo.png",
|
|
"mirrorList": "http://files.minecraftforge.net/mirror-brand.list"
|
|
},
|
|
"install": {
|
|
"profileName": "forge",
|
|
"target":"1.11-forge1.11-13.19.0.2141",
|
|
"path":"net.minecraftforge:forge:1.11-13.19.0.2141",
|
|
"version":"forge 1.11-13.19.0.2141",
|
|
"filePath":"forge-1.11-13.19.0.2141-universal.jar",
|
|
"welcome":"Welcome to the simple forge installer.",
|
|
"minecraft":"1.11",
|
|
"mirrorList" : "http://files.minecraftforge.net/mirror-brand.list",
|
|
"logo":"/big_logo.png",
|
|
"modList":"none"
|
|
},
|
|
"""
|
|
|
|
profile_name: str = Field(alias="profileName")
|
|
target: str
|
|
path: GradleSpecifier
|
|
version: str
|
|
file_path: str = Field(alias="filePath")
|
|
welcome: str
|
|
minecraft: str
|
|
logo: str
|
|
mirror_list: str = Field(alias="mirrorList")
|
|
mod_list: Optional[str] = Field(alias="modList")
|
|
|
|
|
|
class ForgeLibrary(Library):
|
|
url: Optional[str]
|
|
server_req: Optional[bool] = Field(alias="serverreq")
|
|
client_req: Optional[bool] = Field(alias="clientreq")
|
|
checksums: Optional[List[str]]
|
|
comment: Optional[str]
|
|
|
|
|
|
class ForgeVersionFile(MojangVersion):
|
|
libraries: Optional[List[ForgeLibrary]] # overrides Mojang libraries
|
|
inherits_from: Optional[str] = Field("inheritsFrom")
|
|
jar: Optional[str]
|
|
|
|
|
|
class ForgeOptional(MetaBase):
|
|
"""
|
|
"optionals": [
|
|
{
|
|
"name": "Mercurius",
|
|
"client": true,
|
|
"server": true,
|
|
"default": true,
|
|
"inject": true,
|
|
"desc": "A mod that collects statistics about Minecraft and your system.<br>Useful for Forge to understand how Minecraft/Forge are used.",
|
|
"url": "http://www.minecraftforge.net/forum/index.php?topic=43278.0",
|
|
"artifact": "net.minecraftforge:MercuriusUpdater:1.11.2",
|
|
"maven": "http://maven.minecraftforge.net/"
|
|
}
|
|
]
|
|
"""
|
|
|
|
name: Optional[str]
|
|
client: Optional[bool]
|
|
server: Optional[bool]
|
|
default: Optional[bool]
|
|
inject: Optional[bool]
|
|
desc: Optional[str]
|
|
url: Optional[str]
|
|
artifact: Optional[GradleSpecifier]
|
|
maven: Optional[str]
|
|
|
|
|
|
class ForgeInstallerProfile(MetaBase):
|
|
install: ForgeInstallerProfileInstallSection
|
|
version_info: ForgeVersionFile = Field(alias="versionInfo")
|
|
optionals: Optional[List[ForgeOptional]]
|
|
|
|
|
|
class ForgeLegacyInfo(MetaBase):
|
|
release_time: Optional[datetime] = Field(alias="releaseTime")
|
|
size: Optional[int]
|
|
sha256: Optional[str]
|
|
sha1: Optional[str]
|
|
|
|
|
|
class ForgeLegacyInfoList(MetaBase):
|
|
number: Dict[str, ForgeLegacyInfo] = Field({})
|
|
|
|
|
|
class DataSpec(MetaBase):
|
|
client: Optional[str]
|
|
server: Optional[str]
|
|
|
|
|
|
class ProcessorSpec(MetaBase):
|
|
jar: Optional[str]
|
|
classpath: Optional[List[str]]
|
|
args: Optional[List[str]]
|
|
outputs: Optional[Dict[str, str]]
|
|
sides: Optional[List[str]]
|
|
|
|
|
|
class ForgeInstallerProfileV2(MetaBase):
|
|
_comment: Optional[List[str]]
|
|
spec: Optional[int]
|
|
profile: Optional[str]
|
|
version: Optional[str]
|
|
icon: Optional[str]
|
|
json_data: Optional[str] = Field(alias="json")
|
|
path: Optional[GradleSpecifier]
|
|
logo: Optional[str]
|
|
minecraft: Optional[str]
|
|
welcome: Optional[str]
|
|
data: Optional[Dict[str, DataSpec]]
|
|
processors: Optional[List[ProcessorSpec]]
|
|
libraries: Optional[List[Library]]
|
|
mirror_list: Optional[str] = Field(alias="mirrorList")
|
|
server_jar_path: Optional[str] = Field(alias="serverJarPath")
|
|
|
|
|
|
class InstallerInfo(MetaBase):
|
|
sha1hash: Optional[str]
|
|
sha256hash: Optional[str]
|
|
size: Optional[int]
|
|
|
|
|
|
# A post-processed entry constructed from the reconstructed Forge version index
|
|
class ForgeVersion:
|
|
def __init__(self, entry: ForgeEntry):
|
|
self.build = entry.build
|
|
self.rawVersion = entry.version
|
|
self.mc_version = entry.mc_version
|
|
self.mc_version_sane = self.mc_version.replace("_pre", "-pre", 1)
|
|
self.branch = entry.branch
|
|
self.installer_filename = None
|
|
self.installer_url = None
|
|
self.universal_filename = None
|
|
self.universal_url = None
|
|
self.changelog_url = None
|
|
self.long_version = "%s-%s" % (self.mc_version, self.rawVersion)
|
|
if self.branch is not None:
|
|
self.long_version += "-%s" % self.branch
|
|
|
|
# this comment's whole purpose is to say this: cringe
|
|
for classifier, file in entry.files.items():
|
|
extension = file.extension
|
|
filename = file.filename(self.long_version)
|
|
url = file.url(self.long_version)
|
|
if (classifier == "installer") and (extension == "jar"):
|
|
self.installer_filename = filename
|
|
self.installer_url = url
|
|
if (classifier == "universal" or classifier == "client") and (
|
|
extension == "jar" or extension == "zip"
|
|
):
|
|
self.universal_filename = filename
|
|
self.universal_url = url
|
|
if (classifier == "changelog") and (extension == "txt"):
|
|
self.changelog_url = url
|
|
|
|
def name(self):
|
|
return "Forge %d" % self.build
|
|
|
|
def uses_installer(self):
|
|
if self.installer_url is None:
|
|
return False
|
|
if self.mc_version == "1.5.2":
|
|
return False
|
|
return True
|
|
|
|
def filename(self):
|
|
if self.uses_installer():
|
|
return self.installer_filename
|
|
return self.universal_filename
|
|
|
|
def url(self):
|
|
if self.uses_installer():
|
|
return self.installer_url
|
|
return self.universal_url
|
|
|
|
def is_supported(self):
|
|
if self.url() is None:
|
|
return False
|
|
|
|
foo = self.rawVersion.split(".")
|
|
if len(foo) < 1:
|
|
return False
|
|
|
|
major_version = foo[0]
|
|
if not major_version.isnumeric():
|
|
return False
|
|
|
|
# majorVersion = int(majorVersionStr)
|
|
# if majorVersion >= 37:
|
|
# return False
|
|
|
|
return True
|
|
|
|
|
|
def fml_libs_for_version(mc_version: str) -> List[FMLLib]:
|
|
argo_2_25 = FMLLib(
|
|
filename="argo-2.25.jar",
|
|
checksum="bb672829fde76cb163004752b86b0484bd0a7f4b",
|
|
ours=False,
|
|
)
|
|
argo_small_3_2 = FMLLib(
|
|
filename="argo-small-3.2.jar",
|
|
checksum="58912ea2858d168c50781f956fa5b59f0f7c6b51",
|
|
ours=False,
|
|
)
|
|
guava_12_0_1 = FMLLib(
|
|
filename="guava-12.0.1.jar",
|
|
checksum="b8e78b9af7bf45900e14c6f958486b6ca682195f",
|
|
ours=False,
|
|
)
|
|
guava_14_0_rc3 = FMLLib(
|
|
filename="guava-14.0-rc3.jar",
|
|
checksum="931ae21fa8014c3ce686aaa621eae565fefb1a6a",
|
|
ours=False,
|
|
)
|
|
asm_all_4_0 = FMLLib(
|
|
filename="asm-all-4.0.jar",
|
|
checksum="98308890597acb64047f7e896638e0d98753ae82",
|
|
ours=False,
|
|
)
|
|
asm_all_4_1 = FMLLib(
|
|
filename="asm-all-4.1.jar",
|
|
checksum="054986e962b88d8660ae4566475658469595ef58",
|
|
ours=False,
|
|
)
|
|
bcprov_jdk15on_147 = FMLLib(
|
|
filename="bcprov-jdk15on-147.jar",
|
|
checksum="b6f5d9926b0afbde9f4dbe3db88c5247be7794bb",
|
|
ours=False,
|
|
)
|
|
bcprov_jdk15on_148 = FMLLib(
|
|
filename="bcprov-jdk15on-148.jar",
|
|
checksum="960dea7c9181ba0b17e8bab0c06a43f0a5f04e65",
|
|
ours=True,
|
|
)
|
|
scala_library = FMLLib(
|
|
filename="scala-library.jar",
|
|
checksum="458d046151ad179c85429ed7420ffb1eaf6ddf85",
|
|
ours=True,
|
|
)
|
|
|
|
deobfuscation_data_1_5 = FMLLib(
|
|
filename="deobfuscation_data_1.5.zip",
|
|
checksum="5f7c142d53776f16304c0bbe10542014abad6af8",
|
|
ours=False,
|
|
)
|
|
|
|
deobfuscation_data_1_5_1 = FMLLib(
|
|
filename="deobfuscation_data_1.5.1.zip",
|
|
checksum="22e221a0d89516c1f721d6cab056a7e37471d0a6",
|
|
ours=False,
|
|
)
|
|
deobfuscation_data_1_5_2 = FMLLib(
|
|
filename="deobfuscation_data_1.5.2.zip",
|
|
checksum="446e55cd986582c70fcf12cb27bc00114c5adfd9",
|
|
ours=False,
|
|
)
|
|
if mc_version == "1.3.2":
|
|
return [argo_2_25, guava_12_0_1, asm_all_4_0]
|
|
elif mc_version in [
|
|
"1.4",
|
|
"1.4.1",
|
|
"1.4.2",
|
|
"1.4.3",
|
|
"1.4.4",
|
|
"1.4.5",
|
|
"1.4.6",
|
|
"1.4.7",
|
|
]:
|
|
return [argo_2_25, guava_12_0_1, asm_all_4_0, bcprov_jdk15on_147]
|
|
elif mc_version == "1.5":
|
|
return [
|
|
argo_small_3_2,
|
|
guava_14_0_rc3,
|
|
asm_all_4_1,
|
|
bcprov_jdk15on_148,
|
|
deobfuscation_data_1_5,
|
|
scala_library,
|
|
]
|
|
elif mc_version == "1.5.1":
|
|
return [
|
|
argo_small_3_2,
|
|
guava_14_0_rc3,
|
|
asm_all_4_1,
|
|
bcprov_jdk15on_148,
|
|
deobfuscation_data_1_5_1,
|
|
scala_library,
|
|
]
|
|
elif mc_version == "1.5.2":
|
|
return [
|
|
argo_small_3_2,
|
|
guava_14_0_rc3,
|
|
asm_all_4_1,
|
|
bcprov_jdk15on_148,
|
|
deobfuscation_data_1_5_2,
|
|
scala_library,
|
|
]
|
|
return []
|