Skip to content

Очищення ​

cleanup це список правил для файлів, яких там більше не має бути. Він виконується останнім, після того як усе встановлено й розпаковано.

json
{
  "cleanup": [
    { "includes": ["${game_directory}/mods/*.jar"] },
    {
      "includes": ["${game_directory}/config/**"],
      "excludes": ["**/options.txt"]
    }
  ]
}

Навіщо воно: встановлення лише додає й оновлює. Приберіть мод зі збірки, і кожен гравець, що його має, збереже jar. cleanup це спосіб, яким збірка щось забирає.

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

Звичайний Minecraft, що прибирає зайві моди й конфігурації:

js
// opys.config.mjs
export default defineConfig({
  plugins: [
    minecraft({ version: '1.21.1' }),
    java({ version: '21' }),
  ],
  manifest: {
    command: '@minecraft.command',
    args: ['@minecraft.jvmArgs', '@minecraft.mainClass', '@minecraft.gameArgs'],
    workdir: '${game_directory}',
    cleanup: [
      // кожен jar у mods, який ця збірка не встановила
      { includes: ['${game_directory}/mods/*.jar'] },
      // усе під config, крім будь-якого options.txt
      {
        includes: ['${game_directory}/config/**'],
        excludes: ['**/options.txt'],
      },
    ],
  },
});

Коли й навіщо його використовувати: Конфігурація.

Правило ​

ПолеОбов'язковеЩо це
includesтакШаблони файлів для видалення.
excludesніШаблони файлів для збереження.

Файл видаляється, коли виконуються всі три умови:

  1. Він збігається з одним з includes.
  2. Він не збігається з жодним з excludes.
  3. Цей маніфест його не встановлював.

Третя не необов'язкова, її не можна вимкнути. Тож mods/*.jar означає «кожен jar у mods, що не є частиною цієї збірки».

«Встановлені» включають файли, розпаковані з архіву.

Шаблони ​

Шаблони збігаються з цілими шляхами, після того як змінні підставлено.

ШаблонЗбігається
*Будь-що в межах однієї теки.
?Один символ у межах теки.
**Будь-що, крізь теки.
{a,b}Або a, або b.
text
${game_directory}/mods/*.jar          jars directly in mods
${game_directory}/mods/**/*.jar       jars in mods and its subfolders
${game_directory}/logs/**             everything under logs
${game_directory}/{logs,crash-reports}/**

Шаблон excludes, що не є повним шляхом, збігається на будь-якій глибині: *.bak зберігає кожен файл .bak.

Шляхи порівнюються як шляхи. a//b, a/./b і a/b це той самий файл. На Windows регістр ігнорується, а \ читається як /.

Теки ​

Тека видаляється, коли очищення лишає її порожньою. Тож logs/** видаляє сам logs, а mods/*.jar видаляє mods, лише якщо забрала останній файл.

Тека, що вже була порожньою і яку жодне правило не називає, лишається.

Що відхиляється ​

Кожне правило перевіряється ще до будь-якого завантаження. Усе встановлення зупиняється, якщо шаблон includes після підстановки:

ПроблемаПриклад
Досі містить ${${typo}/mods/*
Не є абсолютним шляхомmods/*.jar
Містить ..${root}/../*
Не має теки перед першим шаблоном/*, C:/*
Поза root/home/me/**

Чому так суворо: кожне з них це правило, що могло б видалити куди більше, ніж мав на увазі його автор. Порожня змінна перетворює ${root}/mods/* на /mods/*.

Їх пише лише автор ​

Плагін не може додати правило очищення. Те, що видаляє файли, не є річчю, яку отримують від залежності.