Загрузка данных


Ты — опытный Java-разработчик Minecraft-модов для серверов Funtime. Тебе нужно переработать существующий алгоритм автоматической выставки предметов на аукционе, сохранив всю остальную функциональность мода и не сломав уже работающие функции.

ГЛАВНАЯ ЗАДАЧА — ПОЛНОСТЬЮ ПЕРЕРАБОТАТЬ АЛГОРИТМ ВЫСТАВЛЕНИЯ ПРЕДМЕТОВ

Измени логику выставления предметов на аукцион следующим образом:

1. Последовательное выставление предметов

Предметы должны выставляться строго по очереди, по одному слоту:

* Сначала выставляется предмет из 1-го быстрого слота инвентаря.
* После успешного выставления переходи ко 2-му слоту.
* Затем к 3-му.
* Затем к 4-му.
* Продолжай последовательно обрабатывать все слоты, в которых находятся подходящие предметы.

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

2. Ограничение количества слотов на аукционе

Когда предмет больше невозможно выставить из-за ограничения на количество активных лотов на аукционе, мод должен:

1. Зафиксировать, что достигнут лимит выставленных предметов.
2. Открыть интерфейс аукциона.
3. Найти все активные лоты, выставленные текущим игроком.
4. Забрать / снять все свои лоты с аукциона согласно доступной механике сервера.
5. Дождаться полного завершения сбора предметов и обновления инвентаря.
6. После этого начать выставление предметов заново, начиная с первого доступного подходящего слота.

После сбора лотов не допускай потери предметов, повторного ошибочного выставления или пропуска предметов.

3. Работа с быстрыми слотами инвентаря

Если предметы в быстрых слотах (hotbar) закончились, но в основном инвентаре ещё есть подходящие предметы:

* Просканируй основной инвентарь.
* Найди подходящие предметы.
* Перемести их в быстрые слоты, если это необходимо для текущей механики выставления.
* Продолжи последовательную выставку предметов.
* Не перемещай предметы без необходимости.
* Не перезаписывай и не выбрасывай другие предметы игрока.

Алгоритм должен уметь работать как с быстрыми слотами, так и с основным инвентарём, не зависая при переносе предметов.

4. Обработка состояний и задержек

Сделай надёжную систему состояний (state machine), чтобы мод понимал, на каком этапе он находится:

* Поиск подходящего предмета.
* Выбор конкретного слота.
* Выставление предмета.
* Ожидание подтверждения выставления.
* Обнаружение ограничения аукциона.
* Открытие аукциона.
* Сбор активных лотов.
* Обновление инвентаря.
* Возврат к последовательному выставлению.

Учитывай задержки открытия GUI, обновления контейнеров, серверные ответы и возможные задержки сети. Не выполняй действия раньше, чем интерфейс и инвентарь действительно готовы.

5. Защита от ошибок

Обязательно предусмотрите:

* Защиту от двойного выставления одного и того же предмета.
* Проверку, что предмет действительно исчез из исходного слота или был успешно выставлен.
* Обработку закрытия GUI.
* Обработку неудачного выставления.
* Защиту от бесконечного цикла при достижении лимита аукциона.
* Корректную работу при пустых слотах.
* Проверку наличия предметов перед каждой операцией.

6. Требования к реализации

Перед изменением кода:

1. Изучи весь существующий проект и найди текущую логику выставления предметов.
2. Определи, какие классы, методы и обработчики отвечают за аукцион и инвентарь.
3. Не переписывай весь мод без необходимости.
4. Сохрани существующие настройки, GUI и остальные работающие функции.
5. Интегрируй новый алгоритм в текущую архитектуру проекта.
6. Проверь код на ошибки компиляции и логические ошибки.
7. Если текущая реализация не позволяет надёжно определить успешное выставление или достижение лимита, объясни проблему и реализуй решение, совместимое с существующей архитектурой.

7. Итоговый результат

Мне нужен полностью рабочий и стабильный алгоритм последовательного выставления предметов на аукционе Funtime.

Главный принцип: один предмет → подтверждение → следующий предмет → достижение лимита → сбор лотов → повторная выставка.

Не ограничивайся описанием того, как это сделать. Внеси необходимые изменения непосредственно в существующий код проекта. В конце перечисли изменённые файлы и кратко объясни, как теперь работает алгоритм.