mirror of
https://github.com/unmojang/meta.git
synced 2025-09-24 03:31:03 -04:00
Enable schema checking and implement mojang/multimc schema separation
This commit is contained in:
parent
a1f0e4271d
commit
8aa76d5909
@ -182,7 +182,7 @@ class _JsonObjectPrivateInstanceVariables(object):
|
||||
@six.add_metaclass(JsonObjectMeta)
|
||||
class JsonObjectBase(object):
|
||||
|
||||
_allow_dynamic_properties = True
|
||||
_allow_dynamic_properties = False
|
||||
_validate_required_lazily = False
|
||||
|
||||
_properties_by_attr = None
|
||||
|
73
metautil.py
73
metautil.py
@ -111,7 +111,7 @@ class MojangAssets (MojangArtifactBase):
|
||||
totalSize = IntegerProperty()
|
||||
|
||||
class MojangLibraryDownloads(JsonObject):
|
||||
artifact = MojangArtifact(exclude_if_none=True)
|
||||
artifact = ObjectProperty(MojangArtifact, exclude_if_none=True, default=None)
|
||||
classifiers = DictProperty(MojangArtifact, exclude_if_none=True, default=None)
|
||||
|
||||
class MojangLibraryExtractRules(JsonObject):
|
||||
@ -132,31 +132,88 @@ class MojangLibraryExtractRules(JsonObject):
|
||||
'''
|
||||
|
||||
class OSRule (JsonObject):
|
||||
name = StringProperty(choices=["osx", "linux", "windows"])
|
||||
name = StringProperty(choices=["osx", "linux", "windows"], required = True)
|
||||
version = StringProperty(exclude_if_none=True, default=None)
|
||||
|
||||
class MojangRule (JsonObject):
|
||||
action = StringProperty(choices=["allow", "disallow"])
|
||||
action = StringProperty(choices=["allow", "disallow"], required = True)
|
||||
os = ObjectProperty(OSRule, exclude_if_none=True, default=None)
|
||||
|
||||
class MojangLibrary (JsonObject):
|
||||
extract = ObjectProperty(MojangLibraryExtractRules, exclude_if_none=True, default=None)
|
||||
name = GradleSpecifierProperty()
|
||||
downloads = ObjectProperty(MojangLibraryDownloads)
|
||||
name = GradleSpecifierProperty(required = True)
|
||||
downloads = ObjectProperty(MojangLibraryDownloads, exclude_if_none=True, default=None)
|
||||
natives = DictProperty(StringProperty, exclude_if_none=True, default=None)
|
||||
rules = ListProperty(MojangRule, exclude_if_none=True, default=None)
|
||||
|
||||
class MojangLoggingArtifact (MojangArtifactBase):
|
||||
id = StringProperty()
|
||||
|
||||
class MojangLogging (JsonObject):
|
||||
file = ObjectProperty(MojangLoggingArtifact, required = True)
|
||||
argument = StringProperty(required = True)
|
||||
type = StringProperty(required = True, choices=["log4j2-xml"])
|
||||
|
||||
class UnknownMojangVersionException(Exception):
|
||||
"""Exception raised for unknown Mojang version file format versions.
|
||||
|
||||
Attributes:
|
||||
message -- explanation of the error
|
||||
"""
|
||||
def __init__(self, message):
|
||||
self.message = message
|
||||
|
||||
def validateSupportedMojangVersion(version):
|
||||
supportedVersion = 18
|
||||
if version > supportedVersion:
|
||||
raise UnknownMojangVersionException("Unsupported Mojang format version: %d. Max supported is: %d" % (version, supportedVersion))
|
||||
|
||||
class MojangVersionFile (JsonObject):
|
||||
assetIndex = ObjectProperty(MojangAssets, exclude_if_none=True, default=None)
|
||||
assets = StringProperty(exclude_if_none=True, default=None)
|
||||
downloads = DictProperty(MojangArtifactBase, exclude_if_none=True, default=None)
|
||||
id = StringProperty(exclude_if_none=True, default=None)
|
||||
libraries = ListProperty(MojangLibrary)
|
||||
libraries = ListProperty(MojangLibrary, exclude_if_none=True, default=None)
|
||||
mainClass = StringProperty(exclude_if_none=True, default=None)
|
||||
processArguments = StringProperty(exclude_if_none=True, default=None)
|
||||
minecraftArguments = StringProperty(exclude_if_none=True, default=None)
|
||||
minimumLauncherVersion = IntegerProperty(exclude_if_none=True, default=None)
|
||||
releaseTime = ISOTimestampProperty()
|
||||
minimumLauncherVersion = IntegerProperty(exclude_if_none=True, default=None, validators=validateSupportedMojangVersion)
|
||||
releaseTime = ISOTimestampProperty(exclude_if_none=True, default=None)
|
||||
time = ISOTimestampProperty(exclude_if_none=True, default=None)
|
||||
type = StringProperty(exclude_if_none=True, default=None)
|
||||
logging = DictProperty(MojangLogging, exclude_if_none=True, default=None)
|
||||
|
||||
class MultiMCVersionFile (JsonObject):
|
||||
name = StringProperty(required=True)
|
||||
version = StringProperty(required=True)
|
||||
fileId = StringProperty(required=True)
|
||||
assetIndex = ObjectProperty(MojangAssets, exclude_if_none=True, default=None)
|
||||
downloads = DictProperty(MojangArtifactBase, exclude_if_none=True, default=None)
|
||||
libraries = ListProperty(MojangLibrary, exclude_if_none=True, default=None)
|
||||
mainClass = StringProperty(exclude_if_none=True, default=None)
|
||||
appletClass = StringProperty(exclude_if_none=True, default=None)
|
||||
minecraftArguments = StringProperty(exclude_if_none=True, default=None)
|
||||
releaseTime = ISOTimestampProperty(exclude_if_none=True, default=None)
|
||||
time = ISOTimestampProperty(exclude_if_none=True, default=None)
|
||||
type = StringProperty(exclude_if_none=True, default=None)
|
||||
|
||||
def MojangToMultiMC (file, name, fileId, version):
|
||||
mmcFile = MultiMCVersionFile(
|
||||
{
|
||||
"name": name,
|
||||
"fileId": fileId,
|
||||
"version": version
|
||||
}
|
||||
)
|
||||
mmcFile.assetIndex = file.assetIndex
|
||||
mmcFile.downloads = file.downloads
|
||||
mmcFile.libraries = file.libraries
|
||||
mmcFile.mainClass = file.mainClass
|
||||
mmcFile.minecraftArguments = file.minecraftArguments
|
||||
mmcFile.releaseTime = file.releaseTime
|
||||
# time should not be set.
|
||||
mmcFile.type = file.type
|
||||
return mmcFile
|
||||
|
||||
'''
|
||||
The MultiMC static override file for legacy looks like this:
|
||||
|
@ -21,8 +21,13 @@ def addOrGetBucket(buckets, rules):
|
||||
if ruleHash in buckets:
|
||||
bucket = buckets[ruleHash]
|
||||
else:
|
||||
bucket = MojangVersionFile()
|
||||
bucket.name = "LWJGL"
|
||||
bucket = MultiMCVersionFile(
|
||||
{
|
||||
"name": "LWJGL",
|
||||
"version": "undetermined",
|
||||
"fileId": "org.lwjgl"
|
||||
}
|
||||
)
|
||||
bucket.type = "release"
|
||||
buckets[ruleHash] = bucket
|
||||
return bucket
|
||||
@ -46,7 +51,8 @@ legacyIDs = set(staticVersionlist.versions.keys())
|
||||
lwjglVersions = {}
|
||||
for filename in os.listdir('mojang/versions'):
|
||||
with open("mojang/versions/" + filename) as json_file:
|
||||
versionFile = MojangVersionFile(json.load(json_file))
|
||||
mojangVersionFile = MojangVersionFile(json.load(json_file))
|
||||
versionFile = MojangToMultiMC(mojangVersionFile, "Minecraft", "net.minecraft", mojangVersionFile.id)
|
||||
libs_minecraft = []
|
||||
buckets = {}
|
||||
for lib in versionFile.libraries:
|
||||
@ -61,6 +67,8 @@ for filename in os.listdir('mojang/versions'):
|
||||
bucket = addOrGetBucket(buckets, rules)
|
||||
if specifier.group == "org.lwjgl.lwjgl" and specifier.artifact == "lwjgl":
|
||||
bucket.version = specifier.version
|
||||
if not bucket.libraries:
|
||||
bucket.libraries = []
|
||||
bucket.libraries.append(libCopy)
|
||||
# set the LWJGL release time to the oldest Minecraft release it appeared in
|
||||
if bucket.releaseTime == None:
|
||||
@ -83,8 +91,7 @@ for filename in os.listdir('mojang/versions'):
|
||||
keyBucket.libraries = sorted(keyBucket.libraries, key=itemgetter('name'))
|
||||
addLWJGLVersion(lwjglVersions, keyBucket)
|
||||
versionFile.libraries = libs_minecraft
|
||||
versionFile.name = "Minecraft"
|
||||
filenameOut = "multimc/net.minecraft/%s.json" % versionFile.id
|
||||
filenameOut = "multimc/net.minecraft/%s.json" % versionFile.version
|
||||
with open(filenameOut, 'w') as outfile:
|
||||
json.dump(versionFile.to_json(), outfile, sort_keys=True, indent=4)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user