Shifting Wares
Shifting Wares (в просторечии - "Меняющийся товар") - это мод для Minecraft, который заставляет жителей деревень (виллажеров) время от менять свои торговые предложения по собственной инициативе. Максимум - до трех раз в день. Если у вас есть житель-библиотекарь с чарами или кожевник с цветными предложениями - разница будет особенно заметна. Один такой житель сможет со временем предложить гораздо больше разных товаров.
Зачем это нужно?
В ванильном Майнкрафте многие игроки привыкли ставить жителя в ловушку, снова и снова ломая и ставя его рабочее место, чтобы получить идеальные торги. Это превращает выживание в унылый скрипт. Shifting Wares сглаживает эту геймплейную яму: жители с идеальными трейдами не сохранят их навечно, а те, у кого плохие предложения - рано или поздно получат дельные. При этом иметь нескольких жителей одной профессии становится по-прежнему выгодно - шанс получить конкретный трейд выше.
Еще один плюс: если ваш виллажер случайно умрет (зомби, молния, неудачный поршень), заменить его теперь проще. Все трейды в любом случае обновятся со временем. Можно особо не париться о безопасности каждого жителя и позволить им свободно бродить по деревне.
Как именно срабатывает пересчет
Есть два игровых правила (gamerule), которые управляют пересчетом. Оба включены по умолчанию. Если отключить все, мод по сути перестает работать:
shifting-wares:daily_reroll- Раз в день, в первый раз когда житель пополняет запасы на своей рабочей станции, он полностью меняет ВСЕ свои предложения.shifting-wares:deplete_reroll- Когда житель пополняет запасы, он пересчитывает ЛЮБУЮ полностью распроданную позицию. При этом позиция не пополняется - она заменяется новой.
Исследовательские карты и постоянные трейды
Майнкрафт сохраняет созданные карты навсегда и блокирует повторное появление их структур на других картах. Чтобы ежедневный пересчет не выкидывал кипы непроданных карт, мод помечает такие трейды как постоянные (persistent).
Постоянные трейды обновляются только если их хотя бы раз использовали, И если включен gamerule shifting-wares:allow_persistent_reroll (отключен по умолчанию).
Создатели датапаков могут пометить любой трейд как постоянный, добавив поле:
{
"shiftingwares:isPersistent": true,
"wants": "...",
"gives": "...",
"...": "..."
}
Защита рабочего места
Ломать и ставить заново рабочее место больше не сбрасывает трейды жителя. Начальные предложения генерируются детерминированно, на основе UUID жителя. То есть вы не сможете "скормить" жителю книжную полку и надеяться на чудо - он все равно выдаст то, что заложено в его персональном коде.
Управляется это правилом shifting-wares:workstation_protection.
Технические нюансы
-
Если житель не может сгенерировать трейд для слота (такое бывает у картографов в мирах без структур), он получит пустой трейд. Это необходимо, чтобы пересчет не сбивал уровни - позиция трейда в списке указывает на его уровень. Пустышки не заменят существующие трейды, они появятся, только если все остальные варианты исчерпаны.
-
Побочный эффект мода: механика "бонуса спроса" (Demand Bonus) становится слабее, потому что данные о спросе удаляются вместе с трейдами, которые пересчитываются.
Для разработчиков (для версий до MC 26.1)
По умолчанию мод берет 2 трейда на уровень из тех же пулов, что и ванилла. Другие моды могут переопределить это, используя точку входа shifting-wares и реализуя ITradeLayoutProvider.
Если ваш мод добавляет свои фабрики карт или предметы с перманентными данными, вы можете пометить их как постоянные, реализовав методы из IShiftingTradeFactory. Привязка к Shifting Wares не требуется - просто предоставьте методы с совпадающими именами и сигнатурами.
Сопутствующие проекты
- VillagerConfig Addon - аддон-совместимость для использования трейдов из VillagerConfig.
- Gamerule Menu - позволяет открыть меню игровых правил в одиночной игре, чтобы быстро настроить пересчет.
Скачайте Shifting Wares, если надоело возиться с жителями и хочется более живой экономики без скучного скрипта. Мод делает торговлю непредсказуемой, но справедливой - вы всегда можете подстраховаться парой лишних жителей.

