VillagersTradingPlus
Добавляйте, заменяйте или удаляйте сделки любого жителя, меняйте валюту, ставьте условия для сделок и меняйте их цены — всё это через датапак.
- Загрузчики
- FabricNeoForgeForge
- Скачиваний на Modrinth
- 69,3 тыс.
- Подписчиков на Modrinth
- 7
- версий
- 12
- Обновлён
- 22 октября 202622 окт.
- Опубликован
- в 2026
Коротко о моде
Нужен и в игре, и на сервере
VillagerTradingPlus позволяет полностью настроить торговлю с жителями для вашего мира.
Добавляйте, заменяйте или удаляйте сделки любого жителя, меняйте валюту, ставьте условия для появления сделок и меняйте их цены — всё это через датапак.
Версии: 1.20–1.20.1, 1.21–1.21.1, 1.21.6–1.21.8
Поддержите мою работу на
* ## Что это такое VillagerTradingPlus — это **библиотека. Сама по себе она не добавляет ни жителей, ни блоков, ни предметов: она заменяет механику торговли с жителями, чтобы моды и датапаки могли задавать сделки в JSON. Устанавливайте её, если какой-то мод её требует или если вы хотите переписать торговлю с жителями в своём паке. VillagersPlus — эталонный мод, построенный на её основе. ## Что с ней можно делать * Добавлять, удалять или перезаписывать сделки для любой профессии жителя, включая ванильные. * Менять валюту с изумрудов на любой предмет. * Задавать количество, максимальное число использований, опыт жителя и поведение цены для каждой сделки. * Ставить условия для сделок: биом, измерение, погода, время суток, фаза луны, игровое правило, блок рабочего места или флаг в конфиге. * Четырнадцать типов сделок: от простой продажи предмета до взвешенных пулов, карт структур и зачарованных книг из заданного вами взвешенного списка. * Объединять несколько датапаков, изменяющих одного и того же жителя, вместо того чтобы побеждал последний. * Настраивать странствующего торговца так же, с отдельными обычными и редкими уровнями. * ## Конфигурацияconfig/villagertradingplus/villagertradingplus-1.0-config.json5 Эти настройки применяются к каждой сделке, которую строит библиотека, независимо от того, какой мод или датапак её задал. ### Сделки | Параметр | По умолчанию | Что делает | | --- | --- | --- | | trade_offers_per_level | 2 | Максимум новых сделок, которые житель получает за уровень. | | trade_offers_wandering_trader | 5 | Максимум сделок, которые предлагает странствующий торговец. | | trade_price_multiplier_scale | 1.0 | Насколько сильно цены колеблются от спроса и репутации. 0.0 замораживает и то и другое. **Не меняет начальную цену сделки. | | trade_cost_scale | 1.0 | Умножает базовую стоимость каждой сделки (только первый слот входа). 2.0 удваивает все цены. Результат ограничен диапазоном 1 .. один стак. | | enable_conditional_trades | true | Проверяются ли сделки с условиями. false делает так, что каждая сделка появляется всегда. | | enable_time_of_day_pricing | false | Случайно подправляет стоимость сделки в зависимости от игрового времени, когда она открывается. Цена фиксируется при открытии и больше не меняется. | | time_of_day_price_variance | 0.15 | Насколько сильной может быть эта подправка, как доля от стоимости. Используется только когда включён параметр выше. | ### Управление экраном торговли Все три параметра allow_ по умолчанию выключены. Каталог открыт любому игроку. Кнопки переброса и управление уровнем требуют уровня разрешений из reroll_permission_level. Они предназначены для творческой стройки и тестирования, а не для серверов на выживание. | Параметр | По умолчанию | Что делает | | --- | --- | --- | | allow_trade_reroll | false | Кнопки для переброса сделок жителя или странствующего торговца — все сразу или по одному уровню. | | allow_set_villager_level | false | Управление для установки уровня жителя (1-5) и пересоздания его сделок. У странствующих торговцев нет уровней, они его игнорируют. | | reroll_permission_level | 0 | Уровень разрешений команды (0-4), нужный игроку для кнопок переброса и управления уровнем. 0 — любой игрок, 2 — игровые мастера. | | allow_view_all_trades | false | Кнопка, открывающая панель каталога только для чтения со списком всех сделок, которые житель мог бы получить на выбранном уровне, с весами, шансами и условиями. | * ## Создание датапака Файлы сделок кладутся в датапак в **ваше собственное пространство имён. Читаются три папки: | Папка | Что делает | | --- | --- | | `data//default_villager_trades/.json| Полностью заменяет сделки профессии. |
|data//villager_trades/.json| Добавляет к сделкам профессии. |
|data//wandering_trader_trades/.json| Сделки странствующего торговца. |
Файл профессии указывает профессию и содержит пять массивов уровней:
```json
{
"profession": "minecraft:butcher",
"trades": {
"novice": [],
"apprentice": [],
"journeyman": [],
"expert": [],
"master": []
}
}
```
Каждый фрагмент ниже — это один объект сделки, который кладётся в один из этих пяти массивов.
_Замечание: ванильные сделки пока не представлены в виде JSON, поэтому для их замены придётся выписать уровни,
которые вы хотите сохранить._
***
## Поля, которые принимает каждый тип сделки
Они опущены в примерах ниже, чтобы те были короче:
| Поле | Значение |
| --- | --- |
|max_uses| Сколько раз можно использовать сделку до её блокировки. |
|villager_experience| Опыт, который житель получает за использование. |
|price_multiplier| Насколько сильно репутация и Герой деревни влияют на цену этой сделки. |
|demand| Задаёт ванильное ценообразование по спросу: стоимость растёт с использованием и со временем спадает. |
|conditions/logic| См. **Условия** ниже. |
Типы сделок имеют пространство имёнvillagertradingplus:. Старое пространство имён villagersplus:` всё ещё принимается для датапаков, написанных до разделения, но при загрузке выдаёт предупреждение об устаревании, так что пишите новые файлы под новым. *** ## Типы сделок ### sell_item Житель продаёт предмет за цену.{
"type": "villagertradingplus:sell_item",
"sell": { "item": "minecraft:oxeye_daisy", "count": 1 },
"priceIn": { "item": "minecraft:emerald", "count": 2 }
}buy_item
Житель покупает предмет и платит вам.
{
"type": "villagertradingplus:buy_item",
"buy": { "item": "minecraft:wheat_seeds", "count": 4 },
"reward": { "item": "minecraft:emerald", "count": 1 }
}sell_tagged_item
Продаёт одного случайного представителя тега предметов. Представитель выбирается при генерации предложения, поэтому два жителя с такой торговлей обычно продают разные вещи. Ванильные сделки соответствуют конкретному предмету, так что это не совпадение «любой из» у прилавка.
{
"type": "villagertradingplus:sell_tagged_item",
"sell": { "tag": "minecraft:saplings", "count": 1 },
"priceIn": { "item": "minecraft:emerald", "count": 3 }
}buy_tagged_item
Та же идея, но для покупки.
{
"type": "villagertradingplus:buy_tagged_item",
"buy": { "tag": "minecraft:flowers", "count": 8 },
"reward": { "item": "minecraft:emerald", "count": 1 }
}process_item
Берёт convertible плюс priceIn и возвращает sell — классическая сделка «принеси мне сырьё».
{
"type": "villagertradingplus:process_item",
"convertible": { "item": "minecraft:dead_tube_coral", "count": 1 },
"priceIn": { "item": "minecraft:emerald", "count": 5 },
"sell": { "item": "minecraft:tube_coral", "count": 1 }
}multi_input
Два входа, один выход. В ванилле ровно два слота покупки, поэтому один из двух входов является валютой.
{
"type": "villagertradingplus:multi_input",
"input_a": { "item": "minecraft:emerald", "count": 5 },
"input_b": { "item": "minecraft:book", "count": 1 },
"sell": {
"item": "minecraft:enchanted_book",
"enchantments": [ { "id": "minecraft:mending", "lvl": 1 } ]
}
}weighted_pool
Выбирает одну из нескольких сделок по весу при генерации предложения. Ниже маргаритка в десять раз вероятнее розы иссушения.
{
"type": "villagertradingplus:weighted_pool",
"pool": [
{
"weight": 10,
"trade": {
"type": "villagertradingplus:sell_item",
"sell": { "item": "minecraft:oxeye_daisy", "count": 1 },
"priceIn": { "item": "minecraft:emerald", "count": 1 }
}
},
{
"weight": 1,
"trade": {
"type": "villagertradingplus:sell_item",
"sell": { "item": "minecraft:wither_rose", "count": 1 },
"priceIn": { "item": "minecraft:emerald", "count": 8 }
}
}
]
}sell_potion
Берёт convertible плюс priceIn и возвращает sell — для сделок в виде зелий. sell.count задаёт размер стака.
{
"type": "villagertradingplus:sell_potion",
"convertible": { "item": "minecraft:potion", "count": 3 },
"priceIn": { "item": "minecraft:emerald", "count": 5 },
"sell": { "item": "minecraft:splash_potion", "count": 1 }
}sell_map
Продаёт заполненную карту, указывающую на структуру. structure_id — это тег структур. name — ключ перевода; оставьте его пустым, чтобы сохранить ванильное название карты.
{
"type": "villagertradingplus:sell_map",
"structure_id": "minecraft:on_woodland_explorer_maps",
"name": "filled_map.mansion",
"buy": { "item": "minecraft:compass", "count": 1 },
"priceIn": { "item": "minecraft:emerald", "count": 2 },
"price_multiplier": 0.2
}sell_enchanted_tool
Продаёт инструмент со случайным зачарованием, в ванильном стиле. Цена зависит от того, что выпало.
{
"type": "villagertradingplus:sell_enchanted_tool",
"sell": { "item": "minecraft:diamond_pickaxe", "count": 1 },
"basePriceIn": { "item": "minecraft:emerald", "count": 2 }
}sell_specific_enchanted_tool
Продаёт инструмент с фиксированным зачарованием фиксированного уровня — гарантированный результат, а не случайный. enchantment по умолчанию minecraft:fortune, level — 1.
{
"type": "villagertradingplus:sell_specific_enchanted_tool",
"sell": { "item": "minecraft:diamond_pickaxe", "count": 1 },
"basePriceIn": { "item": "minecraft:emerald", "count": 32 },
"enchantment": "minecraft:efficiency",
"level": 4
}sell_enchanted_book
Продаёт случайно зачарованную книгу, в ванильном стиле.
{
"type": "villagertradingplus:sell_enchanted_book",
"currency": { "item": "minecraft:emerald" },
"price_multiplier": 0.2
}sell_specific_enchanted_book
Продаёт книгу с фиксированным зачарованием и уровнем. Поля sell нет, предмет всегда книга. enchantment по умолчанию minecraft:unbreaking, level — 1.
{
"type": "villagertradingplus:sell_specific_enchanted_book",
"basePriceIn": { "item": "minecraft:emerald", "count": 20 },
"enchantment": "minecraft:mending",
"level": 1
}sell_enchanted_book_from_list
Продаёт зачарованную книгу из взвешенного списка, который вы задаёте, так что вы точно контролируете, какие зачарования может предложить библиотекарь. Стоимость — base_cost + cost_per_level * level, умноженная на treasure_multiplier для сокровищных зачарований.
{
"type": "villagertradingplus:sell_enchanted_book_from_list",
"currency": { "item": "minecraft:emerald" },
"enchantments": [
{ "id": "minecraft:sharpness", "min_level": 1, "max_level": 3, "weight": 5 },
{ "id": "minecraft:unbreaking", "min_level": 1, "max_level": 3, "weight": 5 },
{ "id": "minecraft:mending", "min_level": 1, "max_level": 1, "weight": 1 }
],
"base_cost": 2,
"cost_per_level": 3,
"treasure_multiplier": 2,
"price_multiplier": 0.2
}Conditions
Добавьте массив conditions к любой сделке, чтобы её ограничить. Логика по умолчанию — И; установите "logic": "or" у сделки, чтобы требовалось только одно из условий. Момент важен. Условия проверяются один раз, в момент генерации предложения при повышении уровня жителя, а не постоянно. Условия местоположения (biome, dimension, job_site_block, config_flag) стабильны для оседлого жителя и потому надёжны. Условия состояния мира
(weather, day_night, moon_phase, gamerule) — это снимок того момента: сделка, привязанная к night, остаётся доступной средь бела дня, как только она была сгенерирована. Условия можно отключить глобально с помощью enable_conditional_trades.
| Тип | Поля | Пример |
|---|---|---|
biome | tag (строка) или biomes (массив) | { "type": "biome", "tag": "minecraft:is_ocean" } |
dimension | dimension | { "type": "dimension", "dimension": "minecraft:overworld" } |
weather | state: clear, rain, thunder | { "type": "weather", "state": "rain" } |
day_night | time: day или night | { "type": "day_night", "time": "night" } |
moon_phase | phases (массив от 0 до 7); по умолчанию также требует ночь, установите "require_night": false для чистого лунного дня | { "type": "moon_phase", "phases": [0] } |
config_flag | field (имя булева поля конфига), необязательный value | { "type": "config_flag", "field": "allow_trade_reroll" } |
gamerule | rule (булево правило игры), необязательный value | { "type": "gamerule", "rule": "doInsomnia", "value": true } |
job_site_block | blocks (массив) или wood_variant (строка, сверяемая с id блока) | { "type": "job_site_block", "blocks": [ "villagersplus:oceanographer_table" ] } |
Обратите внимание, что biomes, blocks и phases принимают массивы, а tag, dimension и wood_variant — одну строку.
{
"type": "villagertradingplus:sell_item",
"sell": { "item": "minecraft:heart_of_the_sea", "count": 1 },
"priceIn": { "item": "minecraft:emerald", "count": 30 },
"logic": "or",
"conditions": [
{ "type": "biome", "tag": "minecraft:is_ocean" },
{ "type": "day_night", "time": "night" }
]
}Ценообразование
price_multiplier и demand работают с любой сделкой и задействуют ванильный механизм цен:
price_multiplier— насколько сильно репутация и Герой Деревни влияют на цену этой сделки.demand— задаёт ванильное отслеживание спроса. Стоимость растёт по мере использования сделки и со временем снова снижается. Оба параметра масштабируются на весь сервер черезtrade_price_multiplier_scale(размах колебаний) иtrade_cost_scale(базовая стоимость). Скидки за репутацию и Героя Деревни применяются ванилью поверх.
{
"type": "villagertradingplus:sell_item",
"sell": { "item": "minecraft:diamond", "count": 1 },
"priceIn": { "item": "minecraft:emerald", "count": 12 },
"price_multiplier": 0.1,
"demand": 10
}Пользовательские предметы
Любой стак предметов в любом типе сделки принимает этот синтаксический сахар, специальный тип сделки не нужен:
| Поле | Значение |
|---|---|
name | Отображаемое имя. Обычная строка или сырой JSON-компонент текста. |
lore | Массив строк описания. |
enchantments | Массив { "id": ..., "lvl": ... }. |
color | Hex-цвет для окрашиваемой брони. |
potion | id зелья для предметов-зелий. |
skull_owner | Имя игрока для голов игроков. |
book | { "title": ..., "author": ..., "pages": [...] } для написанных книг. |
nbt | Сырой SNBT, применяется последним как запасной вариант. |
{
"type": "villagertradingplus:sell_item",
"sell": {
"item": "minecraft:diamond_sword",
"name": "{\"text\":\"Excalibur\",\"color\":\"gold\",\"italic\":false}",
"lore": [ "A blade of legend" ],
"enchantments": [ { "id": "minecraft:sharpness", "lvl": 5 } ],
"nbt": "{Unbreakable:1b}"
},
"priceIn": { "item": "minecraft:emerald", "count": 40 }
}Сделки странствующего торговца
Создайте датапак со следующей структурой каталогов:
data/<namespace>/wandering_trader_tradesПодойдёт любое имя файла. Вместо пяти уровней жителя у странствующего торговца два:
common— уровень 1. Выбирается несколько, количество задаётсяtrade_offers_wandering_trader.rare— уровень 2. Выбирается ровно одна. Установите"replace": true, чтобы убрать ванильные сделки странствующего торговца и использовать только свои. Опустите его (или установитеfalse), чтобы добавить поверх ванильных. Все типы сделок, блок условий и ценообразование работают здесь точно так же, как у жителей. Уровень без пользовательских сделок сохраняет ванильные сделки, даже еслиreplaceустановлен вtrue.
{
"replace": false,
"trades": {
"common": [
{
"type": "villagertradingplus:sell_item",
"sell": { "item": "minecraft:glowstone_dust", "count": 4 },
"priceIn": { "item": "minecraft:emerald", "count": 2 },
"conditions": [ { "type": "day_night", "time": "night" } ],
"max_uses": 6,
"villager_experience": 1
}
],
"rare": [
{
"type": "villagertradingplus:sell_item",
"sell": {
"item": "minecraft:trident",
"name": "{\"text\":\"Traveler's Trident\",\"color\":\"aqua\",\"italic\":false}",
"enchantments": [ { "id": "minecraft:loyalty", "lvl": 3 } ],
"nbt": "{Unbreakable:1b}"
},
"priceIn": { "item": "minecraft:emerald", "count": 30 },
"max_uses": 2,
"villager_experience": 1
}
]
}
}Готовые примеры файлов
Внутри jar в data/villagertradingplus/available_trade_examples вы найдёте полные, готовые к копированию файлы для случаев, которые плохо показывает фрагмент:
full_profession.json— одна профессия на всех пяти уровнях, смешивающая множество типов сделок.conditions_and_pricing.json— условия и ценообразование на реалистичных сделках.wandering_trader.json— полный файл странствующего торговца.
Сообщество
Вопросы, скриншоты и помощь в Discord.
Другие моды от LithiumPlus
- The Graveyard: структуры, мобы, блоки и босс в тематике кладбища. Версия для Forge: The Graveyard (Forge).
- VillagersPlus: новые типы жителей, сделки и рабочие места.
Nyctophobia: тёмные, туманные и жуткие биомы для Верхнего мира.
- DataDrivenVillagers (CurseForge): создавай и меняй профессии жителей через JSON-файлы или редактор прямо в игре. VanillaTales — это набор небольших независимых модов, которые добавляют маленькие истории в ванильный контент. Ставь только те, что нужны. Ссылки ведут на CurseForge.
- Golem Patrol: железные големы патрулируют днём, стоят на страже ночью и сбегаются на звон колокола.
- Zombie Sieges: превращает ванильную осаду зомби в настоящее событие — со звоном колокола, полосой босса и двумя волнами зомби.
- Sherd Stories: даёт каждому украшенному горшку название и историю о том, где нашли его черепки.
- Ghost Crews: даёт каждому затонувшему кораблю имя и команду утопленников, которые охраняют его, пока всё не разграбят.
- Illager Scouts: разведчик разбойников следит за твоей деревней и предупреждает тебя за два дня до прихода патруля.
- Occupied Villages: некоторые новые деревни появляются уже занятыми гарнизоном разбойников, который можно освободить.
- Bonded Pairs: связывает двух мобов из одной группы спавна в пару, которая мстит друг за друга.
- Raid Aftermath: жители чинят ущерб, который набег или взрыв оставили в деревне.
- Wayfarer's Landmarks: показывает название и полезные иконки, когда ты входишь в структуру.
Частые вопросы
Как установить VillagersTradingPlus?
Установите Fabric под свою версию Minecraft, скачайте VillagersTradingPlus под ту же версию и загрузчик, положите файл в папку mods и запустите игру с профилем загрузчика.
Для каких версий Minecraft есть VillagersTradingPlus?
У VillagersTradingPlus есть сборки для Minecraft 1.20–1.20.1, 1.21–1.21.1, 1.21.6–1.21.8.
Нужен ли VillagersTradingPlus на сервере?
Нужен и в игре, и на сервере

