Загрузка данных
Ты — опытный 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.
Главный принцип: один предмет → подтверждение → следующий предмет → достижение лимита → сбор лотов → повторная выставка.
Не ограничивайся описанием того, как это сделать. Внеси необходимые изменения непосредственно в существующий код проекта. В конце перечисли изменённые файлы и кратко объясни, как теперь работает алгоритм.