Змінні
Змінна це іменоване значення. Рядки в маніфесті посилаються на неї як ${name}, а значення підставляється на комп'ютері, де відбувається встановлення.
{
"vars": {
"root": ".",
"game_directory": "${root}/",
"library_directory": "${root}/libraries"
}
}Навіщо вони: маніфест однаковий для кожного гравця, а шляхи й облікові записи ні. Маніфест їх називає, а кожен комп'ютер їх надає.
Ця сторінка про синтаксис. Імена, які справді використовує збірка Minecraft, наведено в розділі Змінні довідника.
У конфігурації
Звичайний Minecraft з обмеженням пам'яті:
// opys.config.mjs
export default defineConfig({
plugins: [
minecraft({ version: '1.21.1' }),
java({ version: '21' }),
],
manifest: {
command: '@minecraft.command',
args: [
'-Xmx${max_ram}', // використано тут: Java отримує -Xmx4G
'@minecraft.jvmArgs',
'@minecraft.mainClass',
'@minecraft.gameArgs',
],
workdir: '${game_directory}',
vars: {
max_ram: '4G', // визначено тут
},
},
});Значення в конфігурації це типове значення. Перевизначте його під час запуску, не чіпаючи конфігурацію:
opys launch --var max_ram=8GТепер Java отримує -Xmx8G.
Просте значення
"launcher_name": "opys"Однакове на кожному комп'ютері. Може посилатися на інші змінні.
Одне значення на платформу
"java_bin": [
{ "value": "${java_home}/bin/java", "rules": "allow.os.linux" },
{ "value": "${java_home}/bin/java", "rules": "allow.os.osx" },
{ "value": "${java_home}\\bin\\javaw.exe", "rules": "allow.os.windows" }
]Список варіантів, кожен зі своїми правилами.
- Перемагає останній варіант, правила якого проходять.
- Варіант без
rulesпроходить завжди, тож ставте типове значення першим. - Якщо не проходить жоден, змінна взагалі не визначена.
Застосування: усе, що різниться за ОС, наприклад виконуваний файл Java або роздільник classpath (; на Windows, : в інших місцях).
Звідки беруться значення
Три шари, пізніші перемагають:
varsманіфесту, підібрані для цієї платформи.run, під час запуску з конфігурації.varsлаунчера, або--varу командному рядку.
Тож маніфест може дати типове значення (root це .), а комп'ютер його замінить.
root
root це єдина змінна, яку встановлювач знає за ім'ям. Це тека, в якій живе встановлення, і нічого не записується й не видаляється поза нею.
| Що | Має бути |
|---|---|
path артефакту | Файл усередині root. |
Розпакування в into | root або тека в ньому. З clean: true або для вибраного файла: усередині неї. |
Шаблон includes очищення | Усередині root. |
launch.workdir | root або тека в ньому. |
Шлях, що це порушує, зупиняє встановлення ще до будь-якого завантаження.
- Усередині означає, що шлях починається з
rootі не має..після нього. Тож пишіть шляхи з${root}або зі змінною, зібраною з нього. - Лаунчер завжди має передавати
root. Його значення перемагає значення з маніфесту, тож бандл не може сам вибрати собі теку. - Відносний
root, як-от типовий., робиться абсолютним відносно теки, з якої працює встановлювач. - Встановлення без
rootабо з/чи цілим диском замість нього відхиляється. launch.commandдо нього не прив'язаний.javaзіPATHпоза кожним коренем.- Символічне посилання, яке гравець зробив усередині
root, читається. Те, яке архів створив би в місце поза своїмinto, зупиняє встановлення.
Підстановка
${name} замінюється в таких місцях:
| Де | Приклад |
|---|---|
path артефакту | ${game_directory}/mods/jei.jar |
url джерела | ${mirror}/libraries/a.jar |
Розпакування в into | ${natives_directory} |
launch.command, workdir | ${java_bin} |
| Кожен аргумент, кожне значення середовища | -Djava.library.path=${natives_directory} |
| Шаблони очищення | ${game_directory}/mods/*.jar |
| Значення інших змінних | ${root}/libraries |
Вона не застосовується в id блобів, правилах і шаблонах записів extract.
Правила:
- Змінні можуть посилатися одна на одну. Цикл це помилка.
- Ім'я, яке ніщо не визначає, лишається як написано. Без помилки. Тоді гра отримує буквальний текст
${username}. \${це буквальне${.- Один аргумент лишається одним аргументом. Змінна не може розгорнутися в кілька.
Виняток
У шаблоні очищення невизначена змінна це вже помилка. Видаляти за шляхом із діркою в ньому надто небезпечно, щоб дозволити.