From 246963b0040f8f4f0ef048ebe0ee10339f7e5c73 Mon Sep 17 00:00:00 2001 From: Obie Hinojosa Date: Wed, 28 May 2025 16:00:41 -0500 Subject: [PATCH] upload `installer.py` from lobotomy installer modpack --- installer.py | 166 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 166 insertions(+) create mode 100644 installer.py diff --git a/installer.py b/installer.py new file mode 100644 index 0000000..e18e3e7 --- /dev/null +++ b/installer.py @@ -0,0 +1,166 @@ +# compiling this is easy, just run `pip install wget` and `pip install pyinstaller` and then... +# compile with `python -m PyInstaller --onefile installer.py --icon image.ico` + +# (wget is a dependency for this python script that doesnt come with python by default) + + + +#import dependencies +import wget +import tarfile +import os +import platform +import time +import shutil +from pathlib import Path + +#define some functions ahead of time +def delete_directory(directory): + try: + shutil.rmtree(str(directory)) + except OSError as e: + print("Error: %s - %s." % (e.filename, e.strerror)) +#this defines a function to delete a directory (no shit) + +def extract_tar_archive(tar_file_path, extract_to): + with tarfile.open(tar_file_path, 'r') as tar: + tar.extractall(extract_to) +#this defines a function to decompress a tar.gz file + +def ascii_art(): + print() + print() + print(" :+++++=") + print(" -++++++.") + print(" :++++++. .") + print(" .++++++. -=. -: .::") + print(" =+++++. :=. =- .--:. -") + print(" =+++++. .+ =: -=. :=") + print(" =+++++. +. :.=* .=: =:") + print(" =++++= .+ +. -- :+ .=") + print(" .+++++= .= ..=: :. =") + print(" .++=++- .= .+- =") + print(" ==++*=::.. * +") + print(" =*#-+- .:---:. :=-- .-=%. --=#- ..::.--") + print(" :#=-*- .::--:.*: .+ #@. - *@@- .. -#:") + print(" ++:*. .:--==:--:: .%%-.. :=.") + print(" =++.:...::::::..... :---+-:. .:.: --") + print(" *=..:::.. .=.") + print(" :-. .=:::") + print(" ..:=. :-..-:---:") + print(" ==:- .=-: :=-") + print(" .= =- :--. .--") + print(" -- :-:. -= .::::-:=.") + print(" :- =- :+ .+") + print(" --- -: .+ +.") + print(" := -= .+ =:") + print(" +. -: =: :=.") + print(" -. .=: --.....::-:") + print(" .=- .= :-:----- .::::.") + print(" .-: .= ..+:") + print(" -=......:.:-:+ :=") + print(" .::--::... := -") + print(" =: =:") + print(" --::.--") + print(" ....") + print() +#someone's gonna think im a furry or a femboy or some shit because of this. + +def win_check_folder_exists(folder): + dir = os.path.normpath(str(Path.cwd()) + "/" + str(folder)) + # fuck you microsoft + # this is some high-tier BULLSHIT right here + + #print(dir) + + if not os.path.exists(dir): + print() + print("[WARN!]: Mod folder not found. (is Fabric installed?)") + print("[WARN!]: (note: the script will go on as usual without breaking anything, but if") + print("[WARN!]: you don't have fabric installed, your mods won't load when you start the game.)") + os.mkdir("mods") + print() + time.sleep(20) +#checks for mod folder existence and outputs [WARN!] + +def check_for_old_mod_archive(filepath): + if os.path.exists(filepath): + print("Found previously downloaded archive, deleting... Done.") + #shut up + os.remove(filepath) +#deletes old downloaded mod archives + +def compress_tar(folder_path, output_file): + with tarfile.open(output_file, "w:gz") as tar: + tar.add(folder_path, arcname=os.path.basename(folder_path)) +#thank you google gemini you are a literal lifesaver + + + +#detect operating system and find home, minecraft, & mod folders +homedir = os.path.expanduser("~") +os.chdir(homedir) + +global mcfolder +global modfolder + # `global` sets these variables to exist outside of the scope of these specific `if` statements. + +if platform.system() == "Linux": + print("Operating system detected: Linux") + os.chdir("/.minecraft") + mcfolder = Path.cwd() + modfolder = mcfolder + '/mods' + print("Changed current working directory to '" + str(mcfolder) + "'") + + print("Backing up mod folder...") + print() + print("Don't close the window! This'll take a moment...") + compress_tar(mcfolder, "mod-backup.tar.gz") + +elif platform.system() == "Windows": + print("Operating system detected: Windows") + os.chdir("AppData/Roaming/.minecraft") + mcfolder = Path.cwd() + print("Changed current working directory to '" + str(mcfolder) + "'") + + win_check_folder_exists("mods") + + modfolder = str(mcfolder) + '/mods' + + print("Backing up mod folder...") + print() + print("Don't close the window! This'll take a moment...") + compress_tar(mcfolder, "mod-backup.tar.gz") + +os.chdir(mcfolder) +time.sleep(2) + # unclear if this timeout is necessary for UX + + + +#clear out preexisting mods +check_for_old_mod_archive("mods.tar.gz") +delete_directory("mods") + #custom function* +print("Deleting mod folder contents... Done.") + #shut up again +os.mkdir(str("mods")) + + + +# download mod archive from https://git.adolin.xyz/saru and extract +print("Fetching mods...") +wget.download('https://git.adolin.xyz/saru/lobotomy-mod-pack/raw/branch/main/mods.tar.gz') + # #this is the SIMPLEST implementation of curl i have ever seen i just NUTTED SO FUCKING HARD + # take the last one back, this is fucking insane. `wget` the fucking goat. who knew windows package manager was so damn cool? + +extract_tar_archive('mods.tar.gz', 'mods') + # ('tarfile', 'directory to extract to') + +ascii_art() + #call func to print ascii art to console + +print("sigma!") +print("all done!") +print("This window will exit and close in ten seconds. :)") +time.sleep(10) \ No newline at end of file