Очищення
cleanup це список правил для файлів, яких там більше не має бути. Він виконується останнім, після того як усе встановлено й розпаковано.
{
"cleanup": [
{ "includes": ["${game_directory}/mods/*.jar"] },
{
"includes": ["${game_directory}/config/**"],
"excludes": ["**/options.txt"]
}
]
}Навіщо воно: встановлення лише додає й оновлює. Приберіть мод зі збірки, і кожен гравець, що його має, збереже jar. cleanup це спосіб, яким збірка щось забирає.
У конфігурації
Звичайний Minecraft, що прибирає зайві моди й конфігурації:
// 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 | ні | Шаблони файлів для збереження. |
Файл видаляється, коли виконуються всі три умови:
- Він збігається з одним з
includes. - Він не збігається з жодним з
excludes. - Цей маніфест його не встановлював.
Третя не необов'язкова, її не можна вимкнути. Тож mods/*.jar означає «кожен jar у mods, що не є частиною цієї збірки».
«Встановлені» включають файли, розпаковані з архіву.
Шаблони
Шаблони збігаються з цілими шляхами, після того як змінні підставлено.
| Шаблон | Збігається |
|---|---|
* | Будь-що в межах однієї теки. |
? | Один символ у межах теки. |
** | Будь-що, крізь теки. |
{a,b} | Або a, або b. |
${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/*.
Їх пише лише автор
Плагін не може додати правило очищення. Те, що видаляє файли, не є річчю, яку отримують від залежності.