Skip to content

Latest commit

 

History

History
349 lines (294 loc) · 15.6 KB

File metadata and controls

349 lines (294 loc) · 15.6 KB

Visits Badge GitHub Tag codebeat badge GitHub go.mod Go version

Загрузите последнюю версию MNCPlay
Windows MacOS Linux
все релизы и версии

MNCPlay

Minecraft лаунчер для серверов проекта mnc.red

Для разработчиков

В соответствии с лицензией MIT вы можете использовать и модифицировать этот код под ваши нужды.

Стек технологий

Лаунчер работает как нативное приложение, используя GoLang сервер в качестве BackEnd и Vue.js в качестве FrontEnd в связке с Vuetify MaterialDesign библиотекой компонентов. Сборка при помощи Wails.

Поддерживаемые архитектуры Wails
  • windows/amd64 - Windows x64
  • windows/386 - Windows x32
  • windows/arm64 - Windows ARM
  • darwin/amd64 - MacOS Intel
  • darwin/arm64 - MacOS M1
  • darwin/universal - MacOS Intel и M1
  • linux/amd64 - Linux x64
  • linux/arm - Данный клиент не удаётся собрать под эту архитектуру
  • linux/arm64 - Данный клиент не удаётся собрать под эту архитектуру

Инструкция по сборке

Настройка окружения

В общем случае вам потребуется установить GoLang, Node и Wails.

Опционально возможно использовать UPX для сжатия билдов. Однако, UPX не поддерживает все доступные Wails архитектуры и ограничивается только windows/amd64, windows/386, linux/amd64.

В зависимости от платформы на которой происходит сборка может потребоваться установить дополнительные компоненты, такие как GTK и WebKit2 GTK. Подробнее смотрите в workflows/build.yml и в документации Wails.

Сборка

Используя Make

Требуется установить 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'

Dependencies

User

For more info see Wails Platform Specific Dependencies. Long story short, Windows users need to install WebView2 Runtime.

Developer

Windows

  • WebView2 Runtime
  • Go 1.18+
  • Node 15+

Linux

  • gcc
  • libgtk3
  • libwebkit
  • Go 1.18+
  • Node 15+

MacOS

  • Xcode
  • Go 1.18+
  • Node 15+

TODO

  • Реализовать поддержку аргументов командной строки для лаунчера. Лаунчер может использоваться с их помощью не только для игры, но и как 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
    • 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}}