| Загрузите последнюю версию MNCPlay | ||
| Windows | MacOS | Linux |
|
|
|
| все релизы и версии | ||
Minecraft лаунчер для серверов проекта mnc.red
В соответствии с лицензией MIT вы можете использовать и модифицировать этот код под ваши нужды.
Лаунчер работает как нативное приложение, используя GoLang сервер в качестве BackEnd и Vue.js в качестве FrontEnd в связке с Vuetify MaterialDesign библиотекой компонентов. Сборка при помощи Wails.
Поддерживаемые архитектуры Wails
windows/amd64- Windows x64windows/386- Windows x32windows/arm64- Windows ARMdarwin/amd64- MacOS Inteldarwin/arm64- MacOS M1darwin/universal- MacOS Intel и M1linux/amd64- Linux x64linux/arm- Данный клиент не удаётся собрать под эту архитектуруlinux/arm64- Данный клиент не удаётся собрать под эту архитектуру
В общем случае вам потребуется установить GoLang, Node и Wails.
Опционально возможно использовать UPX для сжатия билдов. Однако, UPX не поддерживает все доступные Wails архитектуры
и ограничивается только windows/amd64, windows/386, linux/amd64.
В зависимости от платформы на которой происходит сборка может потребоваться установить дополнительные компоненты,
такие как GTK и WebKit2 GTK.
Подробнее смотрите в workflows/build.yml
и в документации Wails.
Требуется установить git, т.к. сборка через Make поставляет информацию о текущем коммите в приложение.
Для сборки под плаформу windows/amd64 выполните:
make build_windows_amd64.
Готовый билд ищите в build/bin.
Смотрите подробнее возможности сборки под отдельные платформы в Makefile.
Вместо использования make возможно осуществлять сборку напрямую через Wails, например:
wails build --webview2 embed --platform windows/amd64
Идеи
Конфигурируется через YAML плагинами. Т.е. само окно лаунчера вообще не должно поставлять каких-либо параметров, всё делается плагинами, пусть и встроенными. Как это может быть реализовано? Плагин интеграции представляет из себя zip архив, который либо вкомпиливается в лаунчер, либо динамически подгружается с сервера. Архив может содержать серверный (Go) код и клиентский (JS/TS) код. А так же манифест определяющий версию плагина и совместимый фронт и бэк. Сам плагин конфигурируется через общий файл конфигурации который тянется с сервера (предпочтительно) или вкомпиливается в лаунчер.
Пример файла конфигурации для лаунчера:
plugins:
- package: http://.../plugin.zip # возможно указание как URL, так и локального файла или директории для отладки
sha1: ... # хэш архива, опциональное поле, если не указано - скачивается каждый раз
config:
# Специфичный конфиг для плагина
- package: http://.../button.zip # Поставляет зависимость компонента кнопки для использования в шаблонах
sha1: ...
- package: http://.../mnc_ui.zip
sha1: ...
config:
sidebars:
left:
layout:
# Лэйаут работает со стандартным компонентом layout который описывает строки и столбцы в виде массива
- - component: avatar
size: medium
image: ${user.avatar.image.data}
- component: label
text: ${user.name}
- - component: menu
items:
- text: Главная
icon: mdi-cube
color: red
click:
action: goto_page
page: "/"
- - component: logoutПлагины поставляют различные объекты которые имеют свой тип (kind) и свой формат конфига. Каждый компонент может запросить определённый kind и при передаче в конфиги будет произведён поиск среди компонентов этого типа. Например, kind'ы видов: action, component, function
Лаунчер может поддерживать полностью расширяемую систему. Манифест плагина:
package: ui.mncred
provides: ui # Префикс используемый для всех прослушиваемых событий
produces:
- system/ui/define
- system/ui/alert
consumes:
- system/ui/ready
script: |
plugin.on('system/ui/ready').then(event => {
plugin.emit('system/ui/define', {
kind: 'component',
element: 'button',
style: 'css:...',
on_click:
emit: 'system/ui/alert'
text: 'Button {{component.id}} clicked!'
})
})Черновик
A fully customizable Minecraft launcher and mod-server. Powered by Wails, and written with Go, TypeScript, Vue, Quasar
TODO:
- How to install GoLang
- How to install Node
- How to install Wails
- HOWTO: Play on Android (via Pojav Launcher + mcpack from Modrinth)
Получить список релизов по API: curl -XGET 'https://api.github.com/repos/mncred/play/releases'
For more info see Wails Platform Specific Dependencies. Long story short, Windows users need to install WebView2 Runtime.
- WebView2 Runtime
- Go 1.18+
- Node 15+
- gcc
- libgtk3
- libwebkit
- Go 1.18+
- Node 15+
- Xcode
- Go 1.18+
- Node 15+
- Реализовать поддержку аргументов командной строки для лаунчера. Лаунчер может использоваться с их помощью не только для игры, но и как CLI инструмент формирования/валидации данных.
- Реализовать модуль загрузки JRE/JDK под выбранную платформу.
В конечном итоге мы получим распакованные файлы архива (сложить в
${launcher}/java/11/...) Есть несколько вендоров поставляющих портативную версию:https://api.adoptium.net/v3/assets/latest/${major}/hotspot?vendor=eclipse- major - версия JVM (8/11) и мы получаем JSON с информацией где скачать под каждую платформу.
Отфильтровать список по условию
a.filter(v => v.binary.architecture === 'x32').filter(v => v.binary.os === 'windows').filter(v => v.binary.image_type === 'jdk')И скачать из.binary.package.link
- major - версия JVM (8/11) и мы получаем JSON с информацией где скачать под каждую платформу.
Отфильтровать список по условию
https://corretto.aws/downloads/latest/amazon-corretto-${major}-${arch}-${sanitizedOS}-jdk.${ext}Здесь напрямую получаем ссылку на скачивание- major - версия JVM (8/11)
- arch - aarch64 (arm64) или x64 (amd64)
- sanitizedOS - windows, macos, linux
- ext - У каждой платформы своё расширение упаковки. windows - zip, macos и linux - tar.gz
Используя те же переменные получаем ссылку на md5:
https://corretto.aws/downloads/latest_checksum/amazon-corretto-${major}-${arch}-${sanitizedOS}-jdk.${ext}
- Реализовать модуль загрузки mrpack с Modrinth.
Он использует формат
.mrpackдля модпаков. Например: https://cdn.modrinth.com/data/1KVo5zza/versions/Hrdee8Qh/Fabulously.Optimized-5.8.0-beta.10.mrpack Это zip архив и внутри лежитmodrinth.index.jsonв котором указаны ссылки откуда качать и куда класть моды/ресурспаки и прочее, а так же могут лежать файлы с конфигами, которые специфичны для этого пака. - Реализовать модуль запуска Minecraft используя JDK и mrpack
Структура дистрибутива для лаунчера может выглядеть следующим образом. Загрузчик таким образом может загрузить как клиент, так и сервер. Добавить поддержку пакетов из MC лаунчера.
Загрузчик складывает разные виды ресурсов в директорию кэша при необходимости и ищет для начала в ней. При запуске конкретной версии игры клиент лезет в сеть и проверяет целостность файлов. В настройках мы можем разрешить или запретить (по умолчанию разрешаем) запуск игры оффлайн, если не удалось проверить целостность.
---
kind: modpack/mrpack/v1
# Идентификатор объекта для использования в конфигурации
id: fabulously-optimized
spec:
# Локализованное название модпака
title: Fabulously Optimized
# Локализованное описание
desc: Improve your graphics and performance with this simple modpack. 1.20.4 beta!
# Ссылки откуда скачивать .mrpack, будет загружен по первой доступной
download:
- link: https://cdn.modrinth.com/data/1KVo5zza/versions/Hrdee8Qh/Fabulously.Optimized-5.8.0-beta.10.mrpack
---
kind: modpack/asset/v1
id: single-mod
spec:
title:
desc:
path: mods/my-mod.jar
download:
- link: https://...
md5: ...
sha1: ...
---
kind: modpack/asset/v1
id: motd
spec:
title:
desc:
path: server.properties
content: |
# Конфиг сервера или клиента, или биндинги клавиш
---
kind: modpack/v1
id: optimizations-client
spec:
title: Оптимизация
desc: Включает наборы оптимизаций
mrpacks:
- fabulously-optimized
resourcepacks:
- ...
shaders:
- ...
datapacks:
- ...
assets:
- single-mod
- motd
---
kind: java/v1
id: java-8
spec:
title:
desc:
platforms:
'windows/amd64':
download:
- https://...
'macos/amd64':
download:
- https://...
---
kind: minecraft/v1
id: minecraft-1.20.1
spec:
title:
desc:
# Здесь разрешена ссылка на forge/paper/spigot и что угодно
download:
- https://...
---
kind: client/v1
id: client-stone
spec:
title:
desc:
defaultProps:
ram:
max: 4G
java: java-8
minecraft: minecraft-1.20.1
modpacks:
- optimizations-client
run: -Xmx{{.props.ram.max}} ... -jar {{.minecraft.jar}}