Skip to content

Змінні ​

Змінна це іменоване значення. Рядки в маніфесті посилаються на неї як ${name}, а значення підставляється на комп'ютері, де відбувається встановлення.

json
{
  "vars": {
    "root": ".",
    "game_directory": "${root}/",
    "library_directory": "${root}/libraries"
  }
}

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

Ця сторінка про синтаксис. Імена, які справді використовує збірка Minecraft, наведено в розділі Змінні довідника.

У конфігурації ​

Звичайний Minecraft з обмеженням пам'яті:

js
// 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', // визначено тут
    },
  },
});

Значення в конфігурації це типове значення. Перевизначте його під час запуску, не чіпаючи конфігурацію:

sh
opys launch --var max_ram=8G

Тепер Java отримує -Xmx8G.

Просте значення ​

json
"launcher_name": "opys"

Однакове на кожному комп'ютері. Може посилатися на інші змінні.

Одне значення на платформу ​

json
"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, : в інших місцях).

Звідки беруться значення ​

Три шари, пізніші перемагають:

  1. vars маніфесту, підібрані для цієї платформи.
  2. run, під час запуску з конфігурації.
  3. vars лаунчера, або --var у командному рядку.

Тож маніфест може дати типове значення (root це .), а комп'ютер його замінить.

root ​

root це єдина змінна, яку встановлювач знає за ім'ям. Це тека, в якій живе встановлення, і нічого не записується й не видаляється поза нею.

ЩоМає бути
path артефактуФайл усередині root.
Розпакування в intoroot або тека в ньому. З clean: true або для вибраного файла: усередині неї.
Шаблон includes очищенняУсередині root.
launch.workdirroot або тека в ньому.

Шлях, що це порушує, зупиняє встановлення ще до будь-якого завантаження.

  • Усередині означає, що шлях починається з 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}.
  • \${ це буквальне ${.
  • Один аргумент лишається одним аргументом. Змінна не може розгорнутися в кілька.

Виняток

У шаблоні очищення невизначена змінна це вже помилка. Видаляти за шляхом із діркою в ньому надто небезпечно, щоб дозволити.