Как стать автором
Поиск
Написать публикацию
Обновить

Свой лаунчер для майнкрафт на python

Уровень сложностиПростой

Часть 1. Установка и обход авторизации mojang

Привет, Хабр!

Я начал разработку своего личного лаунчера для майнкрафт, но столкнулся с проблемой, это поиск информации о создании лаунчера. После того как я поискал в интернете, то столкнулся с гайдами на ютуб, где показываю, как создать свой лаунчер для майнкрафт на C#, Python и т. д., но они показывают пример с документации, а нюансы типа как указывать java аргументы или установить там forge или optifine не объясняют, но зато узнал про такую библиотеку, как minecraft launcher lib, так ещё и на питоне, что не может не радовать. Так вот разобравшись во всём этом я хочу поделиться с интернетом о создании своего лаунчера для майнкрафт. Я сделаю серию гайдов по реализации тех или иных фич.

Начинаем!

Установка библиотеки

  1. Сначала нам нужно создать папку, где будет храниться наш лаунчер и открыть её в IDE, я буду использовать vs code.

  2. После мы переходим в неё с помощью cd в терминале или cmd, после выполняем команды:

    # Linux
    python3 -m venv .venv # Создаем venv
    source .venv/bin/activate # Активируем venv
    # Windows
    python -m venv .venv # Создаем venv
    .venv\Scripts\activate # Активируем venv
  3. Устанавливаем библиотеку с помощью команды:

# Linux
pip3 install minecraft_launcher_lib
# Windows
pip install minecraft_launcher_lib

Всё, библиотека установлена, ура!

Теперь создадим в нашей директории файл ` main.py `, после импортируем библиотеку minecraft launcher lib и subprocess для запуска

import minecraft_launcher_lib as mll
import subprocess

Я же ещё сделаю псевдоним mll, для удобства.

Всё, основное мы сделали, теперь переходим к сладкому.

Установка майнкрафта и запуск

Давайте сначала создадим переменные, путь к майнкрафту и версию с ником.

path = "/path/to/minecraft"
version = "1.16.5"
nickname = "Guid"

Если вам нужен путь по умолчанию, то можно указать путь с помощью функции:

path = mll.utils.get_minecraft_directory() # Путь по умолчанию: ~/.minecraft на линуксе или ~\AppData\local\.minecraft на виндовсе

Я вам советую для тестов использовать новую версию, так как мы будем обходить авторизацию через microsoft, а проверить это можем через версию, ну или через логи, которые будут.

После нам надо будет установить саму версию версию майнкрафт, что можем сделать через функцию install_minecraft_version(), которая находится в модуле install:

mll.install.install_minecraft_version(versionid=version, minecraft_directory=path)

В функции указываем параметры
versionid - версия игры, указываем нашу переменную version
minecraft_directory - путь, где храниться наш майнкрафт, указываем переменную path"
Также есть ещё параметр callback, но о нем позже.

После чего создадим options, это словарь, где будут храниться настройки лаунчера и пользователя(никнейм, токен, uuid, jvm arguments и т.д)
Можно создать свой словарь или сгенерировать, удобнее будет свой создать:

options = {
  "username": nickname # Наш ник
}

В словаре указываем элемент username

Сейчас для запуска нам хватит и никнейма, но потом мы разберём более подробно этот словарь.

Дальше нам нужно сформировать команды для запуска майнкрафт, это можно сделать с помощью функции get_minecraft_command(), которая находится в модуле command:

command = mll.command.get_minecraft_command(version=version, minecraft_directory=path, options=options)

Эту функцию помещаем в переменную для удобства, после чего указываем параметры:
version - версия игры, указываем нашу переменную version
minecraft_directory - путь, где лежит наш майнкрафт, указываем переменную path
options - настройки лаунчера и запуска игры, тоже указваем наш словарь

Ура! Остался один штрих.

Теперь будем запускать, наш майнкрафт, для этого мы используем библиотеку subprocess, которую импортировали в начале, у него будем использовать функцию run:

subprocess.run(command)

В функцию осталось поместить нашу переменную command, где хранится команда для запуска майнкрафт.

Вот весь код:

import minecraft_launcher_lib as mll
import subprocess

path = "C:\\Users\\<username>\\Documents\\guid_mine"
version = "1.16.5"
nickname = "Guid"

mll.install.install_minecraft_version(versionid=version, minecraft_directory=path)

options = {
    "username": nickname
}

command = mll.command.get_minecraft_command(version=version, minecraft_directory=path, options=options)
subprocess.run(command)

Ура! *Если все получилось
Теперь можно запустить код

Обход авторизации mojang

После запуска вы наверное заметили, что у вас не работает сетевая игра, и мы сейчас это поправим.

Объясняю, при запуске майнкрафта идёт проверка на аккаунт через сервера майкрософт, если вы тестили на старой версии, то там явно работала сетевая игра, а на новых уже нет, так как там сделали проерку на аккаунт, но если сменить сервер авторизации, то мы спокойно сможем играть в сетевую игру, но минус того что играть сможем только на серверах, где не нужна лицензия.

Чтобы провернуть трюк со сменой сервера авторизации, нам нужно установить authlib injector и указать его запуск в jvm-arguments, вот ссылка на гитхаб, где можно его установить: https://github.com/yushijinhun/authlib-injector.

После установки закидываем его в папку с майнкрафтом, ну или в любое другое место, где удобно в общем. После этого мы добавляем ключ-пару в наш словарь options:

options = {
  "username": nickname,
  "jvmArguments": [
    "-javaagent:path/to/authlib-injector.jar=ely.by"
  ]
}

Если у вас authlib injector называется по-другому, то лучше переименовать его в authlib-injector.jar или в пути, где javaagent:path, указать в конце название скачанного файла authlib-injector-1_2_5.jar например, через равно указываем сервер авторизации, я указываю elyby.
После этого сохраняем и запускаем код.

[authlib-injector] [ERROR] Failed to fetch metadata: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

Если у вас вышла такая ошибка, то не переживайте, её можно исправить.
Для этого мы устанавливаем java jre с официального сайта. После этого находим путь к запускаемому файлу java и копируем, вот:
Windows: "C:\Program Files\Java\jre<версия>\bin\java.exe"
Linux: "/usr/local/bin/java" (точно не знаю как выглядить запускаемый файл java в линуксе)

После этого добавляем аргумент executablePath в наш словарь options:

options = {
    "username": nickname,
    "jvmArguments": [
        "-javaagent:C:\\Users\\Pasha\\Documents\\mine\\authlib-injector.jar=ely.by"
    ],
    "executablePath": "C:\\Program Files\\Java\\jre1.8.0_451\\bin\\java.exe"
}

Теперь снова запускаем код(не забываем экранировать бекслеш на виндовсе)

Ура! У нас теперь работает сетевая игра, а эта часть создания лаунчера закончена!

Вот весь получившийся код:

import minecraft_launcher_lib as mll
import subprocess

path = "C:\\Users\\<username>\\Documents\\mine"
version = "1.16.5"
nickname = "Guid"

#mll.install.install_minecraft_version(versionid=version, minecraft_directory=path, callback={"setProgress":lambda e: print(e)})

options = {
    "username": nickname,
    "jvmArguments": [
        "-javaagent:C:\\Users\\<username>\\Documents\\mine\\authlib-injector.jar=ely.by"
    ],
    "executablePath": "C:\\Program Files\\Java\\jre1.8.0_451\\bin\\java.exe"
}

command = mll.command.get_minecraft_command(version=version, minecraft_directory=path, options=options)
subprocess.run(command)
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.