Skip to content

Бандл ​

Бандл це файл, який записує opys build, зазвичай <name>.opys. Це вся збірка в одному файлі і єдине, що потрібне гравцю або лаунчеру.

Що це ​

Архів zip з трьома видами записів:

sh
unzip -l game.opys
#   opys.json        формат та налаштування, які може задати гравець
#   manifest.json    файли для встановлення і спосіб запуску гри
#   blobs/<sha256>   ваші власні файли, перевезені всередині

manifest.json це маніфест: кожен файл, потрібний для встановлення, і команда, що запускає гру.

Кожен файл у списку каже, куди він йде, звідки береться і який хеш він повинен мати:

json
{
  "path": "${library_directory}/com/mojang/brigadier/1.3.10/brigadier-1.3.10.jar",
  "source": { "url": "https://libraries.minecraft.net/…/brigadier-1.3.10.jar" },
  "integrity": { "sha1": "d15b53a14cf20fdcaa98f731af5dda654452c010" }
}

Гри, її бібліотек і модів з Modrinth немає всередині бандла. Вони перелічені за URL і хешем, і гравець завантажує їх.

Одне правило: нічого шукати не треба ​

Бандл ніколи не каже «останній Forge». Кожен файл це один точний файл із зафіксованим хешем. Усі вибори зроблені, коли ви запустили opys build.

Чому: встановлення стає завантаженням, перевіркою, розпакуванням, запуском. Жоден сервер не може змінити те, що отримає гравець, а збірка, що працювала вчора, працює сьогодні.

Ціна: бандл не оновлюється сам. Щоб перейти на новіший мод, ви збираєте знову.

Де ваші власні файли ​

Файли з плагіна files не мають публічного URL. Є два способи їх доставити:

Перевезені (типово)Розміщені (задано url)
ДеВсередині бандла, як блобиНа вашому сервері
Ви тримаєтеЛише бандлБандл і кожен файл
Розмір бандлаРосте з файламиЛишається малим
Добре дляКонфігурацій, кількох модівСотень мегабайтів

Починайте з перевезених. Більше нічого не мусить лишатися в мережі, і нічого не може загубитися.

Де використовується бандл ​

Перевірка самостійно. Запустіть бандл так, як його запустив би гравець, без вашої конфігурації:

sh
opys launch game.opys --var root=/tmp/pack-test --var username=Player \
  --var uuid=00000000-0000-0000-0000-000000000001 --var token=0

Зробіть це перед публікацією. Це ловить значення, які існують лише у вашому run.

Розміщення. Це один файл. Підійде будь-який статичний хостинг: вебсервер, кошик S3, випуск на GitHub.

У лаунчері. Дайте рантайму URL, і він зробить решту. Див. інтеграцію з лаунчером.

Бандл потрібен не завжди

opys launch без аргументів збирає вашу конфігурацію, записує тимчасовий бандл і встановлює з нього. Бандл, який ви зберігаєте, для поширення.

Випуск оновлення ​

Зберіть знову і замініть файл за тією самою адресою. Це все.

При наступному запуску файли, що досі збігаються зі своїм хешем, лишають у спокої, а завантажують лише відсутні або змінені. Невелике оновлення це невелике завантаження.

Дві речі, які варто пам'ятати:

  • Нічого не рухається, поки ви не перебудуєте.forge({ version: '1.20.1' }) розв'язується на вашому комп'ютері, коли ви збираєте.
  • Вилучені файли лишаються, якщо їх не покриває правило cleanup.

Що має лишитися осторонь ​

Бандл це архів zip. Кожен, хто його має, може прочитати його весь.

Тримайте остороньКладіть
Шляхи на вашому комп'ютері, userDataDir()У run або у --var при запуску
Імена гравців, UUID, токени доступуУ run або у --var при запуску
Приватні ключі, пароліНікуди поруч з manifest

Токени API, які ви даєте плагінам (curseforge, links), нормальні. Вони використовуються під час збирання і не записуються в бандл.

Чому це побудовано так ​

Чому zip? Щоб не був потрібен особливий інструмент. Його читає unzip, як і кожна мова.

Чому два файли JSON? Один описує бандл, інший встановлення. opys.json малий, збережений першим і без стиснення, тож інструмент може сказати, що за бандл, не читаючи мегабайти маніфесту.

Чому блоби названі хешем? Ім'я це перевірка цілісності. Бандл не може перевозити файл, який не збігається з власним ім'ям.

Чому число format? Щоб читач міг відхилити бандл, записаний в іншому форматі, замість прочитати його неправильно. Сьогодні це 1.

Пишете власний читач або встановлювач? Формат має кожне поле.