From e52cfe6ee73613cbfb85b3026f08c2f7ff1cf8e7 Mon Sep 17 00:00:00 2001 From: harmacist Date: Sun, 28 Mar 2021 00:00:41 -0500 Subject: [PATCH] Added minecraft_launcher_lib, created skeleton for final product --- .gitignore | 4 +++- GlowstoneDust.py | 61 +++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 63 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 86d6d71..2c96dc8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ venv .idea +logs -*.jar \ No newline at end of file +*.jar +*.log \ No newline at end of file diff --git a/GlowstoneDust.py b/GlowstoneDust.py index 3fdc233..3af35e6 100644 --- a/GlowstoneDust.py +++ b/GlowstoneDust.py @@ -2,9 +2,24 @@ import zipfile import json import sys import logging +import minecraft_launcher_lib from pathlib import Path +# action plan for final product: +# 1) Get a list of mod jars from a directory +# 2) Install appropriate version of minecraft if it is not already installed +# 3) Install appropriate version of minecraft forge if it is not already installed +# 4) Launch empty version of minecraft forge to generate boilerplate file structure +# 5) Exit the process after it launches successfully +# 6) For each Jar: +# a) Copy jar to directory +# b) Attempt to launch the game +# c) Record whether or not the game successfully launched/built/etc +# d) If the game failed to launch, mark the jar as disabled +# e) Continue to next jar + + class MinecraftMod: def __init__(self, fileName, filePath, modid, parentMods=None): self.parentMods = parentMods or [] @@ -40,6 +55,47 @@ def get_modpack_info(target_dir: Path): raise e +def get_forge_version(minecraft_version: str): + return minecraft_launcher_lib.forge.find_forge_version(minecraft_version) + + +# potentially unnecessary, could substitue with run_forge_installer(version) instead of doing it all in the background? +def install_forge_for_version(minecraft_version: str): + minecraft_launcher_lib.forge.install_forge_version( + get_forge_version(minecraft_version), + path=minecraft_launcher_lib.utils.get_minecraft_directory() + ) + + +def launch_minecraft(): + # see https://pypi.org/project/minecraft-launcher-lib/ + # We now have a way to automatically install and launch minecraft forge versions via python + acct_resp = minecraft_launcher_lib.account.login_user( + input("Enter your minecraft username"), + input("Enter your minecraft password") + ) + options = { + # This is needed + "username": acct_resp['selectedProfile']['name'], + "uuid": acct_resp['selectedProfile']['id'], + "token": acct_resp['accessToken'], + # This is optional + "executablePath": "java", # The path to the java executable + "jvmArguments": [], # The jvmArguments + "launcherName": "minecraft-launcher-lib", # The name of your launcher + "launcherVersion": "1.0", # The version of your launcher + "gameDirectory": r"C:\Users\VY Canis Majoris\AppData\Roaming\.moddedminecraft\1.12\1.12.2\test", # The gameDirectory (default is the path given in arguments) + "demo": False, # Run Minecraft in demo mode + "customResolution": False, # Enable custom resolution + "resolutionWidth": "854", # The resolution width + "resolutionHeight": "480", # The resolution heigth + # "server": "example.com", # The ip of a server where Minecraft connect to after start + # "port": "123", # The port of a server where Minecraft connect to after start + # "nativesDirectory": "minecraft_directory/versions/version/natives" # The natives directory + # "enableLoggingConfig": False, # Enable use of the log4j configuration file + } + + def main(directory=Path('.')): modpack_info = list(get_modpack_info(directory)) root_mods = [mp for mp in modpack_info if not mp.parentMods] @@ -48,7 +104,10 @@ def main(directory=Path('.')): mod_tree = [] for root_mod in root_mods: mod_tree.append({ - root_mod.modid: [mod.modid for mod in dependant_mods if root_mod.modid in mod.parentMods] + root_mod.modid: + { + 'depends_on': [mod.modid for mod in dependant_mods if root_mod.modid in mod.parentMods] + } }) print(json.dumps(mod_tree, indent=4))