Бандл
Бандл це файл, який записує opys build, зазвичай <name>.opys. Це вся збірка в одному файлі і єдине, що потрібне гравцю або лаунчеру.
Що це
Архів zip з трьома видами записів:
unzip -l game.opys
# opys.json формат та налаштування, які може задати гравець
# manifest.json файли для встановлення і спосіб запуску гри
# blobs/<sha256> ваші власні файли, перевезені всерединіmanifest.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) | |
|---|---|---|
| Де | Всередині бандла, як блоби | На вашому сервері |
| Ви тримаєте | Лише бандл | Бандл і кожен файл |
| Розмір бандла | Росте з файлами | Лишається малим |
| Добре для | Конфігурацій, кількох модів | Сотень мегабайтів |
Починайте з перевезених. Більше нічого не мусить лишатися в мережі, і нічого не може загубитися.
Де використовується бандл
Перевірка самостійно. Запустіть бандл так, як його запустив би гравець, без вашої конфігурації:
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.
Пишете власний читач або встановлювач? Формат має кожне поле.