Merge pull request 'MERGE: Fully featured python installer and documentation/code comment improvements.' (#17) from untested into main

Reviewed-on: https://git.adolin.xyz/saru/lobotomy-mod-pack/pulls/17
This commit is contained in:
Obie Hinojosa 2024-11-01 22:05:15 -05:00
commit 6df3a0447e
102 changed files with 140 additions and 86 deletions

3
.gitignore vendored
View File

@ -1,7 +1,8 @@
*.log *.log
*.env *.env
*.spec *.spec
test.py *.test.py
checklist.md checklist.md
/build /build
/dist /dist
/.*

BIN
image.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 422 KiB

View File

@ -1,115 +1,168 @@
import urllib # compiling this is easy, just run `pip install wget` and `pip install pyinstaller` and then...
import urllib.request # 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 tarfile
import os import os
import platform import platform
import time import time
import shutil import shutil
import sys
from pathlib import Path from pathlib import Path
#detect operating system and find home folder #define some functions ahead of time
homedir = os.path.expanduser("~") 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 KEEP GOING ANYWAYS and the mods directory will be MADE AUTOMATICALLY, but")
print("[WARM!]: if you don't have fabric, the mods won't be loaded and you won't be able to join the server.)")
print()
print("[WARN!] THIS IS NOT A FATAL ERROR! DON'T CLOSE THE WINDOW!")
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.
#operating system specific operations.
#we find the minecraft folder in this section.
if platform.system() == "Linux": if platform.system() == "Linux":
print("Operating system detected: Linux") print("Operating system detected: Linux")
global mcfolder os.chdir("/.minecraft")
global modfolder
os.chdir(homedir + '/.minecraft')
mcfolder = Path.cwd() mcfolder = Path.cwd()
modfolder = homedir + '/.minecraft/mods' modfolder = mcfolder + '/mods'
os.chdir(mcfolder)
print("Changed current working directory to '" + str(mcfolder) + "'") print("Changed current working directory to '" + str(mcfolder) + "'")
time.sleep(2)
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": elif platform.system() == "Windows":
print("Operating system detected: Windows") print("Operating system detected: Windows")
os.chdir(homedir) os.chdir("AppData/Roaming/.minecraft")
os.chdir("AppData")
os.chdir("Roaming")
os.chdir(".minecraft")
mcfolder = Path.cwd() mcfolder = Path.cwd()
os.chdir("mods")
modfolder = Path.cwd
os.chdir(mcfolder)
print("Changed current working directory to '" + str(mcfolder) + "'") print("Changed current working directory to '" + str(mcfolder) + "'")
time.sleep(2)
os.chdir(mcfolder) win_check_folder_exists("mods")
#begin mod backup and deletion modfolder = str(mcfolder) + '/mods'
#THIS DOESN'T CURRENTLY BACK UP EXISTING MODS.
try:
shutil.rmtree(str("mods"))
print("Cleared previous mods.")
except OSError as e:
print("Error: %s - %s." % (e.filename, e.strerror))
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")) os.mkdir(str("mods"))
#begin download and extract # download mod archive from https://git.adolin.xyz/saru and extract
#this snippet below defines a tar extract FUNCTION
def extract_tar_archive(tar_file_path, extract_to):
with tarfile.open(tar_file_path, 'r') as tar:
tar.extractall(extract_to)
print("Starting install...")
print("Fetching mods...") print("Fetching mods...")
#this is the SIMPLEST implementation of curl i have ever seen i just NUTTED SO FUCKING HARD wget.download('https://git.adolin.xyz/saru/lobotomy-mod-pack/raw/branch/main/mods.tar.gz')
url = '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
urllib.request.urlretrieve(url, 'mods.tar.gz') # take the last one back, this is fucking insane. `wget` the fucking goat. who knew windows package manager was so damn cool?
print("Extracting and writing to disk...") extract_tar_archive('mods.tar.gz', 'mods')
# ('tarfile', 'directory to extract to')
tar_file_path = 'mods.tar.gz' ascii_art()
extract_to = 'mods' #call func to print ascii art to console
extract_tar_archive(tar_file_path, extract_to)
print("sigma!")
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.
print()
print("sigma")
print("all done!") print("all done!")
print("This script will exit and close in ten seconds. :)") print("This windows will exit and close in ten seconds. :)")
time.sleep(10) time.sleep(10)

Some files were not shown because too many files have changed in this diff Show More