IC2 Price Guard 2.0.0 — лимиты цены для Villager-O-Mat

Совместимость
Minecraft Java 1.19.2, Forge 43.x, IC2 Classic 1.19.2-2.1.2.1.
Это дополнение к IC2, а не замена IC2. На других версиях IC2 загрузка
намеренно запрещена: мод меняет конкретные методы этой версии станции.

Установка
1. Закройте игру/сервер. Удалите старый ic2-price-guard-1.0.0*.jar из mods.
2. Положите ic2-price-guard-2.0.0-mc1.19.2-fixed.jar в mods.
3. Для сервера установите одинаковую версию дополнения на сервер И клиент.
   В одиночной игре достаточно файла в mods своей сборки.
4. Откройте существующую станцию. Начальный предел первой оплаты — 1.
   Сохранённые в IC2 включения/выключения торгов продолжают действовать.

Управление
Справа от списка сделок появятся кнопки [−] [≤1] [+].
Сначала выберите штатным переключателем IC2:
  «Все жители» — правило для всех жителей этой станции;
  профессию — правило для всех жителей этой профессии;
  одного жителя — исключение только для него.

Верхняя строка «Все:1» задаёт общий предел для всех сделок выбранной группы.
Четыре строки ниже относятся к соседним сделкам. Прокрутка общая с IC2.
  − и +: предел от 1 до 64;
  Shift с − или +: шаг 8;
  левый клик по центральной кнопке в интерфейсе: без лимита (∞); повторное нажатие возвращает 1;
  Shift + левый клик по центральной кнопке в интерфейсе: удалить это исключение и наследовать общее правило.
  Для общего правила всей станции сброс возвращает 1.
Звёздочка * означает унаследованный предел.
Подсказка при наведении показывает область правила и ответ сервера.
Дождитесь обновления числа от сервера перед следующим нажатием.
Если правая панель не помещается, уменьшите масштаб интерфейса Minecraft.
Область панели зарегистрирована через штатную интеграцию IC2 с JEI.

Примеры
— Покупать любые товары максимум за 1 изумруд: оставьте общий предел 1.
— Покупать определённую книгу у всех библиотекарей максимум за 20:
  выберите библиотекарей и увеличьте предел рядом с этой книгой до 20.
— Продавать по 32 палки за изумруд: для сделки с палками установите 32.
  Лимит 1 означал бы, что станция разрешает отдавать максимум одну палку.
— Разрешить все цены у одной профессии: выберите её и нажмите центральную
  кнопку левой кнопкой мыши в верхней строке. Уже созданные более узкие исключения сохраняются.

Приоритеты (первое найденное правило применяется)
1. Сделка конкретного жителя.
2. Все сделки конкретного жителя.
3. Сделка выбранной профессии.
4. Все сделки выбранной профессии.
5. Сделка в группе «Все жители».
6. Общее правило станции (исходно 1).
Поэтому изменение общего правила не удаляет индивидуальные исключения.
Чтобы убрать исключение, выберите его и, удерживая Shift, нажмите центральную кнопку левой кнопкой мыши.

Как проверяется цена
Лимит задаёт максимальное количество предметов, отдаваемых жителю за
одну сделку: изумрудов, моркови или другого предмета. Если нужны два вида
оплаты, лимит действует только на первый слот; второй по-прежнему требуется.
Проверяется актуальная цена с учётом скидок и спроса, перед симуляцией
и перед списанием предметов.
Количество получаемого товара не обязано равняться 1.
Второй входной слот, например обычная книга, по-прежнему нужно оплатить.
Если цена выше предела, станция пропускает предложение и проверяет другие.
Когда цена снова укладывается в предел, торговля этой сделкой возобновляется.
Выключенные в IC2 сделки сам мод не включает.

Мод не отменяет рост спроса/цен и не гарантирует непрерывную торговлю.
Сделки по завышенной цене просто не исполняются. Жителям по-прежнему нужны
рабочие блоки, рабочее время и пополнение запасов. Пропуск ночи допустим:
фильтр цены не зависит от сна или ночного таймера.

Группы и сохранение
Настройки сохраняются в NBT каждой станции под ключом IC2PriceGuard.
Другие станции имеют собственные правила. Новые жители той же профессии
получают действие группового правила без отдельной настройки.
Ключ сделки учитывает предметы, NBT, второй платёж и количество результата.
Книги с разными зачарованиями/уровнями разделены. Цена первого платежа
не входит в ключ, поэтому изменение цены не теряет правило.
Удаление и установка нового блока не обещают переноса правил в предмет.
В одной станции хранится до 24000 символов настроек (сотни исключений).

Проверки и исходники
Проверки описаны в VALIDATION.txt. Полный запуск Minecraft/Forge и визуальная
проверка в игре в этой среде не выполнялись. Сначала проверьте на копии мира.
Внутри JAR в development/ находятся исходники, сборщик и тесты.
Для пересборки распакуйте development/ и выполните python build.py с JDK 17.
IC2, Minecraft и тестовые зависимости в этот JAR не включены.

Автор: Igniliron. Лицензия: MIT (см. LICENSE).
Разработано с помощью ChatGPT/Codex и проверено автором в игре.
