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 6a2a102cf5
103 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,76 +1,33 @@
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):
#operating system specific operations.
#we find the minecraft folder in this section.
if platform.system() == "Linux":
print("Operating system detected: Linux")
global mcfolder
global modfolder
os.chdir(homedir + '/.minecraft')
mcfolder = Path.cwd()
modfolder = homedir + '/.minecraft/mods'
os.chdir(mcfolder)
print("Changed current working directory to '" + str(mcfolder) + "'")
time.sleep(2)
elif platform.system() == "Windows":
print("Operating system detected: Windows")
os.chdir(homedir)
os.chdir("AppData")
os.chdir("Roaming")
os.chdir(".minecraft")
mcfolder = Path.cwd()
os.chdir("mods")
modfolder = Path.cwd
os.chdir(mcfolder)
print("Changed current working directory to '" + str(mcfolder) + "'")
time.sleep(2)
os.chdir(mcfolder)
#begin mod backup and deletion
#THIS DOESN'T CURRENTLY BACK UP EXISTING MODS.
try: try:
shutil.rmtree(str("mods")) shutil.rmtree(str(directory))
print("Cleared previous mods.")
except OSError as e: except OSError as e:
print("Error: %s - %s." % (e.filename, e.strerror)) print("Error: %s - %s." % (e.filename, e.strerror))
#this defines a function to delete a directory (no shit)
os.mkdir(str("mods"))
#begin download and extract
#this snippet below defines a tar extract FUNCTION
def extract_tar_archive(tar_file_path, extract_to): def extract_tar_archive(tar_file_path, extract_to):
with tarfile.open(tar_file_path, 'r') as tar: with tarfile.open(tar_file_path, 'r') as tar:
tar.extractall(extract_to) tar.extractall(extract_to)
#this defines a function to decompress a tar.gz file
print("Starting install...") def ascii_art():
print("Fetching mods...")
#this is the SIMPLEST implementation of curl i have ever seen i just NUTTED SO FUCKING HARD
url = 'https://git.adolin.xyz/saru/lobotomy-mod-pack/raw/branch/main/mods.tar.gz'
urllib.request.urlretrieve(url, 'mods.tar.gz')
print("Extracting and writing to disk...")
tar_file_path = 'mods.tar.gz'
extract_to = 'mods'
extract_tar_archive(tar_file_path, extract_to)
print() print()
print() print()
print(" :+++++=") print(" :+++++=")
@ -106,10 +63,106 @@ 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()
#someone's gonna think im a furry or a femboy or some shit because of this.
print("sigma") 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.
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("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