MC Toolkit

Руководства / Команды и данные

Пользовательские зачарования без модов: формат зачарований на основе данных

Зачарования стали JSON-данными датапаков, поэтому для своего зачарования мод не нужен. Вот структура файла, компоненты эффектов, которые действительно что-то делают, и способы сделать зачарование доступным.

Раньше зачарования были жёстко зашиты в код. Теперь это данные датапака, а значит настоящее пользовательское зачарование — с новым названием, новым эффектом и новой кривой стоимости — это файл JSON.

Где он лежит

data/<namespace>/enchantment/lightning_strike.json

В единственном числе enchantment/, как и любая другая категория датапаков после переименования.

Минимальный файл

{
  "description": { "translate": "enchantment.my_pack.lightning_strike" },
  "supported_items": "#minecraft:enchantable/melee_weapon",
  "weight": 2,
  "max_level": 3,
  "min_cost": { "base": 10, "per_level_above_first": 10 },
  "max_cost": { "base": 50, "per_level_above_first": 10 },
  "anvil_cost": 4,
  "slots": ["mainhand"]
}

Уже этого достаточно, чтобы зачарование загружалось и отображалось на предмете. Но оно пока ничего не делает — поведение задаётся отдельно — и стол не предложит его, пока оно не добавлено в тег (см. ниже).

  • weight — это редкость у чародейского стола. В ванилле используется 10 для обычных, 1 для очень редких. Значение относительное, а не процент.
  • slots определяет, где зачарование действует: mainhand, offhand, armor, head и так далее. Оно обязательно: пропустите его — и файл не загрузится.
  • supported_items принимает тег предмета или список. Теги #minecraft:enchantable/* уже существуют для разумных групп — melee_weapon, sharp_weapon, mining, armor и так далее. Тега enchantable/sword не существует; несуществующий тег приводит к ошибке загрузки файла.

Заставляем его что-то делать

effects прикрепляет поведение:

"effects": {
  "minecraft:post_attack": [{
    "enchanted": "attacker",
    "affected": "victim",
    "effect": { "type": "minecraft:run_function", "function": "my_pack:strike" },
    "requirements": { "condition": "minecraft:random_chance", "chance": 0.25 }
  }]
}

post_attack нужно знать, чьё это зачарование (enchanted) и на кого действует эффект (affected) — оба обязательны. run_function — это лазейка: зачарование может делать всё, что умеет функция. Встроенные типы эффектов покрывают урон, отдачу, прочность, выпадение предметов и атрибуты без всякой функции, и они дешевле.

requirements принимает любой предикат, поэтому условие по типу цели, погоде или случайному шансу — это один блок JSON.

Даём ему название

description — это текстовый компонент, поэтому жёстко заданное имя работает:

"description": { "text": "Lightning Strike", "color": "gold" }

но ключ translate плюс языковой файл в ресурспаке — вот что заставляет его читаться правильно для игроков на других языках — по той же причине этот сайт берёт игровые термины из собственных переводов Mojang.

Делаем его доступным

Три пути, и обычно нужно больше одного:

  • Чародейский стол — когда заданы weight и кривая стоимости, а зачарование входит в #minecraft:in_enchanting_table.
  • Таблицы добычи — enchant_randomly с вашим зачарованием в списке или enchant_with_levels, если оно должно конкурировать по стоимости.
  • Крестьянин торгует — чародейская книга с вашим зачарованием в предмете торговли.

Именно добавление в #minecraft:in_enchanting_table заставляет стол вообще предлагать его; про этот тег легко забыть, и тогда получается зачарование, которое существует, но никогда не появляется.

Соберите JSON зачарования и его аналог для узора брони, с заданными тегами и слотами, в Конструкторе пользовательских зачарований и узоров.

Свои чары и узоры брони →

Другие руководства

Смотреть все →