ModLoader

#!/usr/bin/env python3
# This example shows how use the mod loader module
import minecraft_launcher_lib
import subprocess


def choose(options: list[str]) -> int:
    for pos, text in enumerate(options):
        print(f"{pos + 1}: {text}")

    while True:
        try:
            answer = int(input(f"Select[1-{len(options)}]:")) - 1
            if answer >= 0 and answer < len(options):
                return answer
        except ValueError:
            pass


def ask_yes_no(text: str) -> bool:
    while True:
        answer = input(f"{text}[y/n]:").strip().upper()

        if answer == "Y":
            return True
        elif answer == "N":
            return False
        else:
            print("Invalid answer. Use y or n.")


def main() -> None:
    id_list = minecraft_launcher_lib.mod_loader.list_mod_loader()

    name_list = []
    for current_id in id_list:
        name_list.append(minecraft_launcher_lib.mod_loader.get_mod_loader(current_id).get_name())

    print("Please select a mod loader:")

    loader = minecraft_launcher_lib.mod_loader.get_mod_loader(id_list[choose(name_list)])
    version_list = loader.get_minecraft_versions(True)

    print()
    print("Please select the Minecraft version for which you want to install the mod loader.")
    vanilla_version = version_list[choose(version_list)]

    print()
    minecraft_directory = input("Enter the path to your Minecraft directory (leave blank for default):").strip()
    if minecraft_directory == "":
        minecraft_directory = minecraft_launcher_lib.utils.get_minecraft_directory()

    installed_version = loader.install(vanilla_version, minecraft_directory, callback={"setStatus": print})

    print("Finished")

    if not ask_yes_no("Do you want to launch Minecraft?"):
        return

    command = minecraft_launcher_lib.command.get_minecraft_command(installed_version, minecraft_directory, minecraft_launcher_lib.utils.generate_test_options())
    subprocess.run(command, cwd=minecraft_directory)


if __name__ == "__main__":
    main()

View this example on Codeberg