▶️ ЗАБЕРИ СВОИ 8 ПОДАРКОВ 🎁 ПРИ СОЗДАНИИ СВОЕГО МАЙНКРАФТ СЕРВЕРА
Моды/VillagersTradingPlus
VillagersTradingPlus

VillagersTradingPlus

Мод VillagersTradingPlus для Minecraft позволяет полностью переделать торговлю жителей через датапаки: менять валюту, добавлять условия, переписывать сделки и настраивать странствующего торговца.

Оцените первым
37.9K
4

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

Зачем это вообще нужно? В ванильном Minecraft сделки жителей зашиты в код игры. Хочешь, чтобы библиотекарь продавал только Остроту и Починку, а мясник покупал изумруды за свинину - извини, без модов никак. С VillagersTradingPlus ты просто пишешь JSON, кладёшь его в датапак, и жители торгуют так, как ты решил. Это находка для сборок модов, RPG-серверов и всех, кто строит свой мир с уникальной экономикой.

Скачать VillagersTradingPlus стоит, если какой-то мод требует его как зависимость, или если ты сам хочешь переписать торговлю. Эталонный пример мода на этой библиотеке - VillagersPlus, который как раз построен поверх неё.

Мод работает на Fabric, NeoForge и Forge, поддерживает Minecraft 1.20.1, 1.21.1 и 1.21.8.

Что умеет библиотека

  • Добавлять, удалять и перезаписывать сделки для любой профессии жителя, включая ванильные.
  • Менять валюту с изумрудов на любой предмет - хоть на золотые слитки, хоть на алмазы.
  • Настраивать количество, лимит использований, опыт жителя и поведение цены для каждой сделки.
  • Прятать сделки за условиями: биом, измерение, погода, время суток, фаза луны, геймрул, рабочий блок или флаг из конфига.
  • Четырнадцать типов сделок - от простой продажи предмета до взвешенных пулов, карт сокровищ и зачарованных книг из твоего собственного списка.
  • Объединять несколько датапаков, которые меняют одного и того же жителя, вместо того чтобы последний перезаписывал всех.
  • Настраивать странствующего торговца точно так же, с его собственными обычным и редким уровнями.

Конфигурация

Файл настроек лежит тут:

config/villagertradingplus/villagertradingplus-1.0-config.json5

Эти параметры применяются ко всем сделкам, которые строит библиотека, независимо от того, какой мод или датапак их определил.

Торговля

ОпцияПо умолчаниюЧто делает
trade_offers_per_level2Максимум новых сделок, которые житель получает за уровень.
trade_offers_wandering_trader5Максимум сделок у странствующего торговца.
trade_price_multiplier_scale1.0Масштабирует, насколько сильно цены колеблются от спроса и репутации. 0.0 замораживает оба эффекта. Не меняет стартовую цену сделки.
trade_cost_scale1.0Умножает базовую стоимость каждой сделки (только первый входной слот). 2.0 удваивает все цены. Результат ограничен от 1 до одного стака.
enable_conditional_tradestrueПроверять ли условия для сделок. false делает все сделки доступными всегда.
enable_time_of_day_pricingfalseСлучайно подталкивает цену сделки в зависимости от игрового времени, когда она разблокирована. Цена фиксируется в момент разблокировки и дальше не меняется.
time_of_day_price_variance0.15Насколько сильно может сместиться цена, в долях от стоимости. Работает только если включена опция выше.

Кнопки на экране торговли

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

ОпцияПо умолчаниюЧто делает
allow_trade_rerollfalseКнопки для переброса сделок жителя или торговца - всех сразу или по одному уровню.
allow_set_villager_levelfalseКонтроль для установки уровня жителя (1-5) с перегенерацией сделок. У странствующего торговца уровней нет, он это игнорирует.
allow_view_all_tradesfalseКнопка, открывающая панель-каталог со всеми сделками, которые житель может выкинуть на выбранном уровне, с весами, шансами и условиями. Только для чтения.

Создание датапака

