Experimental - split the script into stages
This commit is contained in:
parent
fa5d40c28c
commit
5a4470bc75
@ -1,8 +1,14 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
mainScript = ""
|
||||||
oldexcepthook = sys.excepthook
|
oldexcepthook = sys.excepthook
|
||||||
def newexcepthook(type,value,traceback):
|
def newexcepthook(type,value,traceback):
|
||||||
|
try:
|
||||||
|
with open(p(omlPath,"error-mainScript.py"),"w",encoding="utf-8") as ms:
|
||||||
|
ms.write(mainScript)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
oldexcepthook(type,value,traceback)
|
oldexcepthook(type,value,traceback)
|
||||||
input("Press ENTER to quit.")
|
input("Press ENTER to quit.")
|
||||||
sys.excepthook = newexcepthook
|
sys.excepthook = newexcepthook
|
||||||
@ -82,244 +88,16 @@ def main():
|
|||||||
break
|
break
|
||||||
print("")
|
print("")
|
||||||
|
|
||||||
print(colored(colorama.Fore.GREEN,"Reading config..."))
|
print(colored(colorama.Fore.GREEN,"Creating main-script from stages..."))
|
||||||
config = configparser.ConfigParser()
|
global mainScript
|
||||||
config.optionxform = str
|
mainScript = ""
|
||||||
config.read(p(omlPath,"config.ini"))
|
for stage in readGenericListFile(p(omlPath,"stages","stages.txt")):
|
||||||
|
mainScript += "# --- STAGE: " +stage + "\r\n"
|
||||||
global lv
|
with open(p(omlPath,"stages",stage),"r",encoding="utf-8") as sf:
|
||||||
|
mainScript += sf.read()
|
||||||
lv = config["default"]
|
mainScript += "\r\n\r\n"
|
||||||
for var in lv:
|
|
||||||
glbs = globals()
|
|
||||||
for glb in glbs:
|
|
||||||
lv[var] = lv[var].replace("$+" +glb+ "$",str(glbs[glb]))
|
|
||||||
|
|
||||||
lcs = locals()
|
|
||||||
for lc in lcs:
|
|
||||||
lv[var] = lv[var].replace("$" +lc+ "$",str(lcs[lc]))
|
|
||||||
|
|
||||||
if lv["osName"] == "":
|
|
||||||
lv["osName"] = platform.system().lower()
|
|
||||||
if lv["osName"] == "darwin": lv["osName"] = "macos"
|
|
||||||
|
|
||||||
if lv["osVersion"] == "":
|
|
||||||
lv["osVersion"] = platform.version()
|
|
||||||
|
|
||||||
if lv["jvmArch"] == "":
|
|
||||||
print(colored(colorama.Fore.GREEN,"Querying JVM architecture..."))
|
|
||||||
if "64-Bit" in subprocess.check_output([lv["java"],"-version"]).decode("utf-8"):
|
|
||||||
lv["jvmArch"] = "amd64"
|
|
||||||
else:
|
|
||||||
lv["jvmArch"] = "x86"
|
|
||||||
|
|
||||||
print("")
|
print("")
|
||||||
for setting in lv:
|
|
||||||
print(colored(colorama.Fore.BLACK,setting+ "=" +str(lv[setting])))
|
|
||||||
|
|
||||||
if len(sys.argv) > 1:
|
print(colored(colorama.Fore.GREEN,"Running main-script..."))
|
||||||
for arg in sys.argv[1:]:
|
runCode(mainScript,False,"main-script")
|
||||||
if arg.startswith("-"): continue
|
|
||||||
argSplit = arg.split("=",1)
|
|
||||||
if len(argSplit) > 1:
|
|
||||||
lv[argSplit[0]] = argSplit[1]
|
|
||||||
else:
|
|
||||||
lv[argSplit[0]] = True
|
|
||||||
|
|
||||||
if not lv["osName"] in ["windows","linux","macos"]:
|
|
||||||
print(colored(colorama.Fore.YELLOW,"\nWarning, unsupported OS detected: '" +lv["osName"]+ "'"),file=sys.stderr)
|
|
||||||
print("Needs to be either windows, linux or macos. Define it with osName=name in the config.",file=sys.stderr)
|
|
||||||
|
|
||||||
print("")
|
|
||||||
if not "version" in lv: lv["version"] = input("Version ID: ")
|
|
||||||
if "-downloadonly" in sys.argv: lv["name"] = "Player"
|
|
||||||
if not "name" in lv: lv["name"] = input("Player name: ")
|
|
||||||
global tmpFile
|
|
||||||
tmpFile = p(lv["gamePath"],"file.tmp")
|
|
||||||
if os.path.isfile(tmpFile): os.remove(tmpFile)
|
|
||||||
|
|
||||||
launcherVariables = {}
|
|
||||||
versionsPath = p(lv["gamePath"],"versions")
|
|
||||||
libraryPath = p(lv["gamePath"],"libraries")
|
|
||||||
nativePath = p(lv["gamePath"],"natives")
|
|
||||||
versionPath = p(lv["gamePath"],"versions",lv["version"])
|
|
||||||
nativesOutPath = p(lv["gamePath"],"natives-extracted",lv["version"],lv["osName"]+ "." +lv["jvmArch"])
|
|
||||||
assetsPath = p(lv["gamePath"],"assets")
|
|
||||||
|
|
||||||
print(colored(colorama.Fore.GREEN,"Scanning .json(s)..."))
|
|
||||||
clientJson,libraries,arguments,jvmArguments = processVersion(versionsPath,libraryPath,nativePath,lv["version"])
|
|
||||||
|
|
||||||
try:
|
|
||||||
launcherVariables["assets_index_name"] = findInChain(versionsPath,lv["version"],["assets"])
|
|
||||||
except:
|
|
||||||
print(colored(colorama.Fore.YELLOW,"> Could not find assets_index_name, assuming pre-1.6"),file=sys.stderr)
|
|
||||||
launcherVariables["assets_index_name"] = "pre-1.6"
|
|
||||||
input()
|
|
||||||
|
|
||||||
print(colored(colorama.Fore.GREEN,"\nDownloading libraries..."))
|
|
||||||
for library in libraries:
|
|
||||||
if "url" in library:
|
|
||||||
print(colored(colorama.Fore.BLACK,getLibraryPrettyName(library)))
|
|
||||||
try:
|
|
||||||
fileDl(library["url"],library["filePathOS"],read = False)
|
|
||||||
except Exception as e:
|
|
||||||
print(colored(colorama.Fore.RED,"> Could not download: ") +str(e),file=sys.stderr)
|
|
||||||
else:
|
|
||||||
if library["dumb"] == True:
|
|
||||||
try:
|
|
||||||
fileDl(library["url"] + ".sha1",library["filePathOS"] + ".sha1",read = False)
|
|
||||||
except Exception as e:
|
|
||||||
print(colored(colorama.Fore.RED,"> Could not download sha1 hash: ") +str(e),file=sys.stderr)
|
|
||||||
|
|
||||||
if "-verifydata" in sys.argv: checkLibraryHash(library)
|
|
||||||
|
|
||||||
if "-verifydata" in sys.argv: # assets
|
|
||||||
print(colored(colorama.Fore.GREEN,"\nVerifying assets..."))
|
|
||||||
assetJson = False
|
|
||||||
with open(p(assetsPath,"indexes",launcherVariables["assets_index_name"] + ".json"),"r") as fileh: assetJson = json.loads(fileh.read())
|
|
||||||
|
|
||||||
for asset in assetJson["objects"]:
|
|
||||||
hash = assetJson["objects"][asset]["hash"]
|
|
||||||
assetp = p(assetsPath,"objects",hash[:2],hash)
|
|
||||||
if not os.path.isfile(assetp):
|
|
||||||
print(colored(colorama.Fore.RED,assetp+ " is missing!"),file=sys.stderr)
|
|
||||||
continue
|
|
||||||
if hash != getFileHash(assetp):
|
|
||||||
print(colored(colorama.Fore.RED,assetp+ " is corrupt!"),file=sys.stderr)
|
|
||||||
|
|
||||||
if "-downloadonly" in sys.argv:
|
|
||||||
exit(0)
|
|
||||||
|
|
||||||
loadLibraries = {}
|
|
||||||
for library in libraries:
|
|
||||||
if "data" in library and "rules" in library["data"] and checkRules(library["data"]["rules"]) == "disallow": continue
|
|
||||||
if library["type"] == "client":
|
|
||||||
loadLibraries["client:" +library["filePathOS"]] = library
|
|
||||||
elif library["type"] == "library":
|
|
||||||
loadLibraries[library["package"] + ":" +library["name"]] = library
|
|
||||||
|
|
||||||
separator = ";"
|
|
||||||
libraryList = ""
|
|
||||||
if lv["osName"] != "windows": separator = ":"
|
|
||||||
print(colored(colorama.Fore.GREEN,"\nLoaded libraries:"))
|
|
||||||
clientJar = ""
|
|
||||||
for libraryID in loadLibraries:
|
|
||||||
library = loadLibraries[libraryID]
|
|
||||||
if os.path.isfile(library["filePathOS"]):
|
|
||||||
if library["type"] == "client":
|
|
||||||
print("Client: " +library["filePathOS"])
|
|
||||||
clientJar = library["filePathOS"]
|
|
||||||
else:
|
|
||||||
print(colored(colorama.Fore.BLACK,getLibraryPrettyName(library)))
|
|
||||||
else:
|
|
||||||
print(colored(colorama.Fore.RED,"> Lib not found: ") +getLibraryPrettyName(library),file=sys.stderr)
|
|
||||||
continue
|
|
||||||
|
|
||||||
libraryList += library["filePathOS"] + separator
|
|
||||||
libraryList = libraryList[:-1]
|
|
||||||
|
|
||||||
print(colored(colorama.Fore.GREEN,"\nExtracting natives..."))
|
|
||||||
if not os.path.isdir(nativesOutPath): os.makedirs(nativesOutPath)
|
|
||||||
for library in libraries:
|
|
||||||
if library["type"] == "native":
|
|
||||||
if "rules" in library["data"] and checkRules(library["data"]["rules"]) == "disallow": continue
|
|
||||||
if lv["osName"] != "macos":
|
|
||||||
if library["nativeOS"] != lv["osName"]: continue
|
|
||||||
else:
|
|
||||||
if not library["nativeOS"] in ["macos","osx"]: continue
|
|
||||||
|
|
||||||
if not os.path.isfile(library["filePathOS"]):
|
|
||||||
print(colored(colorama.Fore.RED,"> Native not found: ") +getLibraryPrettyName(library),file=sys.stderr)
|
|
||||||
continue
|
|
||||||
|
|
||||||
print(colored(colorama.Fore.BLACK,getLibraryPrettyName(library)))
|
|
||||||
proc = subprocess.Popen(["7z","x",library["filePathOS"],"-o" +nativesOutPath,"-aos"],stdout=subprocess.DEVNULL)
|
|
||||||
rtn = proc.wait()
|
|
||||||
if rtn != 0:
|
|
||||||
print(colored(colorama.Fore.RED,"> Native could not be extracted: ") +getLibraryPrettyName(library),file=sys.stderr)
|
|
||||||
|
|
||||||
print(colored(colorama.Fore.GREEN,"\nSetting up launcher variables..."))
|
|
||||||
launcherVariables["auth_player_name"] = lv["name"]
|
|
||||||
launcherVariables["version_name"] = findInChainDeepest(versionsPath,lv["version"],["id"])
|
|
||||||
launcherVariables["game_directory"] = lv["gamePath"]
|
|
||||||
launcherVariables["assets_root"] = assetsPath
|
|
||||||
launcherVariables["auth_access_token"] = "-"
|
|
||||||
launcherVariables["auth_uuid"] = hashlib.md5(lv["name"].encode('utf-8')).hexdigest()
|
|
||||||
launcherVariables["user_type"] = "offline"
|
|
||||||
launcherVariables["version_type"] = clientJson["type"]
|
|
||||||
launcherVariables["natives_directory"] = nativesOutPath
|
|
||||||
launcherVariables["launcher_name"] = "offline-minecraft-launcher"
|
|
||||||
launcherVariables["launcher_version"] = "0.0"
|
|
||||||
launcherVariables["classpath"] = libraryList
|
|
||||||
launcherVariables["game_assets"] = assetsPath
|
|
||||||
launcherVariables["auth_session"] = "-"
|
|
||||||
launcherVariables["user_properties"] = "{}"
|
|
||||||
|
|
||||||
if lv["profileFolder"] == "1":
|
|
||||||
profilePath = p(lv["gamePath"],"profiles")
|
|
||||||
launcherVariables["game_directory"] = p(profilePath,lv["name"],lv["version"],".minecraft")
|
|
||||||
if not os.path.isdir(launcherVariables["game_directory"]): os.makedirs(launcherVariables["game_directory"])
|
|
||||||
os.chdir(launcherVariables["game_directory"])
|
|
||||||
|
|
||||||
if launcherVariables["game_directory"].replace(pUp(launcherVariables["game_directory"]) + os.sep,"",1) == ".minecraft":
|
|
||||||
print(colored(colorama.Fore.MAGENTA,"> game_directory is called .minecraft, setting APPDATA/HOME environment variables to parent directory."))
|
|
||||||
os.environ["APPDATA"] = pUp(launcherVariables["game_directory"])
|
|
||||||
os.environ["HOME"] = os.environ["APPDATA"]
|
|
||||||
|
|
||||||
# JVM arguments:
|
|
||||||
args = []
|
|
||||||
|
|
||||||
if not findArgument(jvmArguments,"-Djava-library.path="):
|
|
||||||
args.append("-Djava.library.path=" +nativesOutPath)
|
|
||||||
|
|
||||||
if not findArgument(jvmArguments,"-Dminecraft.launcher.brand="):
|
|
||||||
args.append("-Dminecraft.launcher.brand=" +launcherVariables["launcher_name"])
|
|
||||||
|
|
||||||
if not findArgument(jvmArguments,"-Dminecraft.launcher.version="):
|
|
||||||
args.append("-Dminecraft.launcher.version=" +launcherVariables["launcher_version"])
|
|
||||||
|
|
||||||
if lv["osName"] == "windows":
|
|
||||||
if not findArgument(jvmArguments,"-XX:HeapDumpPath="):
|
|
||||||
args.append("-XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump")
|
|
||||||
|
|
||||||
args.append("-Dminecraft.client.jar=" +clientJar)
|
|
||||||
|
|
||||||
if not findArgument(jvmArguments,"-cp"):
|
|
||||||
args.append("-cp")
|
|
||||||
args.append(libraryList)
|
|
||||||
|
|
||||||
for arg in jvmArguments:
|
|
||||||
for var in launcherVariables:
|
|
||||||
arg = arg.replace("${" +var+ "}",launcherVariables[var])
|
|
||||||
args.append(arg)
|
|
||||||
args = args + json.loads(lv["jvmArguments"])
|
|
||||||
args.append(clientJson["mainClass"])
|
|
||||||
|
|
||||||
for arg in arguments:
|
|
||||||
for var in launcherVariables:
|
|
||||||
arg = arg.replace("${" +var+ "}",launcherVariables[var])
|
|
||||||
args.append(arg)
|
|
||||||
|
|
||||||
if not findArgument(args,"--gameDir"):
|
|
||||||
args.append("--gameDir")
|
|
||||||
args.append(launcherVariables["game_directory"])
|
|
||||||
|
|
||||||
if not findArgument(args,"--assetsDir"):
|
|
||||||
args.append("--assetsDir")
|
|
||||||
args.append(launcherVariables["assets_root"])
|
|
||||||
|
|
||||||
print(colored(colorama.Fore.GREEN,"\nLaunching Minecraft..."))
|
|
||||||
if lv["console"] == "1":
|
|
||||||
proc = subprocess.Popen([lv["java"]] + args)
|
|
||||||
rtn = proc.wait()
|
|
||||||
if rtn != 0: print(colored(colorama.Fore.RED,"> Launch failed: ") +"return isn't 0",file=sys.stderr)
|
|
||||||
else:
|
|
||||||
pkwargs = {
|
|
||||||
"stdout": subprocess.DEVNULL,
|
|
||||||
"stdin": subprocess.DEVNULL,
|
|
||||||
"stderr": subprocess.DEVNULL
|
|
||||||
}
|
|
||||||
if lv["osName"] == "windows": pkwargs["creationflags"] = 0x00000008
|
|
||||||
subprocess.Popen([lv["java"] + "w"] + args,**pkwargs)
|
|
||||||
|
|
||||||
main()
|
main()
|
13
oml/stages/assets-integrity.py
Normal file
13
oml/stages/assets-integrity.py
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
if "-verifydata" in sys.argv: # assets
|
||||||
|
print(colored(colorama.Fore.GREEN,"\nVerifying assets..."))
|
||||||
|
assetJson = False
|
||||||
|
with open(p(assetsPath,"indexes",launcherVariables["assets_index_name"] + ".json"),"r") as fileh: assetJson = json.loads(fileh.read())
|
||||||
|
|
||||||
|
for asset in assetJson["objects"]:
|
||||||
|
hash = assetJson["objects"][asset]["hash"]
|
||||||
|
assetp = p(assetsPath,"objects",hash[:2],hash)
|
||||||
|
if not os.path.isfile(assetp):
|
||||||
|
print(colored(colorama.Fore.RED,assetp+ " is missing!"),file=sys.stderr)
|
||||||
|
continue
|
||||||
|
if hash != getFileHash(assetp):
|
||||||
|
print(colored(colorama.Fore.RED,assetp+ " is corrupt!"),file=sys.stderr)
|
3
oml/stages/cleanup.py
Normal file
3
oml/stages/cleanup.py
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
global tmpFile
|
||||||
|
tmpFile = p(lv["gamePath"],"file.tmp")
|
||||||
|
if os.path.isfile(tmpFile): os.remove(tmpFile)
|
52
oml/stages/config.py
Normal file
52
oml/stages/config.py
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
print(colored(colorama.Fore.GREEN,"Reading config..."))
|
||||||
|
config = configparser.ConfigParser()
|
||||||
|
config.optionxform = str
|
||||||
|
config.read(p(omlPath,"config.ini"))
|
||||||
|
|
||||||
|
global lv
|
||||||
|
|
||||||
|
lv = config["default"]
|
||||||
|
for var in lv:
|
||||||
|
glbs = globals().copy()
|
||||||
|
for glb in glbs:
|
||||||
|
lv[var] = lv[var].replace("$+" +glb+ "$",str(glbs[glb]))
|
||||||
|
|
||||||
|
lcs = locals().copy()
|
||||||
|
for lc in lcs:
|
||||||
|
lv[var] = lv[var].replace("$" +lc+ "$",str(lcs[lc]))
|
||||||
|
|
||||||
|
if lv["osName"] == "":
|
||||||
|
lv["osName"] = platform.system().lower()
|
||||||
|
if lv["osName"] == "darwin": lv["osName"] = "macos"
|
||||||
|
|
||||||
|
if lv["osVersion"] == "":
|
||||||
|
lv["osVersion"] = platform.version()
|
||||||
|
|
||||||
|
if lv["jvmArch"] == "":
|
||||||
|
print(colored(colorama.Fore.GREEN,"Querying JVM architecture..."))
|
||||||
|
if "64-Bit" in subprocess.check_output([lv["java"],"-version"]).decode("utf-8"):
|
||||||
|
lv["jvmArch"] = "amd64"
|
||||||
|
else:
|
||||||
|
lv["jvmArch"] = "x86"
|
||||||
|
|
||||||
|
print("")
|
||||||
|
for setting in lv:
|
||||||
|
print(colored(colorama.Fore.BLACK,setting+ "=" +str(lv[setting])))
|
||||||
|
|
||||||
|
if len(sys.argv) > 1:
|
||||||
|
for arg in sys.argv[1:]:
|
||||||
|
if arg.startswith("-"): continue
|
||||||
|
argSplit = arg.split("=",1)
|
||||||
|
if len(argSplit) > 1:
|
||||||
|
lv[argSplit[0]] = argSplit[1]
|
||||||
|
else:
|
||||||
|
lv[argSplit[0]] = True
|
||||||
|
|
||||||
|
if not lv["osName"] in ["windows","linux","macos"]:
|
||||||
|
print(colored(colorama.Fore.YELLOW,"\nWarning, unsupported OS detected: '" +lv["osName"]+ "'"),file=sys.stderr)
|
||||||
|
print("Needs to be either windows, linux or macos. Define it with osName=name in the config.",file=sys.stderr)
|
||||||
|
|
||||||
|
print("")
|
||||||
|
if not "version" in lv: lv["version"] = input("Version ID: ")
|
||||||
|
if "-downloadonly" in sys.argv: lv["name"] = "Player"
|
||||||
|
if not "name" in lv: lv["name"] = input("Player name: ")
|
2
oml/stages/downloadonly-quit.py
Normal file
2
oml/stages/downloadonly-quit.py
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
if "-downloadonly" in sys.argv:
|
||||||
|
exit(0)
|
13
oml/stages/launch.py
Normal file
13
oml/stages/launch.py
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
print(colored(colorama.Fore.GREEN,"\nLaunching Minecraft..."))
|
||||||
|
if lv["console"] == "1":
|
||||||
|
proc = subprocess.Popen([lv["java"]] + args)
|
||||||
|
rtn = proc.wait()
|
||||||
|
if rtn != 0: print(colored(colorama.Fore.RED,"> Launch failed: ") +"return isn't 0",file=sys.stderr)
|
||||||
|
else:
|
||||||
|
pkwargs = {
|
||||||
|
"stdout": subprocess.DEVNULL,
|
||||||
|
"stdin": subprocess.DEVNULL,
|
||||||
|
"stderr": subprocess.DEVNULL
|
||||||
|
}
|
||||||
|
if lv["osName"] == "windows": pkwargs["creationflags"] = 0x00000008
|
||||||
|
subprocess.Popen([lv["java"] + "w"] + args,**pkwargs)
|
69
oml/stages/launcher-variables.py
Normal file
69
oml/stages/launcher-variables.py
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
print(colored(colorama.Fore.GREEN,"\nSetting up launcher variables..."))
|
||||||
|
launcherVariables["auth_player_name"] = lv["name"]
|
||||||
|
launcherVariables["version_name"] = findInChainDeepest(versionsPath,lv["version"],["id"])
|
||||||
|
launcherVariables["game_directory"] = lv["gamePath"]
|
||||||
|
launcherVariables["assets_root"] = assetsPath
|
||||||
|
launcherVariables["auth_access_token"] = "-"
|
||||||
|
launcherVariables["auth_uuid"] = hashlib.md5(lv["name"].encode('utf-8')).hexdigest()
|
||||||
|
launcherVariables["user_type"] = "offline"
|
||||||
|
launcherVariables["version_type"] = clientJson["type"]
|
||||||
|
launcherVariables["natives_directory"] = nativesOutPath
|
||||||
|
launcherVariables["launcher_name"] = "offline-minecraft-launcher"
|
||||||
|
launcherVariables["launcher_version"] = "0.0"
|
||||||
|
launcherVariables["classpath"] = libraryList
|
||||||
|
launcherVariables["game_assets"] = assetsPath
|
||||||
|
launcherVariables["auth_session"] = "-"
|
||||||
|
launcherVariables["user_properties"] = "{}"
|
||||||
|
|
||||||
|
if lv["profileFolder"] == "1":
|
||||||
|
profilePath = p(lv["gamePath"],"profiles")
|
||||||
|
launcherVariables["game_directory"] = p(profilePath,lv["name"],lv["version"],".minecraft")
|
||||||
|
if not os.path.isdir(launcherVariables["game_directory"]): os.makedirs(launcherVariables["game_directory"])
|
||||||
|
os.chdir(launcherVariables["game_directory"])
|
||||||
|
|
||||||
|
if launcherVariables["game_directory"].replace(pUp(launcherVariables["game_directory"]) + os.sep,"",1) == ".minecraft":
|
||||||
|
print(colored(colorama.Fore.MAGENTA,"> game_directory is called .minecraft, setting APPDATA/HOME environment variables to parent directory."))
|
||||||
|
os.environ["APPDATA"] = pUp(launcherVariables["game_directory"])
|
||||||
|
os.environ["HOME"] = os.environ["APPDATA"]
|
||||||
|
|
||||||
|
# JVM arguments:
|
||||||
|
args = []
|
||||||
|
|
||||||
|
if not findArgument(jvmArguments,"-Djava-library.path="):
|
||||||
|
args.append("-Djava.library.path=" +nativesOutPath)
|
||||||
|
|
||||||
|
if not findArgument(jvmArguments,"-Dminecraft.launcher.brand="):
|
||||||
|
args.append("-Dminecraft.launcher.brand=" +launcherVariables["launcher_name"])
|
||||||
|
|
||||||
|
if not findArgument(jvmArguments,"-Dminecraft.launcher.version="):
|
||||||
|
args.append("-Dminecraft.launcher.version=" +launcherVariables["launcher_version"])
|
||||||
|
|
||||||
|
if lv["osName"] == "windows":
|
||||||
|
if not findArgument(jvmArguments,"-XX:HeapDumpPath="):
|
||||||
|
args.append("-XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump")
|
||||||
|
|
||||||
|
args.append("-Dminecraft.client.jar=" +clientJar)
|
||||||
|
|
||||||
|
if not findArgument(jvmArguments,"-cp"):
|
||||||
|
args.append("-cp")
|
||||||
|
args.append(libraryList)
|
||||||
|
|
||||||
|
for arg in jvmArguments:
|
||||||
|
for var in launcherVariables:
|
||||||
|
arg = arg.replace("${" +var+ "}",launcherVariables[var])
|
||||||
|
args.append(arg)
|
||||||
|
args = args + json.loads(lv["jvmArguments"])
|
||||||
|
args.append(clientJson["mainClass"])
|
||||||
|
|
||||||
|
for arg in arguments:
|
||||||
|
for var in launcherVariables:
|
||||||
|
arg = arg.replace("${" +var+ "}",launcherVariables[var])
|
||||||
|
args.append(arg)
|
||||||
|
|
||||||
|
if not findArgument(args,"--gameDir"):
|
||||||
|
args.append("--gameDir")
|
||||||
|
args.append(launcherVariables["game_directory"])
|
||||||
|
|
||||||
|
if not findArgument(args,"--assetsDir"):
|
||||||
|
args.append("--assetsDir")
|
||||||
|
args.append(launcherVariables["assets_root"])
|
16
oml/stages/libraries-download.py
Normal file
16
oml/stages/libraries-download.py
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
print(colored(colorama.Fore.GREEN,"\nDownloading libraries..."))
|
||||||
|
for library in libraries:
|
||||||
|
if "url" in library:
|
||||||
|
print(colored(colorama.Fore.BLACK,getLibraryPrettyName(library)))
|
||||||
|
try:
|
||||||
|
fileDl(library["url"],library["filePathOS"],read = False)
|
||||||
|
except Exception as e:
|
||||||
|
print(colored(colorama.Fore.RED,"> Could not download: ") +str(e),file=sys.stderr)
|
||||||
|
else:
|
||||||
|
if library["dumb"] == True:
|
||||||
|
try:
|
||||||
|
fileDl(library["url"] + ".sha1",library["filePathOS"] + ".sha1",read = False)
|
||||||
|
except Exception as e:
|
||||||
|
print(colored(colorama.Fore.RED,"> Could not download sha1 hash: ") +str(e),file=sys.stderr)
|
||||||
|
|
||||||
|
if "-verifydata" in sys.argv: checkLibraryHash(library)
|
27
oml/stages/libraries-setup.py
Normal file
27
oml/stages/libraries-setup.py
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
loadLibraries = {}
|
||||||
|
for library in libraries:
|
||||||
|
if "data" in library and "rules" in library["data"] and checkRules(library["data"]["rules"]) == "disallow": continue
|
||||||
|
if library["type"] == "client":
|
||||||
|
loadLibraries["client:" +library["filePathOS"]] = library
|
||||||
|
elif library["type"] == "library":
|
||||||
|
loadLibraries[library["package"] + ":" +library["name"]] = library
|
||||||
|
|
||||||
|
separator = ";"
|
||||||
|
libraryList = ""
|
||||||
|
if lv["osName"] != "windows": separator = ":"
|
||||||
|
print(colored(colorama.Fore.GREEN,"\nLoaded libraries:"))
|
||||||
|
clientJar = ""
|
||||||
|
for libraryID in loadLibraries:
|
||||||
|
library = loadLibraries[libraryID]
|
||||||
|
if os.path.isfile(library["filePathOS"]):
|
||||||
|
if library["type"] == "client":
|
||||||
|
print("Client: " +library["filePathOS"])
|
||||||
|
clientJar = library["filePathOS"]
|
||||||
|
else:
|
||||||
|
print(colored(colorama.Fore.BLACK,getLibraryPrettyName(library)))
|
||||||
|
else:
|
||||||
|
print(colored(colorama.Fore.RED,"> Lib not found: ") +getLibraryPrettyName(library),file=sys.stderr)
|
||||||
|
continue
|
||||||
|
|
||||||
|
libraryList += library["filePathOS"] + separator
|
||||||
|
libraryList = libraryList[:-1]
|
19
oml/stages/natives-extract.py
Normal file
19
oml/stages/natives-extract.py
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
print(colored(colorama.Fore.GREEN,"\nExtracting natives..."))
|
||||||
|
if not os.path.isdir(nativesOutPath): os.makedirs(nativesOutPath)
|
||||||
|
for library in libraries:
|
||||||
|
if library["type"] == "native":
|
||||||
|
if "rules" in library["data"] and checkRules(library["data"]["rules"]) == "disallow": continue
|
||||||
|
if lv["osName"] != "macos":
|
||||||
|
if library["nativeOS"] != lv["osName"]: continue
|
||||||
|
else:
|
||||||
|
if not library["nativeOS"] in ["macos","osx"]: continue
|
||||||
|
|
||||||
|
if not os.path.isfile(library["filePathOS"]):
|
||||||
|
print(colored(colorama.Fore.RED,"> Native not found: ") +getLibraryPrettyName(library),file=sys.stderr)
|
||||||
|
continue
|
||||||
|
|
||||||
|
print(colored(colorama.Fore.BLACK,getLibraryPrettyName(library)))
|
||||||
|
proc = subprocess.Popen(["7z","x",library["filePathOS"],"-o" +nativesOutPath,"-aos"],stdout=subprocess.DEVNULL)
|
||||||
|
rtn = proc.wait()
|
||||||
|
if rtn != 0:
|
||||||
|
print(colored(colorama.Fore.RED,"> Native could not be extracted: ") +getLibraryPrettyName(library),file=sys.stderr)
|
6
oml/stages/path-setup.py
Normal file
6
oml/stages/path-setup.py
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
versionsPath = p(lv["gamePath"],"versions")
|
||||||
|
libraryPath = p(lv["gamePath"],"libraries")
|
||||||
|
nativePath = p(lv["gamePath"],"natives")
|
||||||
|
versionPath = p(lv["gamePath"],"versions",lv["version"])
|
||||||
|
nativesOutPath = p(lv["gamePath"],"natives-extracted",lv["version"],lv["osName"]+ "." +lv["jvmArch"])
|
||||||
|
assetsPath = p(lv["gamePath"],"assets")
|
11
oml/stages/stages.txt
Normal file
11
oml/stages/stages.txt
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
config.py
|
||||||
|
cleanup.py
|
||||||
|
path-setup.py
|
||||||
|
version-scan.py
|
||||||
|
libraries-download.py
|
||||||
|
assets-integrity.py
|
||||||
|
downloadonly-quit.py
|
||||||
|
libraries-setup.py
|
||||||
|
natives-extract.py
|
||||||
|
launcher-variables.py
|
||||||
|
launch.py
|
10
oml/stages/version-scan.py
Normal file
10
oml/stages/version-scan.py
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
print(colored(colorama.Fore.GREEN,"Scanning .json(s)..."))
|
||||||
|
clientJson,libraries,arguments,jvmArguments = processVersion(versionsPath,libraryPath,nativePath,lv["version"])
|
||||||
|
|
||||||
|
launcherVariables = {}
|
||||||
|
try:
|
||||||
|
launcherVariables["assets_index_name"] = findInChain(versionsPath,lv["version"],["assets"])
|
||||||
|
except:
|
||||||
|
print(colored(colorama.Fore.YELLOW,"> Could not find assets_index_name, assuming pre-1.6"),file=sys.stderr)
|
||||||
|
launcherVariables["assets_index_name"] = "pre-1.6"
|
||||||
|
input()
|
Loading…
Reference in New Issue
Block a user