Создание простого лаунчера для Minecraft на языке программирования Python. | Урок от GOGA20
Всем привет, я Гога. Я начинаю свой путь в развитии программиста. Да, мой код не идеален, но довольно хорош, как по мне.
В данной теме я хочу рассмотреть создание лаунчера для игры Minecraft. Лаунчер будет в консоли. В будущем обязательно выпущу тему о создании лаунчер с GUI. Приступаем!
Для начала нам понадобятся библиотеки: 1) Minecraft-launcher-lib, 2) subprocess.
#команда для установки библиотеки Minecraft-launcher-lib
pip install minecraft-launcher-lib
После установки библиотек приступим к основному коду. Первое что мы должны сделать так это импортировать наши библиотеки.
import minecraft_launcher_lib
import subprocess
После данного действия мы зададим переменную для директории майнкрафт.
Пример 1 (с изменением директории):
minecraft_directory = minecraft_launcher_lib.utils.get_minecraft_directory().replace('minecraft', 'MCLAUNCHER')
#на месте "MCLAUNCHER" можете поставить любое название
Пример 2 (оригинальная директория майнкрафт):
minecraft_directory = minecraft_launcher_lib.utils.get_minecraft_directory()
#оригинальная директория майнкрафт
Далее приступаем к оформлению нашего лаунчера. Ниже я сделал маленькую картинку выходящая в консоль. Ведь как по мне консольное приложение без картинки не интересно.(не обязательный шаг).
print('███╗░░░███╗░█████╗░██╗░░░░░░█████╗░██╗░░░██╗███╗░░██╗░█████╗░██╗░░██╗███████╗██████╗░')
print('████╗░████║██╔══██╗██║░░░░░██╔══██╗██║░░░██║████╗░██║██╔══██╗██║░░██║██╔════╝██╔══██╗')
print('██╔████╔██║██║░░╚═╝██║░░░░░███████║██║░░░██║██╔██╗██║██║░░╚═╝███████║█████╗░░██████╔╝')
print('██║╚██╔╝██║██║░░██╗██║░░░░░██╔══██║██║░░░██║██║╚████║██║░░██╗██╔══██║██╔══╝░░██╔══██╗')
print('██║░╚═╝░██║╚█████╔╝███████╗██║░░██║╚██████╔╝██║░╚███║╚█████╔╝██║░░██║███████╗██║░░██║')
print('╚═╝░░░░░╚═╝░╚════╝░╚══════╝╚═╝░░╚═╝░╚═════╝░╚═╝░░╚══╝░╚════╝░╚═╝░░╚═╝╚══════╝╚═╝░░╚═╝')
print('made by: GOGA20')
Далее давайте добавим прогресс-бар для отображения загрузки.
def printProgressBar(iteration, total, prefix='', suffix='', decimals=1, length=100, fill='█', printEnd="\r"):
percent = ("{0:." + str(decimals) + "f}").format(100 * (iteration / float(total)))
filledLength = int(length * iteration // total)
bar = fill * filledLength + '-' * (length - filledLength)
print('\r%s |%s| %s%% %s' % (prefix, bar, percent, suffix), end=printEnd)
if iteration == total:
print()
def maximum(max_value, value):
max_value[0] = value
Два данных блока нужны для его отображения. В дальнейшем у нас будут добавлены условия для их работы.
Давайте приступим к выбору версии игры а так же нашего никнейма.
version = input('Select version: ')
username = input('username: ')
print('=======================================================================================')
теперь давайте реализуем обращение для нашего прогресс бара.
max_value = [0]
callback = {
"setStatus": lambda text: print(text, end='r'),
"setProgress": lambda value: printProgressBar(value, max_value[0]),
"setMax": lambda value: maximum(max_value, value)
}
Далее мы начнем нашу установку майнкрафта
minecraft_launcher_lib.install.install_minecraft_version(versionid=version, minecraft_directory=minecraft_directory, callback=callback)
#в дальнейшем если мы будем запускать одну и ту же версию игры эта строчка будет игнорироваться.
ну и последний шаг это запуск игры
options = {
'username': username,
}
subprocess.call(minecraft_launcher_lib.command.get_minecraft_command(version=version, minecraft_directory=minecraft_directory, options=options))
В итоге если мы сейчас соберем все это в один файл, то получим полноценно работающий лаунчер майнкрафт.
Полный код:
import minecraft_launcher_lib
import subprocess
minecraft_directory = minecraft_launcher_lib.utils.get_minecraft_directory().replace('minecraft', 'chto_za_zalupa')
print('███╗░░░███╗░█████╗░██╗░░░░░░█████╗░██╗░░░██╗███╗░░██╗░█████╗░██╗░░██╗███████╗██████╗░')
print('████╗░████║██╔══██╗██║░░░░░██╔══██╗██║░░░██║████╗░██║██╔══██╗██║░░██║██╔════╝██╔══██╗')
print('██╔████╔██║██║░░╚═╝██║░░░░░███████║██║░░░██║██╔██╗██║██║░░╚═╝███████║█████╗░░██████╔╝')
print('██║╚██╔╝██║██║░░██╗██║░░░░░██╔══██║██║░░░██║██║╚████║██║░░██╗██╔══██║██╔══╝░░██╔══██╗')
print('██║░╚═╝░██║╚█████╔╝███████╗██║░░██║╚██████╔╝██║░╚███║╚█████╔╝██║░░██║███████╗██║░░██║')
print('╚═╝░░░░░╚═╝░╚════╝░╚══════╝╚═╝░░╚═╝░╚═════╝░╚═╝░░╚══╝░╚════╝░╚═╝░░╚═╝╚══════╝╚═╝░░╚═╝')
print('made by: GOGA20')
def printProgressBar(iteration, total, prefix='', suffix='', decimals=1, length=100, fill='█', printEnd="\r"):
percent = ("{0:." + str(decimals) + "f}").format(100 * (iteration / float(total)))
filledLength = int(length * iteration // total)
bar = fill * filledLength + '-' * (length - filledLength)
print('\r%s |%s| %s%% %s' % (prefix, bar, percent, suffix), end=printEnd)
if iteration == total:
print()
def maximum(max_value, value):
max_value[0] = value
version = input('Select version: ')
username = input('username: ')
print('=======================================================================================')
max_value = [0]
callback = {
"setStatus": lambda text: print(text, end='r'),
"setProgress": lambda value: printProgressBar(value, max_value[0]),
"setMax": lambda value: maximum(max_value, value)
}
minecraft_launcher_lib.install.install_minecraft_version(versionid=version, minecraft_directory=minecraft_directory, callback=callback)
options = {
'username': username,
}
subprocess.call(minecraft_launcher_lib.command.get_minecraft_command(version=version, minecraft_directory=minecraft_directory, options=options))
Надеюсь, данная статья кому-то помогла. Оставляйте свои комментарии, готов ответить на любые вопросы.
С уважением GOGA20♥