Файлы сделок кладутся в датапак под твоим собственным неймспейсом. Библиотека читает три папки:

ПапкаЧто делает
data/<неймспейс>/default_villager_trades/<профессия>.jsonПолностью заменяет сделки профессии.
data/<неймспейс>/villager_trades/<профессия>.jsonДобавляет сделки к профессии.
data/<неймспейс>/wandering_trader_trades/<любое имя>.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, для сделок с зельями.

{
  "type": "villagertradingplus:sell_potion",
  "convertible": { "item": "minecraft:potion", "count": 3 },
  "priceIn": { "item": "minecraft:emerald", "count": 5 },
  "sell": { "item": "minecraft:splash_potion", "count": 7 }
}

sell_map

Продаёт заполненную карту, указывающую на структуру. structure_id - это тег структуры.

{
  "type": "villagertradingplus:sell_map",
  "structure_id": "minecraft:on_woodland_explorer_maps",
  "name": "filled_map",
  "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 к любой сделке, чтобы спрятать её за проверкой. По умолчанию логика И (AND); поставь "logic": "or" на сделке, чтобы достаточно было одного условия.

Тайминг важен. Условия проверяются один раз - в момент генерации сделки, когда житель повышает уровень. Не постоянно. Условия по местоположению (biome, dimension, job_site_block, config_flag) стабильны для осевшего жителя и поэтому надёжны. Условия по состоянию мира (weather, day_night, moon_phase, gamerule) - это снимок того момента: сделка, привязанная к night, останется доступной средь бела дня, если уже выпала.

Условия можно глобально отключить через enable_conditional_trades.

ТипПоляПример
biometag (строка) или biomes (массив){ "type": "biome", "tag": "minecraft:is_ocean" }
dimensiondimension{ "type": "dimension", "dimension": "minecraft:overworld" }
weatherstate: clear, rain, thunder{ "type": "weather", "state": "rain" }
day_nighttime: day или night{ "type": "day_night", "time": "night" }
moon_phasephases (массив 0-7){ "type": "moon_phase", "phases": [0] }
config_flagfield (имя булева поля конфига), опционально value{ "type": "config_flag", "field": "can_explode" }
gamerulerule (булев геймрул), опционально value{ "type": "gamerule", "rule": "doInsomnia", "value": true }
job_site_blockblocks (массив) или 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 text component.
loreМассив строк лора.
enchantmentsМассив { "id": ..., "lvl": ... }.
colorHex-цвет для красимой брони.
potionId зелья для зелий.
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/<неймспейс>/wandering_trader_trades

Имя файла любое. Вместо пяти уровней жителя у торговца два:

  • common - уровень 1. Выбирается несколько, количество задаёт trade_offers_wandering_trader.
  • rare - уровень 2. Выбирается ровно одна.

Поставь "replace": true, чтобы выкинуть ванильные сделки торговца и использовать только свои. Не ставь (или false), чтобы добавить поверх ванильных. Все типы сделок, блок условий и ценообразование работают тут точно так же, как у жителей.

{
  "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 - полный файл странствующего торговца.

Скачать мод VillagersTradingPlus и начать переписывать экономику своего мира - это, пожалуй, самый гибкий способ настроить торговлю в Майнкрафт без единой строчки Java-кода. Для сборок модов и серверов с кастомной экономикой - must-have.

Партнёрский материал

Как поиграть с друзьями с модом VillagersTradingPlus?

Мод VillagersTradingPlus куда интереснее в компании: поднимите сервер Майнкрафт с уже установленным модом, позовите друзей и играйте по своим правилам. Хостинг Майнкрафт для мода VillagersTradingPlus будет готов за пару минут - BungeeHost сделает всё за вас.

Часто задаваемые вопросы

Совместимость

Minecraft: Java Edition

1.21.x1.20.x

Платформы

Поддерживаемые окружения

Клиент и сервер

Ссылки


Создатели

Детали

Лицензия:
Опубликован:2 месяца назад
Обновлён:2 месяца назад
Главная